本文說明如何升級 Google Distributed Cloud (GDC) 實體隔離 Kubernetes 叢集的 Kubernetes 版本。您必須規劃叢集的例行升級作業,確保叢集採用最新的 Kubernetes 功能和修正項目。
本文適用於平台管理員群組中的 IT 管理員、安全工程師和網路管理員等對象,這些人員負責管理機構內的 Kubernetes 資源。詳情請參閱「Audiences for GDC air-gapped documentation」。
事前準備
安裝 kubectl CLI。詳情請參閱「安裝元件」。
在目標區域中,為管理 API 伺服器產生 kubeconfig 檔案。詳情請參閱「區域 Kubernetes 叢集資源」。
如要取得列出可用升級版本的權限,請要求機構 IAM 管理員授予您「使用者叢集管理員」(
user-cluster-admin) 角色。如果您管理標準叢集,但無法從平台管理員群組取得使用者叢集管理員角色,請要求他們提供可用的 Kubernetes 升級版本清單。
如要取得設定叢集升級所需的權限,請要求機構 IAM 管理員授予您「標準叢集管理員」(
standard-cluster-admin) 角色。
升級 Kubernetes 叢集
使用 UserClusterUpgradeRequest API 升級現有 Kubernetes 叢集。
如要使用 API 升級 Kubernetes 叢集,請按照下列步驟操作:
列出可用的 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請記下您要將叢集升級至的 Kubernetes 版本 (來自先前的輸出內容)。您在下一個步驟的升級要求中指定的
targetVersion,必須是這些可用版本之一。建立
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 分鐘。
監控
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 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 叢集升級完成後,建議您確認叢集的所有子元件是否正常運作。
檢查叢集中的子元件是否發生故障:
確認沒有顯示
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)"'如果輸出內容傳回任何子元件,請與基礎架構營運商群組聯絡,尋求進一步協助。
確認沒有顯示
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狀態,請與基礎架構營運商團隊聯絡,尋求進一步協助。