本頁說明如何更新 GKE on AWS 叢集的設定。您可以按照這些操作說明更新叢集中任何可更新的設定,包括 Kubernetes 版本。由於升級版本是最常見的叢集更新作業之一,因此我們在升級叢集頁面中,另外說明如何升級叢集版本。
更新叢集的原因
更新叢集的原因可能如下:
- 更新叢集的說明。
- 更新叢集的註解。
- 更新叢集的管理員使用者清單。
- 更新叢集的記錄設定。
- 如要輪替加密金鑰。
- 更新叢集控制層的安全性群組。
您也可以更新叢集中的其他欄位 (未列於此)。如需可更新的完整欄位清單,請參閱 gcloud container aws clusters update 和 projects.locations.awsClusters.patch 說明文件。
必要條件
- 如要更新叢集的任何欄位,您必須具備 - gkemulticloud.googleapis.com/awsClusters.updateIdentity and Access Management 權限。
- 如要更新叢集的安全性群組,叢集的控制層角色必須具備 - ec2:ModifyNetworkInterfaceAttribute權限。詳情請參閱「建立控制層角色」。
- 此外,如要更新叢集的標記,叢集的 API 角色必須具備下列 AWS 權限: - autoscaling:CreateOrUpdateTags
- autoscaling:DeleteTags
- ec2:CreateTags
- ec2:DescribeLaunchTemplates
- ec2:DescribeSecurityGroupRules
- ec2:DeleteTags
- elasticloadbalancing:AddTags
- elasticloadbalancing:RemoveTags
 - 請參閱「建立 AWS IAM 角色」,瞭解如何建立叢集的 API 角色並新增權限。 
更新程序
GKE on AWS 更新叢集的程序會因更新類型而異。對於某些變更,GKE on AWS 可以更新叢集,而不必重新啟動或重新建立任何資源,例如更新叢集的說明。GKE on AWS 會立即套用這些變更。
其他變更則需要重新啟動控制層節點,例如更新 Kubernetes 版本。對於這類更新,GKE on AWS 會執行「滾動更新」,包含下列步驟:
- 選擇要更新的控制層執行個體。GKE on AWS 會先更新健康狀態不良的執行個體 (如有),再更新健康狀態良好的執行個體。
- 為執行個體建立新的啟動範本。
- 更新 Auto Scaling 群組的啟動範本。
- 刪除執行個體。AWS 會重建執行個體,並以新設定啟動執行個體。
- 對新執行個體執行健康狀態檢查。
- 如果健康狀態檢查成功,請選取另一個執行個體,並對其執行相同步驟。重複這個週期,直到所有執行個體都重新啟動或重新建立為止。如果健康狀態檢查失敗,AWS 上的 GKE 會將叢集設為 DEGRADED狀態,並停止更新。詳情請參閱下節。
- 刪除原始啟動範本。
更新失敗時
更新後,GKE on AWS 會對叢集執行健康狀態檢查。如果健康狀態檢查失敗,叢集會標示為 DEGRADED。您可以使用下列 Google Cloud CLI 指令,顯示叢集狀態:
gcloud container aws clusters describe CLUSTER_NAME \
  --location=GOOGLE_CLOUD_LOCATION
