領導說Kubernetes1.32太舊了,讓升級到1.33,只能說輕松拿捏,快速搞定!
前一篇文章部署了1.32版本的Kubernetes集群,現在將集群升級為1.33版本,如果還沒部署,可以參考下面鏈接部署一個
升級前版本:1.32.9

升級后版本:1.33.5

1. 升級注意事項
- 升級集群版本建議逐步升級,k8s版本以 x.y.z 表示,其中 x 是主要版本, y 是次要版本,z 是補丁版本,盡量不能跳過次要版本升級,比如1.32.0->1.34.0可能遭遇失敗,補丁版本可以跳躍更新,比如1.32.0->1.32.10
- 盡量將kubelet和kubeadm版本保持一致,可以偏差一個版本
- 升級后,因為容器spec的哈希值已更改,所有容器都會被重新啟動
- 升級過程需要騰空升每個節點,將工作負載遷移
升級工作的基本流程如下:
- 升級控制節點節點
- 升級其他控制平面節點(高可用集群)
- 升級工作節點
- 本次從1.32.9升級到1.33.5
2. 更改軟件包倉庫(所有節點)
將倉庫的1.32改為1.33即可:
vi /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.33/rpm/
enabled=1
gpgcheck=0
將軟件倉庫配置分發到node節點:
scp /etc/yum.repos.d/kubernetes.repo root@10.0.0.211:/etc/yum.repos.d
scp /etc/yum.repos.d/kubernetes.repo root@10.0.0.212:/etc/yum.repos.d檢查可用版本:
[root@k8s-master ~]# yum list kubelet --showduplicates | sort -r |grep 1.33
3. 升級前備份
# 備份目錄(所有節點)
cp -a /etc/kubernetes/ /etc/kubernetes.bak
# 備份存儲(master節點操作)
cp -a /var/lib/etcd /var/lib/etcd.bak
# 安裝etcdctl工具
[root@k8s-master ~]# ETCD_VER=v3.6.5
[root@k8s-master ~]# wget https://github.com/etcd-io/etcd/releases/download/${ETCD_VER}/etcd-${ETCD_VER}-linux-amd64.tar.gz
[root@k8s-master ~]# tar xvf etcd-${ETCD_VER}-linux-amd64.tar.gz
[root@k8s-master ~]# mv etcd-${ETCD_VER}-linux-amd64/etcd* /usr/local/bin/
[root@k8s-master ~]# etcdctl version
etcdctl version: 3.6.5
API version: 3.6
# 備份etcd數據(master節點操作)
ETCDCTL_API=3 etcdctl snapshot save /var/lib/etcd/backup.db \
--endpoints=https://127.0.0.1:2379 \
--cacert=/etc/kubernetes/pki/etcd/ca.crt \
--cert=/etc/kubernetes/pki/etcd/server.crt \
--key=/etc/kubernetes/pki/etcd/server.key
4. 控制節點升級
(1) 升級kubeadm
yum install -y kubeadm-'1.33.5-*' --disableexcludes=kubernetes說明: --disableexcludes=kubernetes:禁掉除了這個kubernetes之外的別的倉庫
(2) 驗證kubeadm 版本
kubeadm version
可見版本已經升級到1.33.5。
(3) 驗證升級計劃
kubeadm upgrade plan
此命令檢查你的集群是否可被升級,并取回你要升級的目標版本。 命令也會顯示一個包含組件配置版本狀態的表格。
(4) 選擇要升級到的目標版本
kubeadm upgrade apply v1.33.5會讓確認一下:

等待幾分鐘,kubeadm升級完成:

(5) 騰空節點
將節點標記為不可調度并驅逐所有負載,準備節點的維護:
# 將 <node-to-drain> 替換為你要騰空的控制面節點名稱
kubectl drain <node-to-drain> --ignore-daemonsets
kubectl drain k8s-master --ignore-daemonsets說明:--ignore-daemonsets 忽略DaemonSet管理下的Pod

(6) 升級 kubelet 和 kubectl
升級 kubelet 和 kubectl:
yum install -y kubelet-'1.33.5-*' kubectl-'1.33.5-*' --disableexcludes=kubernetes重啟 kubelet:
systemctl daemon-reload
systemctl restart kubelet(7) 解除節點的保護
# 將 <node-to-uncordon> 替換為你的節點名稱
kubectl uncordon <node-to-uncordon>
kubectl uncordon k8s-master此時master節點已經升上去了。
kubectl get node
5. 升級工作節點
工作節點上的升級過程應該一次執行一個節點,以不影響運行工作負載所需的最小容量。
我的集群有兩個工作節點,先升級節點1,再升級2,下面演示的是節點1升級。步驟2是一樣的。
(1) 升級 kubeadm
# 將 1.35.x-* 中的 x 替換為最新的補丁版本
yum install -y kubeadm-'1.33.5-*' --disableexcludes=kubernetes(2) 執行 "kubeadm upgrade"
對于工作節點,下面的命令會升級本地的 kubelet 配置:
kubeadm upgrade node
(3) 騰空節點(master上執行)
將節點標記為不可調度并驅逐所有負載,準備節點的維護:
節點1:
kubectl drain k8s-node2 --ignore-daemonsets(4) 升級 kubelet 和 kubectl
① 升級 kubelet 和 kubectl
盡量跟kubeadm版本保持一致:
yum install -y kubelet-'1.33.5-*' kubectl-'1.33.5-*' --disableexcludes=kubernetes② 重啟 kubelet
systemctl daemon-reload
systemctl restart kubelet(5) 解除節點的保護
通過將節點標記為可調度,讓節點重新上線:
節點1:
kubectl uncordon k8s-node1(6) 升級工作節點2
步驟和節點1升級一樣,5.1-5.5步驟再走一遍,騰空節點時改一下節點名字就行。
6. 升級后結果查看
[root@k8s-master ~]# kubectl get node
[root@k8s-master ~]# kubectl get pod -A
升級成功后,需要確保所有的對象資源的狀態跟升級前是一樣的。






















