在安装前,最好事先准备好一个干净的环境,不然会浪费更多的时间,尤其是之前折腾过docker的一些环境。我因为之前安装过一个低版本的docker-ce,之后用yum进行升级之后,再去安装kubeadm,kubectl出现各种问题,最后放弃解决了。
搭建环境
- CentOS 7.6
- Docker 18.06.1-ce
- Kubernetes v1.13.1
- virtualBox 5.0.38
机器
- master:hostname:master.localdomain ip: 10.17.3.110
前期准备
- 设置双核
注:k8s要求
关闭虚拟机之后,设置->系统->处理器->设置为2
- 关闭防火墙
关闭防火墙
|
|
禁用SELINUX
|
|
- 关闭swap分区
注:k8s要求
临时生效
|
|
永久生效
在文件/etc/fstab中,删除”swap”这一行
- 修改hostname
注: kubernetes 是根据 hostname 来标示各节点的
|
|
安装docker
- 添加docker镜像
|
|
- 安装依赖,添加镜像
|
|
- 查看最新的docker版本
|
|
- 安装18.06.1
注:Kubernetes 1.12已经针对Docker的1.11.1, 1.12.1, 1.13.1, 17.03, 17.06, 17.09, 18.06等版本做了验证,需要注意Kubernetes 1.12最低支持的Docker版本是1.11.1
|
|
启动docker
|
|
验证
|
|
确认一下iptables filter表中FOWARD链的默认策略(pllicy)为ACCEPT
注:Docker从1.13版本开始调整了默认的防火墙规则,禁用了iptables filter表中FOWARD链,这样会引起Kubernetes集群中跨Node的Pod无法通信
|
|
|
|
安装kubelet,kubeadm,kubectl
- 添加国内kubelet镜像
|
|
- 修改网络开启桥接网络支持,只针对(RHEL/CentOS 7)系统
注:配置转发相关参数,否则可能会出错
|
|
执行命令使其生效
|
|
- 安装
|
|
3.1 安装k8s-1.11.3的版本
- 配置kubelet和docker的cgroups一致
|
|
- 启动
注:这个时候查看版本或者kubectl都会报错”The connection to the server localhost:8080 was refused
“,不要担心,接着走后面的流程
|
|
启动master
- kubeadm初始化
注:见到这个文字就表示成功了”Your Kubernetes master has initialized successfully!”
如果失败了,执行kubeadm reset删除之前的一些文件,再进行kubeadm init
因为我们选择flannel作为Pod网络插件,所以上面的命令指定–pod-network-cidr=10.244.0.0/16
|
|
- 按照successfully提示执行后续命令
|
|
- 验证
|
|
添加flannel网络
下载yml文件
1wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml添加iface启动参数
注:有多个网卡的话,需要在kube-flannel.yml中使用–iface参数指定集群主机内网网卡的名称,否则可能会出现dns无法解析。比如我是用的virtualBox,存在多个网卡,使用的是enp0s3网卡,所以修改如下(因为yaml文件创建5个针对不同平台的DaemonSet,所以最好是都改了)123456789containers:- name: kube-flannelimage: quay.io/coreos/flannel:v0.10.0-amd64command:- /opt/bin/flanneldargs:- --ip-masq- --kube-subnet-mgr- --iface=enp0s3安装
1kubectl apply -f kube-flannel.yml
添加node节点
- 添加节点1kubeadm join 10.17.3.110:6443 --token vh535w.c4abw601jzuxt7su --discovery-token-ca-cert-hash sha256:25bf91dd3e69f0bfe1f5600f0ac56633ed5c58ca89d906b6cad611eb01e04356
测试网络
创建测试development
1kubectl run curl --image=radial/busyboxplus:curl -it在容器中执行
1nslookup kubernetes.default
输出结果如下:
|
|
- 删除1kubectl delete deployment curl
验证集群
- 查看集群状态1kubectl get cs
输出结果如下
- 查看node状态
注:刚执行完添加节点命令后,可以稍等下再去查看1kubectl get nodes
输出结果如下:
- 查看pod状态1kubectl -n kube-system get pod --all-namespaces
输出结果如下:
其他注意项
初始化master节点(kubeadm init)失败后,使用”kubeadm reset”回到初始化之前的状态,再次进行初始化
master初始化成功后,没有记录node加入集群的命令(kubectl join)
简单方法1kubeadm token create --print-join-command
第二种方法
token 是使用指令 kubeadm token generate 生成的,执行过程如有异常,用命令kubeadm reset 初始化后重试,生成的 token 有效时间为 24 小时,超过 24 小时后需要重新使用命令 kubeadm token create 创建新的 token。
discovery-token-ca-cert-hash 的值可以使用命令查看,命令:openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed ‘s/^.* //‘
- 查看kube-system日志
|
|
- 重新部署node
在集群中删除node信息(在master执行)
node删除flannel网段
- 节点状态不正确
查看日志
|
|
查看kubelet状态
- 其他节点管理集群12scp root@<master_ip>:/etc/kubernetes/admin.conf .kubectl --kubeconfig ./admin.conf get nodes
注意:
当使用systemctl start kubelet失败的时候,可以使用”systemctl status kubelet -l”,”journalctl -xeu kubelet
“查看详细信息
- 如果网络发生了变更
先回滚,再初始化,按照上述流程走kubeadm reset kubeadm init #记得修改/etc/hosts #记得修改hostname(/etc/hostname和/etc/sysconfig/network)
参考链接
亮亮的k8s搭建
kubeadm-install-k8s
centos7使用kubeadm安装kubernetes 1.11版本多主高可用
使用kubeadm安装Kubernetes 1.12
国内使用 kubeadm 在 Centos 7 搭建 Kubernetes 集群