环境
操作系统CentOS7,这次升级从 1.15.0 升级到 1.16.0。
kubernetes版本的升级主要是升级kubeadm、kubectl和kubelet,升级应遵循以下原则:
1、apiserver保护版本最大,其它功能最多比apiserver小一个小版本号。
2、不能跨小版本升级。
使用下列命令列出可用版本
yum list --showduplicates kubeadm --disableexcludes=kubernetes
升级kubeadm
yum install -y kubeadm-1.16.0-0 --disableexcludes=kubernetes
kubectl drain k8s-master --ignore-daemonsets --force
kubeadm upgrade plan
kubeadm upgrade apply v1.16.0
kubectl uncordon k8s-master
yum install -y kubelet-1.16.0-0 kubectl-1.16.0-0 --disableexcludes=kubernetes
systemctl daemon-reload
systemctl restart kubelet
升级业务节点(同样适用于剩余的其它控制节点)
yum install -y kubeadm-1.16.0-0 --disableexcludes=kubernetes
#在master节点执行
kubectl drain k8s-node-a --ignore-daemonsets --force
kubeadm upgrade node
yum install -y kubelet-1.16.0-0 kubectl-1.16.0-0 --disableexcludes=kubernetes
systemctl daemon-reload
systemctl restart kubelet
#在master节点执行
kubectl uncordon k8s-node-a
遇到问题
问题一:kubeadm 升级前检查失败,提示没有控制平面角色
有两种处理方式
方式一:去除 master 污点和标签,所有升级步骤结束后需要重新配置回来
检查 label
kubectl get nodes --show-labels
删除 label 和 taint
kubectl taint node <node-name> node-role.kubernetes.io/master�kubectl label node <node-name> node-role.kubernetes.io/master�kubectl label node <node-name> node-role.kubernetes.io/master=
检查 label
kubectl get nodes --show-labels
检查是否可以升级
kubeadm upgrade plan
方式二:忽略提示
kubeadm upgrade plan --ignore-preflight-errors=ControlPlaneNodesReady
问题二:升级完后节点 notready
处理方式:
flannel 插件中缺少版本信息,在其 configmap 中添加,然后删除所有 flannel pod
查看 cm
kubectl get configmap kube-flannel-cfg -o yaml -n kube-syste
编辑
kubectl edit configmap kube-flannel-cfg -n kube-syste
问题三:个别 pod 起不来,日志提示权限不够
处理方式:
kubectl get pods -A -owide 发现 pod 调度到了 master 上。是由于前面删除了 master 污
点造成的。重新打上污点删除已调度 pod 后恢复正常。