溫馨提示×

如何在Ubuntu上升級Kubernetes集群

小樊
40
2025-10-20 23:55:16
欄目: 智能運維

在Ubuntu上升級Kubernetes集群(以kubeadm部署為例)

升級Kubernetes集群需遵循“前置檢查→控制平面升級→工作節點升級→驗證”的流程,確保業務連續性與版本兼容性。以下是詳細步驟:

一、升級前準備

1. 備份集群數據

升級前必須備份etcd數據(集群狀態核心存儲),防止數據丟失。使用etcdctl命令創建快照:

ETCDCTL_API=3 etcdctl snapshot save /opt/kubernetes/backup/etcd_snapshot_$(date +%F).db \
  --endpoints=https://127.0.0.1:2379 \
  --cert=/etc/kubernetes/pki/etcd/server.crt \
  --key=/etc/kubernetes/pki/etcd/server.key \
  --cacert=/etc/kubernetes/pki/etcd/ca.crt

確認快照文件生成(ls /opt/kubernetes/backup/),并存放在安全位置。

2. 檢查版本兼容性

  • 確認當前版本:通過kubectl version --short獲取集群版本(如v1.24.6)。
  • 確認升級路徑:Kubernetes不支持跨多個次要版本跳躍升級(如v1.24→v1.26),必須按相鄰次要版本遞進(如v1.24→v1.25→v1.26)。
  • 檢查組件兼容性:參考Kubernetes官方升級文檔,確認容器運行時(如containerd≥1.6,對應K8s 1.25+)、網絡插件(如Calico≥3.24,對應K8s 1.25+)、Ingress控制器(如Nginx Ingress≥1.5,對應K8s 1.25+)與目標版本兼容。

3. 檢查集群健康狀態

確保集群無故障,避免升級失?。?/p>

  • 控制平面組件kubectl get pods -n kube-system -l component=kube-apiserver(需Running狀態)。
  • 節點狀態kubectl get nodes(所有節點需為Ready)。
  • Pod狀態kubectl get pods --all-namespaces --field-selector=status.phase!=Running(無CrashLoopBackOffError狀態的Pod)。

二、升級控制平面節點(Master節點)

控制平面是集群核心,需優先升級。假設當前版本為v1.24.6,目標版本為v1.25.3

1. 升級kubeadm工具

kubeadm是升級控制平面的關鍵工具,需先升級到目標版本:

sudo apt update
sudo apt-mark unhold kubeadm  # 解除版本鎖定(若之前鎖定)
sudo apt install -y kubeadm=1.25.3-00  # 安裝目標版本
sudo apt-mark hold kubeadm  # 鎖定版本,防止誤升級

2. 檢查升級計劃

通過kubeadm upgrade plan查看可升級版本及所需操作:

sudo kubeadm upgrade plan

輸出會顯示當前版本、可升級的目標版本(如v1.25.3)及需要升級的組件(如kube-apiserver、kube-controller-manager)。

3. 執行升級

根據kubeadm upgrade plan的輸出,執行升級命令(替換為目標版本):

sudo kubeadm upgrade apply v1.25.3
  • 輸入yes確認升級。
  • 命令會自動升級控制平面組件(API Server、Controller Manager、Scheduler)及etcd(若使用kubeadm管理的etcd)。

4. 升級kubelet配置

升級控制平面后,需更新kubelet配置以適配新版本:

sudo kubeadm upgrade node config --kubelet-version $(kubelet --version | cut -d ' ' -f 2)
sudo systemctl restart kubelet  # 重啟kubelet使配置生效

三、升級工作節點(Worker節點)

工作節點負責運行Pod,需在控制平面升級完成后逐個升級:

1. 升級kubeadm

在工作節點上升級kubeadm到目標版本(與控制平面一致):

sudo apt update
sudo apt-mark unhold kubeadm
sudo apt install -y kubeadm=1.25.3-00
sudo apt-mark hold kubeadm

2. 升級節點

使用kubeadm upgrade node命令將節點升級到目標版本:

sudo kubeadm upgrade node
  • 該命令會自動下載新版本鏡像并替換舊組件。

3. 升級kubelet

升級節點上的kubelet到目標版本:

sudo apt install -y kubelet=1.25.3-00
sudo systemctl daemon-reload
sudo systemctl restart kubelet

4. 移除升級污點(可選)

舊版本集群升級時,節點會自動添加node.kubernetes.io/upgrade:NoSchedule污點,阻止Pod調度。升級完成后可移除:

kubectl taint nodes <node-name> node.kubernetes.io/upgrade:NoSchedule-

<node-name>為節點名稱,可通過kubectl get nodes獲?。?/p>

四、升級后驗證

升級完成后,需驗證集群狀態是否正常:

1. 檢查節點狀態

kubectl get nodes

所有節點應顯示為Ready狀態。

2. 檢查Pod狀態

kubectl get pods --all-namespaces

所有Pod應處于RunningCompleted狀態(無ErrorCrashLoopBackOff)。

3. 驗證應用功能

訪問集群內的應用(如通過Ingress或NodePort),確認業務正常運行。

注意事項

  • 版本遞進:必須遵循相鄰次要版本升級,禁止跳躍升級。
  • 業務低峰期操作:升級過程中API Server會短暫中斷,建議在業務低峰期進行。
  • 高危操作規避:升級前停止對集群的修改(如修改節點配置、調整Ingress規則)。
  • 回滾準備:若升級失敗,可通過kubeadm upgrade revert回滾到上一個版本,或使用etcd快照恢復數據。

0
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女