使用kubeadm升级Kubernetes集群到1.22版本
查看当前版本
1kubectl get nodes -owide
1NAME STATUS ROLES AGE VERSION
2k8s-master Ready <none> 548d v1.20.8
3k8s-node1 Ready <none> 548d v1.20.8
4k8s-node2 Ready <none> 548d v1.20.8
k8s不支持跨多个版本升级,因此需要先升级到1.21
安装kubeadm-1.21.4
1yum -y install kubeadm-1.21.4 kubectl-1.21.4 kubelet-1.21.4
创建升级计划
1kubeadm upgrade plan 1.21.4 --ignore-preflight-errors=ControlPlaneNodesReady,swap
由于没有label标识master节点,需要加上--ignore-preflight-errors=ControlPlaneNodesReady
或者执行
1kubectl label node k8s-master node-role.kubernetes.io/master=''
1[upgrade/config] Making sure the configuration is correct:
2[upgrade/config] Reading configuration from the cluster...
3[upgrade/config] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -o yaml'
4[preflight] Running pre-flight checks.
5[upgrade] Running cluster health checks
6 [WARNING ControlPlaneNodesReady]: failed to find any nodes with a control-plane role
7[upgrade] Fetching available versions to upgrade to
8[upgrade/versions] Cluster version: v1.20.8
9[upgrade/versions] kubeadm version: v1.21.4
10[upgrade/versions] Target version: 1.21.4
11[upgrade/versions] Latest version in the v1.20 series: 1.21.4
12
13Components that must be upgraded manually after you have upgraded the control plane with 'kubeadm upgrade apply':
14COMPONENT CURRENT TARGET
15kubelet 3 x v1.20.8 1.21.4
16
17Upgrade to the latest version in the v1.20 series:
18
19COMPONENT CURRENT TARGET
20kube-apiserver v1.20.8 1.21.4
21kube-controller-manager v1.20.8 1.21.4
22kube-scheduler v1.20.8 1.21.4
23kube-proxy v1.20.8 1.21.4
24CoreDNS 1.7.0 v1.8.0
25etcd 3.4.13-0 3.4.13-0
26
27You can now apply the upgrade by executing the following command:
28
29 kubeadm upgrade apply 1.21.4
30
31_____________________________________________________________________
32
33
34The table below shows the current state of component configs as understood by this version of kubeadm.
35Configs that have a "yes" mark in the "MANUAL UPGRADE REQUIRED" column require manual config upgrade or
36resetting to kubeadm defaults before a successful upgrade can be performed. The version to manually
37upgrade to is denoted in the "PREFERRED VERSION" column.
38
39API GROUP CURRENT VERSION PREFERRED VERSION MANUAL UPGRADE REQUIRED
40kubeproxy.config.k8s.io v1alpha1 v1alpha1 no
41kubelet.config.k8s.io v1beta1 v1beta1 no
42_____________________________________________________________________
43
检查没有问题之后,开始准备镜像
1kubeadm config images list
1k8s.gcr.io/kube-apiserver:v1.21.4
2k8s.gcr.io/kube-controller-manager:v1.21.4
3k8s.gcr.io/kube-scheduler:v1.21.4
4k8s.gcr.io/kube-proxy:v1.21.4
5k8s.gcr.io/pause:3.4.1
6k8s.gcr.io/etcd:3.4.13-0
7k8s.gcr.io/coredns/coredns:v1.8.0
镜像可以从过来的镜像站上获取,或者科学上网获取
导出原配置进行修改
1kubeadm config view > kubeadm-config-upgrade-v1.21.4.yaml
1vim kubeadm-config-upgrade-v1.21.4.yaml
2...
3dns:
4 imageRepository: k8s.gcr.io # 可以修改为国内的镜像仓库地址
5 imageTag: v1.8.0
6 type: CoreDNS
7etcd:
8 local:
9 imageRepository: k8s.gcr.io # 可以修改为国内镜像仓库地址
10 dataDir: /var/lib/etcd
11 imageTag: 3.4.13-0
12imageRepository: k8s.gcr.io # 可以修改为国内镜像仓库
13kind: ClusterConfiguration
14kubernetesVersion: v1.21.4 # 指定升级后的版本
15...
预升级,检查有无错误
1kubeadm upgrade apply 1.21.4 --config kubeadm-config-upgrade-v1.21.4.yaml --ignore-preflight-errors=ControlPlaneNodesReady,swap --dry-run
当输出[dryrun] Finished dryrunning successfully!
,说明配置没有问题,可以升级了
1kubeadm upgrade apply 1.21.4 --config kubeadm-config-upgrade-v1.21.4.yaml --ignore-preflight-errors=ControlPlaneNodesReady,swap
等待升级完成。
1...
2[upgrade/successful] SUCCESS! Your cluster was upgraded to "v1.21.4". Enjoy!
3
4[upgrade/kubelet] Now that your control plane is upgraded, please proceed with upgrading your kubelets if you haven't already done so.
升级node
1kubeadm upgrade node
注意需要重启kubelet服务看到的才是新的版本,重启kubelet服务
1systemctl daemon-reload
2systemctl restart kubelet
检查版本
1kubectl get nodes
2NAME STATUS ROLES AGE VERSION
3k8s-master Ready <none> 548d v1.21.4
4k8s-node1 Ready <none> 548d v1.21.4
5k8s-node2 Ready <none> 548d v1.21.4
升级到1.22
接下来升级到1.22
方法和上面的一样
1yum -y install kubeadm-1.22.0 kubectl-1.22.0 kubelet-1.22.0
2kubeadm upgrade plan 1.22.0
获取镜像
1kubeadm config images list
1k8s.gcr.io/kube-apiserver:v1.22.0
2k8s.gcr.io/kube-controller-manager:v1.22.0
3k8s.gcr.io/kube-scheduler:v1.22.0
4k8s.gcr.io/kube-proxy:v1.22.0
5k8s.gcr.io/pause:3.5
6k8s.gcr.io/etcd:3.5.0-0
7k8s.gcr.io/coredns/coredns:v1.8.4
升级
1kubeadm upgrade apply 1.22.0 --dry-run
2kubeadm upgrade apply 1.22.0
3kubeadm upgrade node
重启kubelet
1systemctl daemon-reload
2systemctl restart kubelet
观察升级结果
1kubectl get nodes
2NAME STATUS ROLES AGE VERSION
3k8s-master Ready control-plane 548d v1.22.0
4k8s-node1 Ready <none> 548d v1.22.0
5k8s-node2 Ready <none> 548d v1.22.0
- 原文作者:黄忠德
- 原文链接:https://huangzhongde.cn/post/Kubernetes/%E4%BD%BF%E7%94%A8kubeadm%E5%8D%87%E7%BA%A7k8s%E9%9B%86%E7%BE%A4%E5%88%B01.22/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。