kubernetes版本的升級主要是升級kubeadm、kubectl和kubelet,升級應遵循以下原則:
1、apiserver保護版本最大,其它功能最多比apiserver小一個小版本號。
2、不能跨小版本升級。
0、使用下列命令列出可用版本
yum list --showduplicates kubeadm --disableexcludes=kubernetes
操作系統CentOS7,這次升級從 1.15.0 升級到 1.16.0。
1、升級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
2、k8s-master升級後看到k8s-master處於NotReady狀態,查看日誌:journalctl -f -u kubelet,服務一直提示cni網絡組件有問題
[root@k8s-master CNI]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-master NotReady master 385d v1.16.0
k8s-node1 Ready node 385d v1.15.0
k8s-node2 Ready node 20h v1.15.0
journalctl -f -u kubelet
3、刪除原有flannel重新創建下試試:
[root@k8s-master CNI]# kubectl delete -f https://raw.githubusercontent.com/coreos/flannel/a70459be0084506e4ec919aa1c114638878db11b/Documentation/kube-flannel.yml
##刪除可能會報錯:
kubectl get DaemonSet -n kube-system
##刪除裏面的關於flannel的DaemonSet:
kubectl delete XXX -n kube-system
[root@k8s-master CNI]# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/a70459be0084506e4ec919aa1c114638878db11b/Documentation/kube-flannel.yml
clusterrole.rbac.authorization.k8s.io/flannel created
clusterrolebinding.rbac.authorization.k8s.io/flannel created
serviceaccount/flannel created
configmap/kube-flannel-cfg created
unable to recognize "kube-flannel.yml": no matches for kind "DaemonSet" in version "extensions/v1beta1"
unable to recognize "kube-flannel.yml": no matches for kind "DaemonSet" in version "extensions/v1beta1"
unable to recognize "kube-flannel.yml": no matches for kind "DaemonSet" in version "extensions/v1beta1"
unable to recognize "kube-flannel.yml": no matches for kind "DaemonSet" in version "extensions/v1beta1"
unable to recognize "kube-flannel.yml": no matches for kind "DaemonSet" in version "extensions/v1beta1"
4、換個flannel鏈接試試:
[root@k8s-master CNI]# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
podsecuritypolicy.policy/psp.flannel.unprivileged created
clusterrole.rbac.authorization.k8s.io/flannel configured
clusterrolebinding.rbac.authorization.k8s.io/flannel unchanged
serviceaccount/flannel unchanged
configmap/kube-flannel-cfg unchanged
daemonset.apps/kube-flannel-ds-amd64 created
daemonset.apps/kube-flannel-ds-arm64 created
daemonset.apps/kube-flannel-ds-arm created
daemonset.apps/kube-flannel-ds-ppc64le created
daemonset.apps/kube-flannel-ds-s390x created
5、我們查看k8s-master已經變成Ready狀態
[root@k8s-master CNI]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-master Ready master 385d v1.16.0
k8s-node1 Ready node 385d v1.15.0
k8s-node2 Ready node 20h v1.15.0
6、升級業務節點(同樣適用於剩餘的其它控制節點)
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