Bootstrap

kubeadm升级k8s集群

背景:外部部署的三节点etcd, kubeadm部署双master,多node的k8s环境。由于版本迭代原因需要升级k8s

思路:
1、etcd数据备份(防止升级失败导致数据丢失)
2、升级master节点
3、升级node节点
4、验证集群状态

1、数据备份

etcdctl --cacert=/opt/kubernetes/ssl/ca.pem --cert=/opt/kubernetes/ssl/server.pem --key=/opt/kubernetes/ssl/server-key.pem --endpoints=https://192.168.1.36:2379 snapshot save /data/etcd_backup_dir/etcd-snapshot-`date +%Y%m%d`.db

2、升级master节点

1、查看kubeadm版本,并更新
yum list --showduplicates kubeadm 
yum install -y kubeadm-1.23.x-0

2、验证升级计划
kubeadm upgrade plan

3、选择要升级到的目标版本(apiserver、controller-manager、scheduler、kube-proxy)
kubeadm upgrade apply v1.23.x

4、node标记为不可调度,腾空节点
kubectl drain <node_name> --ignore-daemonsets

5、升级kubelet 和 kubectl
yum install -y kubelet-1.23.x-0 kubectl-1.23.x-0

6、重启
sudo systemctl daemon-reload
sudo systemctl restart kubelet

7、将节点标记为可调度,让其重新上线
kubectl uncordon <node_name>

升级其他控制节点与第一个控制面节点相同,但是不需要执行 kubeadm upgrade plan,同时用
kubeadm upgrade node 代替 kubeadm upgrade apply

3、升级node节点

1、更新kubeadm
yum install -y kubeadm-1.23.x-0
2、对于工作节点,下面的命令会升级本地的 kubelet 配置
kubeadm upgrade node
3、腾空节点
kubectl drain <node-to-drain> --ignore-daemonsets
4、升级 kubelet 和 kubectl
yum install -y kubelet-1.23.x-0 kubectl-1.23.x-0
5、重启 kubelet
sudo systemctl daemon-reload
sudo systemctl restart kubelet
6、取消对节点的保护
kubectl uncordon <node_name>

4、验证集群的状态

kubectl get nodes

kubeadm upgrade 原理(来自k8s官网)
在这里插入图片描述

;