如何在CentOS上升級Kubernetes(K8s)版本
升級Kubernetes集群需遵循“準備充分、漸進執行、驗證到位”的原則,以下是基于kubeadm
工具的標準流程及關鍵注意事項:
備份關鍵數據
備份集群配置(/etc/kubernetes/
目錄)和etcd數據(etcd是K8s的核心存儲組件),確保升級失敗時可快速恢復。etcd備份命令示例:
etcdctl snapshot save /data/etcd/etcd_bak.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
檢查集群健康狀態
確保集群無未解決問題:
kubectl get pods -n kube-system -l component=kube-apiserver
(需全部為Running
);kubectl get nodes
(所有節點需為Ready
);kubectl get pods --all-namespaces --field-selector status.phase!=Running
(無CrashLoopBackOff
或Error
狀態的Pod)。確認升級路徑
Kubernetes不支持跨多個次要版本跳躍升級(如從1.22直接升級到1.25),必須遵循“相鄰次要版本遞進”規則(如1.22→1.23→1.24→1.25)??赏ㄟ^kubectl version
查看當前版本,在官方升級文檔中確認目標版本的兼容性。
檢查組件兼容性
確保周邊組件與目標K8s版本匹配:
containerd
(K8s 1.25對應containerd 1.6+
);kubectl
版本需與集群版本相差不超過1個次要版本(如集群1.24,kubectl
需為1.23-1.25)。配置Kubernetes Repo倉庫
在所有節點上配置官方Kubernetes repo,確保能下載新版本軟件包:
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOF
(1)升級kubeadm工具
在Master節點上,使用yum
安裝新版本kubeadm
(以升級到1.25為例):
sudo yum install -y kubeadm-1.25.0-00 --disableexcludes=kubernetes
(2)檢查升級計劃
運行kubeadm upgrade plan
,確認集群可升級的目標版本及需要修改的配置:
kubeadm upgrade plan
# 輸出示例:建議升級到v1.25.0,當前版本v1.24.3
(3)執行控制平面升級
使用kubeadm upgrade apply
升級控制平面組件(kube-apiserver
、kube-controller-manager
、kube-scheduler
):
sudo kubeadm upgrade apply v1.25.0
升級完成后,系統會提示“升級成功”,控制平面組件會自動重啟。
(4)升級kubelet和kubectl
在Master節點上升級kubelet
和kubectl
:
sudo yum install -y kubelet-1.25.0-00 kubectl-1.25.0-00 --disableexcludes=kubernetes
sudo systemctl daemon-reload
sudo systemctl restart kubelet
(5)解除Master節點保護
升級后,將Master節點標記為可調度(允許Pod調度到Master):
kubectl uncordon <master-node-name>
(1)逐個升級工作節點
為避免集群中斷,每次僅升級1個Worker節點,重復以下步驟:
kubectl drain <worker-node-name> --ignore-daemonsets
kubeadm
(與Master版本一致):sudo yum install -y kubeadm-1.25.0-00 --disableexcludes=kubernetes
kubelet
和kubectl
并重啟服務。(2)升級節點組件
在Master節點上,使用kubeadm upgrade node
升級工作節點的組件:
sudo kubeadm upgrade node
(3)解除節點保護
升級完成后,將工作節點標記為可調度:
kubectl uncordon <worker-node-name>
(4)驗證節點狀態
等待節點狀態變為Ready
(kubectl get nodes
),確認Pod恢復正常運行(kubectl get pods --all-namespaces
)。
檢查集群狀態
kubectl get nodes # 所有節點應為Ready狀態
kubectl get pods -A # 所有Pod應為Running狀態
檢查組件日志
查看K8s組件日志,確認無錯誤信息:
sudo journalctl -u kubelet -f
sudo journalctl -u kube-apiserver -f
測試業務功能
訪問集群內的業務Pod(如curl http://<pod-ip>:<port>
),確認業務正常運行。
/etc/kubernetes/
和/var/lib/etcd/
,以便快速回滾。通過以上步驟,可確保CentOS上的Kubernetes集群平穩升級到目標版本,同時保障業務連續性。升級前務必在測試環境驗證流程,降低生產環境風險。