00:文章简介
介绍如何使用kubeadm部署的k8s集群,如何更新集群节点的版本。
01:更新前提和注意事项
我们可能出于某些原因,想要对集群进行更新。
02:更新中涉及命令
2.1:master节点
查看当前最新版本软件
# 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
安装最新软件
apt install kubelet=1.22.2-00 kubeadm=1.22.2-00 kubectl=1.22.2-00
查看更新的条件
kubeadm upgrade plan
执行kubeadm软件更新
kubeadm upgrade apply v1.22.2
2.1:node节点
查看软件版本
# apt-cache madison kubeadm | head -1
kubeadm | 1.22.2-00
# apt-cache madison kubelet | head -1
kubelet | 1.22.2-00
安装最新软件
apt install kubelet=1.22.2-00 kubeadm=1.22.2-00 kubectl=1.22.2-00
执行kubeadm软件更新
kubeadm upgrade node
# 老版本需要有 "--kubelet-version 版本号" 参数,对于最新版本k8s来说不需要
03:更新master实践
3.1:步骤
- 先更新master03节点,将master03从haproxy中踢出
- 使用master03节点下载最新的镜像,并打tag上传到harbor
- 更新软件
- 更新kubeadm
- 更新root权限
3.2:踢出master03
ha01
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
systemctl restart haproxy
3.3:更新镜像
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:更新软件
apt install kubeadm=1.22.2-00 kubectl=1.22.2-00 kubelet=1.22.2-00
检查软件版本
# 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
查看更新条件
kubeadm upgrade plan
进行更新
kubeadm upgrade apply v1.22.2
更新完成
更新root权限
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
查看结果
3.5:更新其他master节点
步骤依然是
- 将要更新的节点在haproxy中踢出
- apt更新软件
- kubeadm更新集群
- 更新root权限
04:更新node实践
更新node节点的步骤
- 冻结node节点
- 驱离node节点上的pod
- apt升级软件
- kubeadm升级
- 取消node的冻结
4.1:冻结并驱离
kubectl cordon kubeadm-node01
kubectl drain kubeadm-node01 --delete-emptydir-data --ignore-daemonsets --force
4.2:升级软件
apt升级软件
apt install kubeadm=1.22.2-00 kubelet=1.22.2-00
kubeadm升级
kubeadm upgrade node
查看状态
重新激活node01
kubectl uncordon kubeadm-node01
4.3:更新其他node节点
按照上面的步骤依次更新其他节点,最后的效果
05:集群故障模拟
在我们规划主机时,就说过每个集群的数量应该为奇数,3个master节点可以允许1个故障,5个master节点可以允许2个故障。。。。
我们先把haproxy的代理全部打开
master03关机查看效果
master02关机查看效果
演示完成后打开master02和master03
评论区