更改下列內容:
- CLUSTER_NAME:叢集名稱
- GOOGLE_CLOUD_LOCATION:管理叢集的 Google Cloud 區域
更新叢集
您可以使用 Google Cloud 控制台、Google Cloud CLI 或 GKE Multi-Cloud API,一次更新多個叢集欄位。
選擇更新方法
您可以透過控制台、gcloud CLI 或 GKE Multi-Cloud API 更新大部分欄位。部分欄位只能透過其中一種機制更新。如要使用控制台更新叢集,請先選擇並設定登入叢集的驗證方法。詳情請參閱「連線至叢集並進行驗證」。
控制台
- 在 Google Cloud 控制台中,前往「Google Kubernetes Engine clusters overview」(Google Kubernetes Engine 叢集總覽) 頁面。 
- 選取叢集所在的 Google Cloud 專案。 
- 在叢集清單中選取叢集名稱,然後在側邊面板中選取「查看詳細資料」。 
- 在「詳細資料」分頁中,選取要變更的欄位,然後按一下「編輯」圖示 。 - 舉例來說,如要將叢集管理員權限授予其他使用者,請選取「管理員使用者」旁的「編輯」,然後輸入使用者的電子郵件地址。 
- 完成變更後,選取「完成」。 
gcloud
使用 gcloud CLI 更新叢集時,一律須加入 CLUSTER_NAME 和 GOOGLE_CLOUD_LOCATION 欄位,讓 GKE on AWS 知道要更新哪個叢集。在下列指令中,請只納入要更新的欄位,並在執行指令前移除其他欄位。
gcloud container aws clusters update CLUSTER_NAME \
    --location=GOOGLE_CLOUD_LOCATION \
    --cluster-version=CLUSTER_VERSION \
    --admin-users=USERNAME_LIST \
    --root-volume-iops=ROOT_VOLUME_IOPS \
    --root-volume-size=ROOT_VOLUME_SIZE \
    --root-volume-type=ROOT_VOLUME_TYPE \
    --security-group-ids=SECURITY_GROUP_IDS
更改下列內容:
- CLUSTER_NAME:叢集名稱
- GOOGLE_CLOUD_LOCATION(必要):管理叢集的支援 Google Cloud 區域,例如- us-west1
- CLUSTER_VERSION:新的支援叢集版本
- USERNAME_LIST:以逗號分隔的使用者名稱清單,例如「kai@example.com,hao@example.com,kalani@example.com」。這些是您要授予這個叢集管理員權限的使用者電子郵件地址。這項設定中的名稱會取代叢集上先前的任何管理員使用者清單。
- ROOT_VOLUME_IOPS:根磁碟區每秒的 I/O 作業數上限
- ROOT_VOLUME_SIZE:根磁碟區的大小 (Gb)
- ROOT_VOLUME_TYPE:根磁碟區的 AWS EBS 磁碟區類型
- SECURITY_GROUP_IDS:要新增至叢集控制層執行個體的 AWS 安全性群組 ID
- SECURITY_GROUP_IDS:要新增至叢集控制層執行個體的 AWS 安全性群組 ID
API
使用 GKE Multi-Cloud API 更新叢集時,您一律必須在 HTTP 要求中加入CLUSTER_NAME和GOOGLE_CLOUD_LOCATION欄位。這些欄位會告知 GKE on AWS 要更新哪個叢集。此外,您也必須在要求中加入 API 端點。建立 JSON 檔案,並填入要更新的欄位。JSON 檔案和 UPDATE_MASK 中只須包含要更新的欄位。
以下範例說明如何透過 API 更新叢集。
如要瞭解詳情 (包括可更新的欄位清單),請參閱 projects.locations.awsClusters.patch 方法說明文件。
- 建立名為 - cluster_update.json的 JSON 檔案,其中包含要更新的欄位。- { "controlPlane": { "version": "CLUSTER_VERSION", }, "description": "CLUSTER_DESCRIPTION", "authorization": { "adminUsers": [ { "username": USERNAME1, "username": USERNAME2, "username": USERNAME3 } ] } }- 更改下列內容: - CLUSTER_VERSION:新的支援叢集版本。請注意,升級叢集時,您必須逐一升級所有子版本
- CLUSTER_DESCRIPTION:新的叢集說明
- USERNAME1、- USERNAME2、- USERNAME3: 您要授予這個叢集管理權限的使用者電子郵件地址。這些欄位中的名稱會取代叢集上先前的管理員使用者清單。
 
