尽量不要跨版本升级
提前准备
1、环境
| 系统 | node | ip |
|---|---|---|
| centos7 | master01 | 10.1.126.33 |
| centos7 | node01 | 10.1.126.32 |
| centos7 | node02 | 10.1.126.31 |
2、版本对比
| 升级前 | 升级后 |
|---|---|
| v1.16.4 | v1.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”