使用kubeadm进行k8s集群升级
一、目标
操作系统:CentOS Linux release 7.6.1810 (Core)
安装软件:
docker:18.06.3-ce
从v1.15.5升级到v1.16.15
当前版本:
[root@master yum.repos.d]# kubectl get node -owide NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME master Ready master 18h v1.15.5 10.0.0.17 <none> CentOS Linux 7 (Core) 3.10.0-957.el7.x86_64 docker://18.6.3 node01 Ready,SchedulingDisabled <none> 17h v1.15.5 10.0.0.27 <none> CentOS Linux 7 (Core) 3.10.0-957.el7.x86_64 docker://18.6.3 node02 Ready <none> 17h v1.15.5 10.0.0.37 <none> CentOS Linux 7 (Core) 3.10.0-957.el7.x86_64 docker://18.6.3
二、升级kubeadm
1、配置k8s镜像源(所有主机)
[root@master yum.repos.d]# cat kubernetes.repo [kubernetes] name=Kubernetes baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/ enabled=1 gpgcheck=1 repo_gpgcheck=1 gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
2、查看可下载的kubeadm版本(任一主机)
yum list kubeadm --showduplicates | sort -r

3、下载需要升级的版本(所有主机)
[root@master yum.repos.d]# yum install -y kubeadm-1.16.5-0 --disableexcludes=kubernetes
4、验证kubeadm版本(任一主机)
[root@master yum.repos.d]# kubeadm version
kubeadm version: &version.Info{Major:"1", Minor:"16", GitVersion:"v1.16.15", GitCommit:"2adc8d7091e89b6e3ca8d048140618ec89b39369", GitTreeState:"clean", BuildDate:"2020-09-02T11:37:34Z", GoVersion:"go1.13.15", Compile r:"gc", Platform:"linux/amd64"}
5、验证升级计划(master主机)
[root@master yum.repos.d]# kubeadm upgrade plan

6、运行apply命令进行升级(master主机)
[root@master yum.repos.d]# kubeadm upgrade apply v1.16.15

7、其他node节点执行
[root@node01 ~]# kubeadm upgrade node [upgrade] Reading configuration from the cluster... [upgrade] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -oyaml' [upgrade] Skipping phase. Not a control plane node[kubelet-start] Downloading configuration for the kubelet from the "kubelet-config-1.16" ConfigMap in the kube-system namespace [kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml" [upgrade] The configuration for this node was successfully updated! [upgrade] Now you should go ahead and upgrade the kubelet package using your package manager.
三、升级Kubectl和Kubelet
1、腾空节点
# 将 <node-to-drain> 替换为你要腾空的控制面节点名称
kubectl drain <node-to-drain> --ignore-daemonsets
这里先升级master几点,因此执行了
[root@master yum.repos.d]# kubectl drain master --ignore-daemonsets node/master cordoned WARNING: ignoring DaemonSet-managed Pods: kube-system/kube-flannel-ds-vkkkb, kube-system/kube-proxy-xddvj evicting pod "coredns-58cc8c89f4-762x5" pod/coredns-58cc8c89f4-762x5 evicted node/master evicted
2、安装相同版本的kubelet和kubectl
[root@master yum.repos.d]# yum install -y kubelet-1.16.15-0 kubectl-1.16.15-0 --disableexcludes=kubernetes
3、重启kubelet
sudo systemctl daemon-reload sudo systemctl restart kubelet
4、将节点标记为可调度,让其重新上线
# 将 <node-to-drain> 替换为你的节点名称
kubectl uncordon <node-to-drain>
这里将master节点上线
[root@master yum.repos.d]# kubectl uncordon master node/master uncordoned
5、验证
[root@master yum.repos.d]# kubectl get node NAME STATUS ROLES AGE VERSION master Ready master 18h v1.16.15 node01 Ready,SchedulingDisabled <none> 18h v1.15.5 node02 Ready <none> 18h v1.15.5
6、同样的步骤升级node节点,验证
[root@master /]# kubectl get node -owide NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME master Ready master 18h v1.16.15 10.0.0.17 <none> CentOS Linux 7 (Core) 3.10.0-957.el7.x86_64 docker://18.6.3 node01 Ready <none> 18h v1.16.15 10.0.0.27 <none> CentOS Linux 7 (Core) 3.10.0-957.el7.x86_64 docker://18.6.3 node02 Ready,SchedulingDisabled <none> 18h v1.16.15 10.0.0.37 <none> CentOS Linux 7 (Core) 3.10.0-957.el7.x86_64 docker://18.6.3
至此,完成升级!

浙公网安备 33010602011771号