- 使用下列指令,透過 GKE Multi-Cloud API 更新這些設定。 - curl -d @cluster_update.json -X PATCH \ ENDPOINT/projects/PROJECT_ID/locations/GOOGLE_CLOUD_LOCATION/awsClusters/CLUSTER_NAME?update_mask=UPDATE_MASK
更改下列內容:
- ENDPOINT(必要):您的 Google Cloud 服務端點
- PROJECT_ID(必填):您的 Google Cloud 專案
- GOOGLE_CLOUD_LOCATION(必要):管理叢集的支援 Google Cloud 區域,例如- us-west1
- CLUSTER_NAME(必要):叢集名稱
- UPDATE_MASK(必填):以半形逗號分隔的一或多個下列旗標清單,指出要更新的欄位。在本範例中,請指定下列項目。- controlPlane.version
- 說明
- authorization.admin_users
 
更新叢集的安全性群組
如要更新叢集的安全性群組,叢集的控制層角色必須具備 ec2:ModifyNetworkInterfaceAttribute 權限。詳情請參閱「建立控制層角色」。
您可以使用 gcloud container aws clusters update 指令,將其他安全性群組新增至叢集控制層。
gcloud container aws clusters update CLUSTER_NAME \
    --location=GOOGLE_CLOUD_LOCATION \
    --security-group-ids=SECURITY_GROUP_IDS
更改下列內容:
- CLUSTER_NAME:叢集名稱
- GOOGLE_CLOUD_LOCATION:管理叢集的支援區域 Google Cloud ,例如- us-west1
- SECURITY_GROUP_IDS:要新增至叢集控制層執行個體的 AWS 安全性群組 ID
移除叢集安全群組
您可以使用 Google Cloud CLI,從叢集中移除所有非預設的安全群組。如要更新叢集,請執行:
gcloud container aws clusters update CLUSTER_NAME \
    --location=GOOGLE_CLOUD_LOCATION \
    --clear-security-group-ids
更改下列內容:
- CLUSTER_NAME:叢集名稱
- GOOGLE_CLOUD_LOCATION:管理叢集的支援區域 Google Cloud ,例如- us-west1
更新叢集磁碟區資訊
您可以使用 Google Cloud CLI 更新叢集的控制層磁碟區。如要更新磁碟區 KMS 金鑰,請參閱「金鑰輪替」一文。
如要更新磁碟區大小、類型或 IOPS,請執行下列指令:
gcloud container aws clusters update CLUSTER_NAME \
    --location=GOOGLE_CLOUD_LOCATION \
    --root-volume-iops=ROOT_VOLUME_IOPS
    --root-volume-size=ROOT_VOLUME_SIZE
    --root-volume-type=ROOT_VOLUME_TYPE
更改下列內容:
- CLUSTER_NAME:叢集名稱
- GOOGLE_CLOUD_LOCATION:管理叢集的支援區域 Google Cloud ,例如- us-west1
- ROOT_VOLUME_IOPS:根磁碟區每秒的 I/O 作業數
- ROOT_VOLUME_SIZE:根磁碟區的大小 (Gb)
- ROOT_VOLUME_TYPE:根磁碟區的 AWS EBS 磁碟區類型。
更新記錄設定
您可以使用 Google Cloud CLI 更新叢集的 Cloud Logging 設定。如要更新記錄設定,請執行下列指令:
gcloud container aws clusters update CLUSTER_NAME \
    --location=GOOGLE_CLOUD_LOCATION \
    --logging=LOGGING_CONFIG \
更改下列內容:
- CLUSTER_NAME:叢集名稱
- GOOGLE_CLOUD_LOCATION:管理叢集的支援區域 Google Cloud ,例如- us-west1
- LOGGING_CONFIG:[SYSTEM] 或 [SYSTEM,WORKLOAD]
後續步驟
- 如要更新磁碟區 KMS 金鑰,請參閱金鑰輪替
- 如要進一步瞭解可更新的欄位,請參閱 gcloud container aws clusters update參考說明文件。
- 請參閱 projects.locations.awsClusters.patchREST API 說明文件。