2022-最全k8s版本升级

602 阅读2分钟

尽量不要跨版本升级

参见官方文档


提前准备

1、环境
系统nodeip
centos7master0110.1.126.33
centos7node0110.1.126.32
centos7node0210.1.126.31
2、版本对比
升级前升级后
v1.16.4v1.17.4
3、所有master和node下载v1.17.4镜像
下载v1.17.4版本镜像
[root@master01 ~]# cat image-1.17.4.sh
#!/bin/bash
url=aiotceo
version=v1.17.4
images=(`kubeadm config images list --kubernetes-version=$version|awk -F '/' '{print $2}'`)
for imagename in ${images[@]} ; do
  docker pull $url/$imagename
  docker tag $url/$imagename k8s.gcr.io/$imagename
  docker rmi -f $url/$imagename
done

[root@master01 ~]# sh image-1.17.4.sh


升级 master01 节点

1. 升级kubeadm
查看可安装的kubeadm版本
yum list --showduplicates kubeadm --disableexcludes=kubernetes

安装v1.17.4版本
yum install -y kubeadm-1.17.4-0 --disableexcludes=kubernetes

查看版本
kubeadm version

执行drain命令,将运行在master01上运行的pod平滑的赶到其他节点上
kubectl drain master01 --ignore-daemonsets
检查您的集群是否处于可升级状态
kubeadm upgrade plan
[root@master01 ~]# kubeadm upgrade plan
[upgrade/config] Making sure the configuration is correct:
[upgrade/config] Reading configuration from the cluster...
[upgrade/config] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -oyaml'
[preflight] Running pre-flight checks.
[upgrade] Making sure the cluster is healthy:
[upgrade] Fetching available versions to upgrade to
[upgrade/versions] Cluster version: v1.16.4
[upgrade/versions] kubeadm version: v1.17.4
I0909 11:01:08.452486   17430 version.go:251] remote version is much newer: v1.19.0; falling back to: stable-1.17
[upgrade/versions] Latest stable version: v1.17.11
[upgrade/versions] Latest version in the v1.16 series: v1.16.15

Components that must be upgraded manually after you have upgraded the control plane with 'kubeadm upgrade apply':
COMPONENT   CURRENT       AVAILABLE
Kubelet     3 x v1.16.4   v1.16.15

Upgrade to the latest version in the v1.16 series:

COMPONENT            CURRENT   AVAILABLE
API Server           v1.16.4   v1.16.15
Controller Manager   v1.16.4   v1.16.15
Scheduler            v1.16.4   v1.16.15
Kube Proxy           v1.16.4   v1.16.15
CoreDNS              1.6.2     1.6.5
Etcd                 3.3.15    3.3.17-0

You can now apply the upgrade by executing the following command:

	kubeadm upgrade apply v1.16.15

_____________________________________________________________________

Components that must be upgraded manually after you have upgraded the control plane with 'kubeadm upgrade apply':
COMPONENT   CURRENT       AVAILABLE
Kubelet     3 x v1.16.4   v1.17.11

Upgrade to the latest stable version:

COMPONENT            CURRENT   AVAILABLE
API Server           v1.16.4   v1.17.11
Controller Manager   v1.16.4   v1.17.11
Scheduler            v1.16.4   v1.17.11
Kube Proxy           v1.16.4   v1.17.11
CoreDNS              1.6.2     1.6.5
Etcd                 3.3.15    3.4.3-0

You can now apply the upgrade by executing the following command:

	kubeadm upgrade apply v1.17.11

Note: Before you can perform this upgrade, you have to update kubeadm to v1.17.11.

_____________________________________________________________________

升级应用v1.17.4版本
kubeadm upgrade apply v1.17.4
恢复master01调度任务
kubectl uncordon master01
2、 升级 kubelet 和 kubectl
yum install -y kubelet-1.17.4-0 kubectl-1.17.4-0 --disableexcludes=kubernetes

重新加载配置and重启kubelet
systemctl daemon-reload && systemctl restart kubelet

3、查看升级后的版本

master01已经升级成v1.17.4版本

升级node01节点

1. 安装kubeadm(node02节点)
yum install -y kubeadm-1.17.4-0 --disableexcludes=kubernetes

2. 执行 train node01(在master01上操作)
kubectl drain node01 --ignore-daemonsets

3. 在master01上执行 kubeadm upgrade node

4. 升级 kubelet and kubectl(在node01上操作)
yum install -y kubelet-1.17.4-0 kubectl-1.17.4-0 --disableexcludes=kubernetes

5. 重新加载配置and重启kubelet (在node01上操作)
systemctl daemon-reload && systemctl restart kubelet

6. uncordon node01(在master01上操作)
kubectl uncordon node01

至此master01和node01已经全部升级完成,其他master和woker节点按照以上升级即可


升级过程中可能遇到cni插件的问题,需要reset后重新apply flannel插件

kubectl apply   -f https://raw.githubusercontent.com/coreos/flannel/2140ac876ef134e0ed5af15c65e414cf26827915/Documentation/kube-flannel.yml
kubeadm reset
systemctl stop kubelet
systemctl stop docker
rm -rf /var/lib/cni/
rm -rf /var/lib/kubelet/*
rm -rf /etc/cni/
ifconfig cni0 down
ifconfig flannel.1 down
ifconfig docker0 down
ip link delete cni0
ip link delete flannel.1
systemctl start docker

更多精彩关注公众号“51运维com”