本文說明如何升級 Google Distributed Cloud (GDC) 實體隔離 Kubernetes 叢集的 Kubernetes 版本。您必須規劃叢集的例行升級作業,確保叢集採用最新的 Kubernetes 功能和修正項目。
本文適用於平台管理員群組中的 IT 管理員、安全工程師和網路管理員等對象,他們負責管理機構內的 Kubernetes 資源。詳情請參閱 GDC 氣隙環境適用的目標對象說明文件。
事前準備
如要完成本文中的工作,您必須要求必要的權限並準備環境。
要求 IAM 角色
您必須具備特定角色,才能取得升級 Kubernetes 叢集所需的權限。您必須要求專案和機構範圍的角色。
機構角色
如要列出 Kubernetes 叢集的可用升級版本,請要求機構 IAM 管理員授予您「使用者叢集管理員」(user-cluster-admin) 角色。這個角色不會繫結至命名空間。
如果您管理標準叢集,但無法從平台管理員群組取得使用者叢集管理員角色,請要求他們提供可用的 Kubernetes 升級版本清單。
專案角色
如要建立、刪除、編輯或查看叢集升級作業,請要求專案 IAM 管理員授予您「標準叢集管理員」 (standard-cluster-admin) 角色。這個角色會繫結至專案命名空間。
準備環境
如要使用 API 對 Kubernetes 叢集執行指令,請確認您具備下列資源:
找出 Kubernetes 叢集名稱,或向平台管理員群組成員詢問叢集名稱。
請使用 Kubernetes 叢集名稱,取代這些操作說明中的
CLUSTER_NAME。登入並產生管理 API 伺服器的 kubeconfig 檔案。
使用管理 API 伺服器的 kubeconfig 路徑,取代這些操作說明中的
MANAGEMENT_API_SERVER。
升級 Kubernetes 叢集
使用 UserClusterUpgradeRequest API 升級現有 Kubernetes 叢集。
如要使用 API 升級 Kubernetes 叢集,請按照下列步驟操作:
列印
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請記下您要將叢集升級至的 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狀態,請與基礎架構營運商團隊聯絡,尋求進一步協助。