一、安装环境准备
1、安装环境: centos7.5,一个master节点,两个node节点
CentOS Linux release 7.5.1804 (Core)
2、设置/etc/hosts文件的IP和主机名映射
10.20.0.14 k8smaster
10.20.0.15 k8snode1
10.20.0.16 k8snode2
二、总体安装
以下安装步骤若未指明,则都为在master节点的安装
1、配置docker和k8s仓库(/etc/yum.repo.d)
新建kubernetes.repo,编辑内容
[kubernetes]
name=Kubernetes Repo
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/ #这里使用的是国内阿里云镜像
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
enabled=1
2、docker仓库可直接在/etc/yum.repo.d目录下通过
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo得到
3、执行yum install docker kubelet-1.11.1 kubeadm-1.11.1 kubectl-1.11.1
注1:k8s这三个相关应用后面加入了-1.11.1,指明了安装版本,若需要安装最新版,则不需要加-1.11.1,但k8s版本更新较快,最新版可能不稳定且出问题后网上资料较少排查困难,因此不建议安装最新版
注2:若安装提示gpg key无法安装,则需要手动wget https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg和wget https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
然后手动导入两个密钥文件rpm --import yum-key.gpg rpm --import rpm-package-key.gpg
三、docker相关安装
4、为了使docker能正常访问bridge-nf-call-iptables ,需要把如下两个文件内容修改为1
/proc/sys/net/bridge/bridge-nf-call-ip6tables
/proc/sys/net/bridge/bridge-nf-call-iptables
若这两个文件原来的值都为0,则参考如下教程修改https://blog.youkuaiyun.com/xypds2010/article/details/52212323,否则继续
5、启动docker并设置docker自启动
systemctl start docker
systemctl enable docker
四、kubelet相关安装
6、设置kubelet
1)rpm -ql kubelet 查看kubelet安装了哪些文件
/etc/kubernetes/manifests
/etc/sysconfig/kubelet
/etc/systemd/system/kubelet.service
/usr/bin/kubelet
2)查看配置文件:cat /etc/sysconfig/kubelet
KUBELET_EXTRA_ARGS=
默认参数为空,可以先不用理会,后续有需要再修改
3)设置kubelet开机自启动:
systemctl enable kubelet
五、使用kubeadm完成集群初始化
7、在master节点初始化集群
1)kubeadm init --help查看init相关命令帮助
2)vim /etc/sysconfig/kubelet修改配置选项,忽略swap
3)KUBELET_EXTRA_ARGS="--fail-swap-on=false"
4)初始化
kubeadm init --kubernetes-version=v1.11.1 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --ignore-preflight-errors=Swap
5)如拉取镜像失败,则按如下方式处理
images=(kube-proxy-amd64:v1.11.1 kube-scheduler-amd64:v1.11.1 kube-controller-manager-amd64:v1.11.1 kube-apiserver-amd64:v1.11.1etcd-amd64:3.2.18 pause-amd64:3.1)
for imageName in ${images[@]} ; do
docker pull mirrorgooglecontainers/$imageName
docker tag mirrorgooglecontainers/$imageName k8s.gcr.io/$imageName
docker rmi mirrorgooglecontainers/$imageName
done
该命令为从mirrorgooglecontainers仓库拉取images里指定的镜像,并重命名tag,然后删除原来的镜像
由于镜像仓库国内无法访问,因此一般都拉取失败,此时就需要在本地先pull镜像,然后用docker tag命令更改镜像标签
初始化完成之后提示成功
6)同时可以看到一条加入当前集群的命令,该命令暂时不要执行,后续在node节点部署完之后再在node节点上安装
7)使用kubectl get cs(cs为componentstatus简写)
8)使用kubectl get nodes查看集群节点,看到master节点处于NotReady状态,这是因为集群网络组建flannel并未安装
9)到GitHub上搜索coreos/flannel仓库,readme文件里可以看到如下安装命令
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
执行该命令会自动拉去kube-proxy和kube-flannel镜像,稍等片刻重新查看节点状态即为Ready状态
10)同时使用kubectl get pods -n kube-system查看组建状态,-n后的参数指定了命名空间,status为running代表无误
六、在各node节点安装docker和kubelet、kubeadm、kubectl工具
8、至此,master节点部署已经完成,接下需要做的就是在各node节点安装dockers和kubelet、kubeadm、kubectl,然后执行kubeadm join那条命令将节点加入集群
9、分别在node1和node2节点上重复上文一到三的安装步骤(相关配置文件可以直接用scp拷贝到两个节点)
10、然后同样用vim /etc/sysconfig/kubelet命令修改kubelet配置,修改内容为
KUBELET_EXTRA_ARGS="--fail-swap-on=false"
11、执行加入集群的命令,需要添加--ignore-preflight-errors=Swap参数
kubeadm join 10.20.0.14:6443 --token 6dn3ug.44dcfvlnyt5orq63 --discovery-token-ca-cert-hash sha256:35717f83b75e9c3d580e46e1037d8bcbd43ec733c197d963eaf2f8a9f98a79ba --ignore-preflight-errors=Swap
12、tomg同样由于镜像被墙的,此处加入集群会失败,使用kubectl get pods -n kube-system -o wide命令会看到有两个pod一直在init和creating
13、此时使用kubectl describe pod kube-flannel-ds-amd64-ddtnx -n kube-system查看错误信息,可以看到还是因为镜像拉取失败的问题,因此将flannel、proxy和pause三个镜像使用docker save和docker load命令从master拷贝到node1和node2上,这样kubeadm就会从本地直接使用这些镜像,避免了拉取失败的问题
14、当两个节点都加入集群后,使用kubectl get node命令查看集群节点是否就绪
使用kubectl get pods -n kube-system -o wide查看pod状态
当所有节点都为ready状态且pod可以running起来就代表集群可以正常运转了
七、总结
使用kubeadm工具可以大大简化k8s部署流程,避免初学者因部署问题而望而却步,主要的坑就是kubeadm指定的仓库无法访问,因此先在本地拉取然后再创建pod资源,就可以避免拉取镜像失败的问题