kubernetes07-kubeadm更新k8s集群

00:文章简介

介绍如何使用kubeadm部署的k8s集群,如何更新集群节点的版本。

01:更新前提和注意事项

我们可能出于某些原因,想要对集群进行更新。

image

02:更新中涉及命令

2.1:master节点

查看当前最新版本软件

1
2
3
4
5
6
7
8
# apt-cache madison kubeadm | head -1
kubeadm | 1.22.2-00

# apt-cache madison kubelet | head -1
kubelet | 1.22.2-00

# apt-cache madison kubectl | head -1
kubectl | 1.22.2-00

安装最新软件

1
apt install kubelet=1.22.2-00 kubeadm=1.22.2-00 kubectl=1.22.2-00

查看更新的条件

1
kubeadm upgrade plan

执行kubeadm软件更新

1
kubeadm upgrade apply v1.22.2

2.1:node节点

查看软件版本

1
2
3
4
5
# apt-cache madison kubeadm | head -1
kubeadm | 1.22.2-00

# apt-cache madison kubelet | head -1
kubelet | 1.22.2-00

安装最新软件

1
apt install kubelet=1.22.2-00 kubeadm=1.22.2-00 kubectl=1.22.2-00

执行kubeadm软件更新

1
2
kubeadm upgrade node
# 老版本需要有 "--kubelet-version 版本号" 参数,对于最新版本k8s来说不需要

03:更新master实践

3.1:步骤

  1. 先更新master03节点,将master03从haproxy中踢出
  2. 使用master03节点下载最新的镜像,并打tag上传到harbor
  3. 更新软件
  4. 更新kubeadm
  5. 更新root权限

3.2:踢出master03

ha01

1
2
3
4
5
6
listen k8s-api-6443
bind 172.20.200.200:6443
mode tcp
server master1 172.20.200.201:6443 check inter 3s fall 3 rise 5
server master2 172.20.200.202:6443 check inter 3s fall 3 rise 5
# server master3 172.20.200.203:6443 check inter 3s fall 3 rise 5
1
systemctl restart haproxy

3.3:更新镜像

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
apt install -y expect

# 执行脚本
#!/bin/bash
#login
expect -c "
spawn docker login harbor.linux98.com
expect {
\"*Username:*\" {send \"cpli\r\"; exp_continue}
\"*Password:*\" {send \"A12345678a\r\"; exp_continue}
} "

# download and upload
images=$(kubeadm config images list --kubernetes-version=v1.22.2 | grep -o '[a-z|-]*:.*')

for i in ${images}
do
docker pull registry.aliyuncs.com/google_containers/$i
docker tag registry.aliyuncs.com/google_containers/$i harbor.linux98.com/google_containers/$i
docker rmi registry.aliyuncs.com/google_containers/$i
docker push harbor.linux98.com/google_containers/$i
done

3.4:更新软件

1
apt install kubeadm=1.22.2-00 kubectl=1.22.2-00 kubelet=1.22.2-00

image

检查软件版本

1
2
3
4
5
6
7
8
9
10
# kubectl version
Client Version: version.Info{Major:"1", Minor:"22", GitVersion:"v1.22.2",
Server Version: version.Info{Major:"1", Minor:"22", GitVersion:"v1.22.1", # master01还是1.22.1

# kubeadm version
kubeadm version: &version.Info{Major:"1", Minor:"22", GitVersion:"v1.22.2"

# kubelet --version
Kubernetes v1.22.2

查看更新条件

1
kubeadm upgrade plan

进行更新

1
kubeadm upgrade apply v1.22.2

更新完成

image

更新root权限

1
2
3
4
rm -rf $HOME/.kube
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

查看结果

image

3.5:更新其他master节点

步骤依然是

  1. 将要更新的节点在haproxy中踢出
  2. apt更新软件
  3. kubeadm更新集群
  4. 更新root权限

image

04:更新node实践

更新node节点的步骤

  1. 冻结node节点
  2. 驱离node节点上的pod
  3. apt升级软件
  4. kubeadm升级
  5. 取消node的冻结

4.1:冻结并驱离

1
2
kubectl cordon kubeadm-node01
kubectl drain kubeadm-node01 --delete-emptydir-data --ignore-daemonsets --force

image

4.2:升级软件

apt升级软件

1
apt install kubeadm=1.22.2-00 kubelet=1.22.2-00

kubeadm升级

1
kubeadm upgrade node

查看状态

image

重新激活node01

1
kubectl uncordon kubeadm-node01

image

4.3:更新其他node节点

按照上面的步骤依次更新其他节点,最后的效果

image

05:集群故障模拟

在我们规划主机时,就说过每个集群的数量应该为奇数,3个master节点可以允许1个故障,5个master节点可以允许2个故障。。。。

我们先把haproxy的代理全部打开

image

master03关机查看效果

image

master02关机查看效果

image

演示完成后打开master02和master03

image