升級叢集

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

本文適用於平台管理員群組中的 IT 管理員、安全工程師和網路管理員等對象,這些人員負責管理機構內的 Kubernetes 資源。詳情請參閱「Audiences for GDC air-gapped documentation」。

事前準備

  • 下載安裝 gdcloud CLI。

  • 安裝 kubectl CLI。詳情請參閱「安裝元件」。

  • 在目標區域中,為管理 API 伺服器產生 kubeconfig 檔案。詳情請參閱「區域 Kubernetes 叢集資源」。

  • 如要取得列出可用升級版本的權限,請要求機構 IAM 管理員授予您「使用者叢集管理員」(user-cluster-admin) 角色。

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

  • 如要取得設定叢集升級所需的權限,請要求機構 IAM 管理員授予您「標準叢集管理員」(standard-cluster-admin) 角色。

升級 Kubernetes 叢集

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

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

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

    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:管理 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:管理 API 伺服器的 kubeconfig 檔案路徑。
    • CLUSTER_NAME:要升級的 Kubernetes 叢集名稱,例如 user-vm-2
    • CLUSTER_NAMESPACE:Kubernetes 叢集的命名空間。如果是共用叢集,請使用 platform 命名空間。 如果是標準叢集,請使用叢集的專案命名空間。

    檢查輸出內容的 Spec 區段。其中包含 Current VersionTarget Version。如果 Current VersionTarget 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 VersionTarget Version 相符時,表示升級已順利完成。

    如果 Succeeded 條件的狀態為 False,表示升級失敗。如果 Kubernetes 叢集升級時發生錯誤,請聯絡基礎架構營運商團隊尋求進一步協助。

升級後驗證叢集子元件

Kubernetes 叢集升級完成後,建議您確認叢集的所有子元件是否正常運作。

檢查叢集中的子元件是否發生故障:

  1. 確認沒有顯示 ReconciliationError 訊息的子元件:

    kubectl --kubeconfig MANAGEMENT_API_SERVER \
        get subcomponent -n CLUSTER_NAME -o json | jq -r \
        '.items[] |  select(.status.conditions[]?.reason == "ReconciliationError") |
        select(.status.featureDisabled != true) |  "Sub-Component: \(.metadata.name)
        - \(.status.conditions[]?.message)"'
    

    如果輸出內容傳回任何子元件,請與基礎架構營運商群組聯絡,尋求進一步協助。

  2. 確認沒有顯示 Reconciling 訊息的子元件:

    kubectl --kubeconfig MANAGEMENT_API_SERVER \
        get subcomponent -n CLUSTER_NAME -o json | jq -r \
        '.items[] |  select(.status.conditions[]?.reason == "Reconciling") |
        select(.status.featureDisabled != true) | select( "\(.status)" |
        contains("PreinstallPending") | not) | "Sub-Component: \(.metadata.name)
        - \(.status.conditions[]?.message)"'
    

    如果 Kubernetes 叢集有三個控制層節點和三個工作站節點,升級時間約為 20 分鐘。如果 20 分鐘後,子元件仍處於 Reconciling 狀態,請與基礎架構營運商團隊聯絡,尋求進一步協助。

後續步驟