有关K8S及其依赖的安装,见上一个博客:https://blog.csdn.net/a429367172/article/details/96426149
前期准备
建议以root登录。
需要将节点的防火墙、SElinux和swap分区关闭。
关闭防火墙:
systemctl stop firewalld.service #关闭防火墙
systemctl disable firewalld.service #禁止开机启动
firewall-cmd --state #查看防火墙状态
SElinux关闭:
setenforce 0 #暂时关闭
#永久关闭
vi /etc/selinux/config
修改其中
SELINUX = disabled
关闭swap:
swapoff -a
对于Centos7,需要配置系统内核参数,使通过网桥的流量也进去iptables/netfilter:
vi /etc/sysctl.conf
#加入以下语句:
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward=1
#执行如下语句查看配置
sysctl -p
搭建
- 启动kubeadm服务:systemctl enable kubelet && systemctl start kubelet
- kubeadm init --kubernetes-version=v1.13.0 --pod-network-cidr=192.168.0.0/16 #初始化安装k8s master
- 配置kubectl认证信息(Master节点操作)
export KUBECONFIG=/etc/kubernetes/admin.conf
也可以直接放到~/.bash_profile
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile source ~/.bash_profile
- 安装网络组件Calico: kubectl apply -f \
https://docs.projectcalico.org/v3.1/getting-started/kubernetes/installation/hosted/kubeadm/1.7/calico.yaml 需要注意:使用 watch kubectl get pods --all-namespaces 检查coreDNS运行状态,如果为running则可以继续,如下: - 节点加入集群:
#创建加入集群的语句 kubeadm token create --print-join-command #kubeadm join 192.168.195.148:6443 --token jr7z3k.cbikhpttxj8xs0zz --discovery-token-ca-cert-hash sha256:9ec71a1223a8b1ca1ea035400c73d21bd2a6ebdc032776cbd387ac6e3138ebcb
首先,在master上创建需要加入集群的语句,然后在每个slave上运行它的输出语句(如上面注释部分,每个人的都不一样),即可加入集群。slave上默认没有安装kubeadm,需要用如下语句安装:
#配置阿里云镜像 cat <<EOF > /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=0 EOF yum -y install epel-release yum clean all yum makecache #安装kubelet和kubeadm yum install -y kubelet-1.13.0 kubeadm-1.13.0
加入集群的结果如下:
踩坑注意:配置阿里云镜像时,一定要在root用户下运行脚本,用sudo打开的话会显示权限不够,我暂时未找到原因,还是root下吧
问题2:然后使用`watch kubectl get pods --all-namespaces`检查coreDNS运行状态,状态为pend。
用以下命令查看:
解决方法:(用docker安装calico镜像之后,使用如下语句)
kubectl apply -f \
https://docs.projectcalico.org/v3.1/getting-started/kubernetes/installation/hosted/kubeadm/1.7/calico.yaml
其中docker安装calico镜像的命令如下:
docker pull zjuzzb/calico-node
docker tag zjuzzb/calico-node quay.io/calico/node:v3.1.4
docker image remove docker.io/zjuzzb/calico-node
docker pull zjuzzb/calico-cni
docker tag zjuzzb/calico-cni quay.io/calico/cni:v3.1.4
docker image remove docker.io/zjuzzb/calico-cni
小测试
接下来,我们可以找一个镜像来部署到我们的k8s上了,源码下载地址为:https://github.com/zjuzzb/http-test/tree/master
我们利用Go语言环境,将源码编译成二进制文件,用docker save命令打包成镜像文件,镜像的下载地址:链接:https://pan.baidu.com/s/1lgMOxPCAT4JLZiaXeRH2-A
提取码:s4zo
然后我们利用docker load -i http-test命令,将其加载到docker里面,结果如下:
需要注意的是,后面k8s部署不一定是部署在哪个节点上,所以我是把s1,s2,s3三台机器的docker上都加载了这个镜像。
先将http-test-template.yaml里面的image改成上图版本latest,修改后的结果如下:
修改成功之后,我们利用源码文件夹下写好的autoyaml.sh和autodeploy.sh脚本来部署到k8s上:
#当前目录在http-test目录下
chmod 777 *.sh
./autoyaml.sh 3
./autodeploy.sh 3 #3也可以指定别的数
没有问题的话,运行如下:
接着我们就可以用curl ip:8888来测试我们的部署了:(其中ip是图中标红部分)
运行完毕,我这边可能由于网络原因,导致request收不到,但是基本运行到这里就成功了。
需要注意的是:
当部署pod出问题的时候,最好将原来pod删除,重新部署,利用如下命令:
kubectl get pods --all-namespaces #查看需要重新部署pod的NAME,分别为name1, name2, name3
kubectl delete pods name1 name2 name3 #删除pod
./autodelete.sh 3 #3是你创建的yaml数
./autoyaml.sh 3
./autodeploy.sh 3 #重新部署
注意:三台虚拟机配置好之后,就不要关机了,每次挂起就可以了。一旦重新启动,kubenet配置就有问题了,这时候需要删除节点,重新加入kubenets:
#删除node s2,s3:
#1.在master上执行
kubectl drain s2 --delete-local-data --force --ignore-daemonsets
kubectl delete node s2
kubectl drain s3 --delete-local-data --force --ignore-daemonsets
kubectl delete node s3
kubeadm reset
#2.分别在slave1和slave2上执行
kubeadm reset
#3.重新初始化master
kubeadm init --kubernetes-version=v1.13.0 --pod-network-cidr=192.168.0.0/16
#4.重新部署网络组建
kubectl apply -f \
https://docs.projectcalico.org/v3.1/getting-started/kubernetes/installation/hosted/kubeadm/1.7/calico.yaml
#5.生成token
kubeadm token create
#kubeadm join --token aa78f6.8b4cafc8ed26c34f --discovery-token-ca-cert-hash sha256:...
#6.执行token,重新加入
kubeadm join --token aa78f6.8b4cafc8ed26c34f --discovery-token-ca-cert-hash sha256:... #根据自己的来