kubernetes版本的升级主要是升级kubeadm、kubectl和kubelet,升级应遵循如下原则:node
一、apiserver保护版本最大,其它功能最多比apiserver小一个小版本号。git
二、不能跨小版本升级。github
0、使用下列命令列出可用版本
yum list --showduplicates kubeadm --disableexcludes=kubernetes
操做系统CentOS7,此次升级从 1.15.0 升级到 1.16.0。api
一、升级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
二、k8s-master升级后看到k8s-master处于NotReady状态,查看日志:journalctl -f -u kubelet,服务一直提示cni网络组件有问题app
[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
三、删除原有flannel从新建立下试试:ide
[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"
四、换个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
五、咱们查看k8s-master已经变成Ready状态3d
[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
六、升级业务节点(一样适用于剩余的其它控制节点)rest
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