升級叢集

本文說明如何升級 Google Distributed Cloud (GDC) 實體隔離 Kubernetes 叢集的 Kubernetes 版本。您必須規劃叢集的例行升級作業,確保叢集採用最新的 Kubernetes 功能和修正程式。

本文適用於平台管理員群組中的 IT 管理員、資安工程師和網路管理員等對象,他們負責管理組織內的 Kubernetes 資源。詳情請參閱 GDC 實體隔離方案說明文件的目標對象。

事前準備

如要完成本文件中的工作,您必須要求必要權限並準備環境。

要求 IAM 角色

您必須具備特定角色,才能取得升級 Kubernetes 叢集所需的權限。您必須要求專案和組織範圍內的角色。

機構角色

如要列出 Kubernetes 叢集可用的升級版本,請要求 IAM 機構組織管理員授予使用者叢集管理員 (user-cluster-admin) 角色。這個角色未繫結至命名空間。

如果您管理的是標準叢集,且無法從平台管理員群組取得使用者叢集管理員角色,則必須要求他們提供可用的 Kubernetes 升級版本清單。

專案角色

如要建立、刪除、編輯或查看叢集升級作業,請要求 IAM 專案管理員授予標準叢集管理員 (standard-cluster-admin) 角色。這個角色會繫結至專案命名空間。

準備環境

如要使用 API 對 Kubernetes 叢集執行指令,請確認您具備下列資源:

  • 下載並安裝 gdcloud CLI。

  • 安裝 kubectl CLI。

  • 找出 Kubernetes 叢集名稱,或向平台管理員群組成員詢問叢集名稱。

  • 請使用 Kubernetes 叢集名稱取代這些操作說明中的 CLUSTER_NAME。

  • 登入並產生管理 API 伺服器的 kubeconfig 檔案。

  • 請使用 Management API 伺服器的 kubeconfig 路徑,取代這些操作說明中的 MANAGEMENT_API_SERVER。

升級 Kubernetes 叢集

使用 UserClusterUpgradeRequest API 升級現有的 Kubernetes 叢集。

如要使用 API 升級 Kubernetes 叢集,請按照下列步驟操作:

  1. 列印 UserClusterMetadata 物件的 kubernetesVersion 值,列出可用的 Kubernetes 升級版本:

    kubectl --kubeconfig MANAGEMENT_API_SERVER \
        get userclustermetadata -o=custom-columns='TARGET_VERSION:.spec.kubernetesVersion'
    

    將 MANAGEMENT_API_SERVER 替換為管理 API 伺服器的 kubeconfig 檔案路徑。

    這個指令會傳回可用的 Kubernetes 版本清單:

    TARGET_VERSION
    1.30.1000-gke.85
    
  2. 請記下先前輸出內容中要升級叢集的 Kubernetes 版本。在下一個步驟中,您在升級要求中指定的 targetVersion 必須是其中一個可用版本。

  3. 建立 UserClusterUpgradeRequest 資源,要求升級叢集:

      kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f - <<EOF
      apiVersion: cluster.gdc.goog/v1
      kind: UserClusterUpgradeRequest
      metadata:
        name: CLUSTER_NAME
        namespace: CLUSTER_NAMESPACE
      spec:
        clusterRef:
          name: CLUSTER_NAME
        targetVersion: TARGET_VERSION
      EOF
    

    更改下列內容:

    • MANAGEMENT_API_SERVER:Management API 伺服器的 kubeconfig 檔案路徑。
    • CLUSTER_NAME:要升級的 Kubernetes 叢集名稱,例如 user-vm-2。
    • CLUSTER_NAMESPACE:Kubernetes 叢集的命名空間。如果是共用叢集,請使用 platform 命名空間。如果是標準叢集,請使用叢集的專案命名空間。
    • TARGET_VERSION:上一步中確定的升級目標版本,例如 1.30.1000-gke.85。

    Kubernetes 叢集的平均升級時間約為 20 分鐘。

  4. 監控 UserClusterUpgradeRequest 資源,確認叢集升級:

    kubectl --kubeconfig MANAGEMENT_API_SERVER \
        describe userclusterupgraderequest CLUSTER_NAME \
        -n CLUSTER_NAMESPACE
    

    更改下列內容:

    • MANAGEMENT_API_SERVER:Management API 伺服器的 kubeconfig 檔案路徑。
    • CLUSTER_NAME:要升級的 Kubernetes 叢集名稱,例如 user-vm-2。
    • CLUSTER_NAMESPACE:Kubernetes 叢集的命名空間。如果是共用叢集,請使用 platform 命名空間。如果是標準叢集,請使用叢集的專案命名空間。

    檢查輸出內容的 Spec 區段。其中包含 Current Version 和 Target Version。如果 Current Version 和 Target Version 不同,表示升級作業仍在進行中。

    Spec:
      ...
      Current Version: 1.29.500-gke.60
      Target Version: 1.30.1000-gke.85
    Status:
      Conditions:
      - Message: Upgrade is in progress
        Reason: UpgradeInProgress
        Status: "False"
        Type: Succeeded
    

    當 Succeeded 條件的狀態為 True,且 Current Version 與 Target Version 相符時,表示升級作業已成功完成。

    如果 Succeeded 條件的狀態為 False,表示升級失敗。如果遇到與 Kubernetes 叢集升級相關的錯誤,請與基礎架構操作員群組聯絡,尋求進一步協助。

升級後驗證叢集狀態

Kubernetes 叢集升級後,請檢查 Cluster 資源狀態,確認叢集及其元件是否正常運作:

  1. 查看 Cluster 資源的 status.conditions 和 status.componentsConditions 欄位:

    kubectl --kubeconfig MANAGEMENT_API_SERVER \
        get cluster CLUSTER_NAME \
        -n CLUSTER_NAMESPACE -o yaml
    

    更改下列內容:

    • MANAGEMENT_API_SERVER:Management API 伺服器的 kubeconfig 檔案路徑。
    • CLUSTER_NAME:Kubernetes 叢集的名稱,例如 user-vm-2。
    • CLUSTER_NAMESPACE:Kubernetes 叢集的命名空間。如果是共用叢集,請使用 platform 命名空間。如果是標準叢集,請使用叢集的專案命名空間。
  2. 在輸出內容中,確認 status 區段中的下列項目:

    • 在 status.conditions 中,確認 Ready 條件的 status 為 True,Reconciling 條件的 status 為 False。
    • 在 status.componentsConditions 中,確認 Ready 條件的 status 為 True,Reconciling 條件的 status 為 False,且沒有任何條件顯示 reason 為 ReconciliationError 或 Reconciling。

    如果 Kubernetes 叢集有三個控制層節點和三個 worker 節點,升級作業約需 20 分鐘。如果叢集或其元件在 20 分鐘後仍處於 Reconciling 狀態,或任何條件顯示 ReconciliationError,請與基礎架構營運商群組聯絡,尋求進一步協助。

後續步驟