本文說明如何升級 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 檔案。
請使用 Management 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:Management 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: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 資源狀態,確認叢集及其元件是否正常運作:
查看
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命名空間。如果是標準叢集,請使用叢集的專案命名空間。
在輸出內容中,確認
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,請與基礎架構營運商群組聯絡,尋求進一步協助。- 在