建立使用者叢集時,您必須設定至少一個節點集區,也就是具有相同設定的一組節點。叢集建立完成後,您可以新增節點集區、更新節點集區設定,以及刪除節點集區。
選擇管理節點集區的工具
建立、更新及刪除節點集區的方式,取決於叢集是否由 GKE On-Prem API 管理。如果符合下列任一條件,使用者叢集就會由 GKE On-Prem API 管理:
- 叢集是在 Google Cloud 控制台中建立,或是使用 Google Cloud CLI (gcloud CLI) 建立,這會自動設定 GKE On-Prem API 來管理叢集。 
- 叢集是使用 - gkectl建立,但已設定為由 GKE On-Prem API 管理。
如果 GKE On-Prem API 管理使用者叢集,您可以使用主控台或 gcloud CLI 管理節點集區。如果使用者叢集不是由 GKE On-Prem API 管理,請使用管理工作站上的 gkectl 管理節點集區。
如果您打算使用 gcloud CLI,請在已安裝 gcloud CLI 的電腦上執行下列操作:
- 登入 Google 帳戶 - gcloud auth login 
- 更新元件: - gcloud components update 
新增節點集區
如果叢集是由 GKE On-Prem API 管理,您可以使用主控台或 gcloud CLI 新增節點集區,但必須在管理工作站上使用 gkectl,才能設定下列節點集區設定:
- Windows (適用於 OS 映像檔類型)
- vSphere 資料儲存庫
- vSphere 標記 如要將標記附加至節點集區中的所有 VM,vCenter 使用者帳戶必須具備下列 vSphere 標記權限: - vSphere 標記。指派或取消指派 vSphere 標記
- vSphere Tagging.Assign or Unassign vSphere Tag on Object (vSphere 7)
 
新增其他節點集區前,請先確認叢集有足夠的可用 IP 位址。
gkectl
在管理員工作站上執行下列操作:
- 
您必須指定下列欄位: - nodePools.[i].name
- nodePools[i].cpus
- nodePools.[i].memoryMB
- nodePools.[i].replicas
 以下欄位為選填項目。如未加入 nodePools[i].bootDiskSizeGB或nodePools[i].osImageType, 系統會使用預設值。- nodePools[i].labels
- nodePools[i].taints
- nodePools[i].bootDiskSizeGB
- nodePools[i].osImageType
- nodePools[i].vsphere.datastore
- nodePools[i].vsphere.tags
 
- 執行下列指令: - gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG - 更改下列內容: - ADMIN_CLUSTER_KUBECONFIG,並提供管理員叢集的 kubeconfig 檔案路徑。
- USER_CLUSTER_CONFIG,並提供使用者叢集設定檔的路徑。
 
範例設定
在下列範例設定中,有四個節點集區,每個節點集區都有不同的屬性:
- pool-1:僅指定必要屬性
- pool-2:包含- vsphere.datastore和- vsphere.tags
- pool-3:包含- taints和- labels
- pool-4:包含- osImageType和- bootDiskSizeGB
nodePools:
- name: pool-1
  cpus: 4
  memoryMB: 8192
  replicas: 5
- name: pool-2
  cpus: 8
  memoryMB: 16384
  replicas: 3
  vsphere:
    datastore: my_datastore
    tags:
    - category: "purpose"
      name: "testing"
- name: pool-3
  cpus: 4
  memoryMB: 8192
  replicas: 5
  taints:
    - key: "example-key"
      effect: NoSchedule
  labels:
    environment: production
    app: nginx
- name: pool-4
  cpus: 4
  memoryMB: 8192
  replicas: 5
  osImageType: cos
  bootDiskSizeGB: 40
控制台
- 在控制台中,前往「Google Kubernetes Engine clusters overview」(Google Kubernetes Engine 叢集總覽) 頁面。 
- 選取使用者叢集所在的 Google Cloud 專案。 
- 在叢集清單中,按一下叢集名稱,然後按一下「詳細資料」面板中的「查看詳細資料」。 
- 按一下 「Add node pool」(新增節點集區)。 
- 設定節點集區: - 輸入「節點集區名稱」。
- 輸入集區中每個節點的 vCPUs 數量 (每個使用者叢集工作站至少須有 4 個)。
- 輸入集區中每個節點的記憶體大小 (以 MiB 為單位,每個使用者叢集工作站節點至少須有 8192 MiB,且必須為 4 的倍數)。
- 在「Nodes」(節點) 欄位中,輸入集區中的節點數量 (至少 3 個)。
- 選取「OS image type」(作業系統映像檔類型):Ubuntu Containerd 或 COS。 
- 以 GiB 為單位輸入開機磁碟大小 (預設為 40 GiB)。 
 
- 在「節點集區中繼資料 (選用)」專區中,如要新增 Kubernetes 標籤和汙點,請按照下列步驟操作: - 按一下「+ Add Kubernetes Labels」(+ 新增 Kubernetes 標籤)。輸入標籤的「Key」(鍵) 和「Value」(值)。視需要重複上述步驟。
- 按一下「+ Add Taint」(新增汙點)。輸入汙染的「鍵」、「值」和「效果」。視需要重複上述步驟。
 
- 點選「建立」。 
- Google Cloud 控制台會顯示「叢集狀態:變更進行中」。按一下「顯示詳細資料」,即可查看資源狀態條件和狀態訊息。 
gcloud CLI
執行下列指令來建立節點集區:
gcloud container vmware node-pools create NODE_POOL_NAME \ --cluster=USER_CLUSTER_NAME \ --project=FLEET_HOST_PROJECT_ID \ --location=LOCATION \ --image-type=IMAGE_TYPE \ --boot-disk-size=BOOT_DISK_SIZE \ --cpus=vCPUS \ --memory=MEMORY \ --replicas=NODES
更改下列內容:
- NODE_POOL_NAME:您為節點集區選用的名稱。名稱必須:- 最多可包含 40 個半形字元
- 只能包含小寫英數字元或連字號 (-)
- 開頭必須是字母字元
- 結尾為英數字元
 
- USER_CLUSTER_NAME:要建立節點集區的使用者叢集名稱。
- FLEET_HOST_PROJECT_ID:叢集註冊的專案 ID。- LOCATION:與使用者叢集相關聯的 Google Cloud 位置。
- IMAGE_TYPE:要在節點集區內 VM 執行的 OS 映像檔類型。設為- ubuntu_containerd或- cos。
- BOOT_DISK_SIZE:集區中每個節點的開機磁碟大小 (以 GiB 為單位)。下限為 40 GiB。
- vCPUs:節點集區中每個節點的 vCPU 數量。最低值為 4。
- MEMORY:集區中每個節點的記憶體大小 (以 MiB 為單位)。每個使用者叢集工作站節點至少須有 8192 MiB,且必須為 4 的倍數。
- NODES:節點集區中的節點數量。最小值為 3。
 - 例如: - gcloud container vmware node-pools create default-pool \ --cluster=user-cluster-1 \ --location=us-west1 \ --image-type=ubuntu_containerd \ --boot-disk-size=40 \ --cpus=8 \ --memory=8192 \ --replicas=5 - 您也可以指定下列項目: - --enable-load-balancer:僅適用於 MetalLB 負載平衡器。如果指定,則允許 MetalLB 揚聲器在集區中的節點上執行。至少須為一個節點集區啟用 MetalLB 負載平衡器。
- --image=IMAGE:vCenter 中的 OS 映像檔名稱。
- --node-labels=KEY=VALUE,...:以半形逗號分隔的Kubernetes 標籤 (鍵/值組合) 清單,會套用至集區中的每個節點。
- --node-taints=KEY=VALUE:EFFECT,...以半形逗號分隔的Kubernetes 汙染清單,會套用至集區中的每個節點。汙點是與效果相關聯的鍵/值組合。Taint 會搭配容許條件用於 Pod 排程。請為 EFFECT 指定下列其中一項:- NoSchedule、- PreferNoSchedule、- NoExecute。
 - 例如: - gcloud container vmware node-pools create default-pool \ --cluster=user-cluster-1 \ --location=us-west1 \ --image-type=ubuntu_containerd \ --boot-disk-size=40 \ --cpus=8 \ --memory=8192 \ --replicas=5 \ --node-taints=key1=val1:NoSchedule,key2=val2:NoExecute- 如要瞭解其他選用標記,請參閱 gcloud 參考資料。 
更新節點集區
增加副本數量時,Google Distributed Cloud 會在使用者叢集中新增所需數量的節點;減少副本數量時,系統則會移除節點。變更節點集區的副本數量不會中斷工作負載。如果增加副本數量,請確認您有可用的 IP 位址。
如果更新任何其他節點集區欄位,就會觸發叢集上的滾動更新。在滾動更新中,Google Distributed Cloud 會建立新節點,然後刪除舊節點。這個程序會重複執行,直到所有舊節點都替換為新節點為止。這個程序不會造成停機,但叢集必須有額外的 IP 位址,供更新期間使用。
假設節點集區在更新結束時會有 N 個節點。然後,您必須為該集區中的節點提供至少 N + 1 個 IP 位址。也就是說,如果您要調整叢集大小,方法是為一或多個集區新增節點,則您必須擁有的 IP 位址數量,至少要比調整大小後叢集所有節點集區的節點總數多一個。詳情請參閱「確認有足夠的 IP 位址可用」。
如要更新使用者叢集中的節點集區,請按照下列步驟操作:
gkectl
- 在使用者叢集設定檔的 - nodePools區段中,修改要變更的欄位值。
- 更新叢集: - gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG - 更改下列內容: - ADMIN_CLUSTER_KUBECONFIG,並提供管理員叢集的 kubeconfig 檔案路徑。
- USER_CLUSTER_CONFIG,並提供使用者叢集設定檔的路徑。
 
更新節點集區使用的 osImageType
如要更新節點集區以使用其他 osImageType,請使用指令列。如要變更節點集區使用的 osImageType,請更新節點集區的設定檔 (如下例所示),然後執行 gkectl update cluster。
nodePools: - name: np-1 cpus: 4 memoryMB: 8192 replicas: 3 osImageType: ubuntu_containerd
控制台
您只能使用主控台更新下列欄位:
- 備用資源數量
- 記憶體
- vCPU 數量
如要更新其他欄位,請使用 gcloud CLI 或 gkectl。
- 在控制台中,前往「Google Kubernetes Engine clusters overview」(Google Kubernetes Engine 叢集總覽) 頁面。 
- 選取使用者叢集所在的 Google Cloud 專案。 
- 在叢集清單中,按一下叢集名稱,然後按一下「詳細資料」面板中的「查看詳細資料」。 
- 按一下「Nodes」(節點) 分頁標籤。 
- 按一下要修改的節點集區名稱。 
- 在要修改的欄位旁,按一下「編輯」,然後按一下「完成」。 
- 按一下 返回上一頁。 
- Google Cloud 控制台會顯示「叢集狀態:變更進行中」。按一下「顯示詳細資料」,即可查看資源狀態條件和狀態訊息。 
gcloud CLI
- (選用) 列出節點集區,取得要更新的節點集區名稱: - gcloud container vmware node-pools list \ --cluster=USER_CLUSTER_NAME \ --project=FLEET_HOST_PROJECT_ID \ --location=LOCATION 
- 執行下列指令來更新節點集區: - gcloud container vmware node-pools update NODE_POOL_NAME \ --cluster=USER_CLUSTER_NAME \ --project=FLEET_HOST_PROJECT_ID \ --location=LOCATION \ --ATTRIBUTE_TO_UPDATE \ ... - 更改下列內容: - NODE_POOL_NAME:要更新的節點集區名稱。
- USER_CLUSTER_NAME:節點集區所在使用者叢集的名稱。
- LOCATION:與使用者叢集相關聯的 Google Cloud 位置。
- ATTRIBUTE_TO_UPDATE:一或多個標記,用於更新節點集區屬性。舉例來說,如要變更集區中的 vCPU 和節點數量,請執行下列指令。
 - gcloud container vmware node-pools update default-pool \ --cluster=user-cluster-1 \ --project=example-project-12345 --location=us-west1 \ --cpus=10 \ --replicas=6- 如要瞭解可更新的節點集區屬性,請參閱 gcloud 參考資料。 
確認變更
如要確認節點集區已按照預期建立或更新,請檢查叢集節點:
gkectl
執行下列指令:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get nodes -o wide
如要還原變更,請編輯叢集設定檔並執行 gkectl update cluster。
控制台
- 在控制台中,前往「Google Kubernetes Engine clusters overview」(Google Kubernetes Engine 叢集總覽) 頁面。 
- 選取使用者叢集所在的 Google Cloud 專案。 
- 在叢集清單中,按一下叢集名稱,然後按一下「詳細資料」面板中的「查看詳細資料」。 
- 按一下「Nodes」(節點) 分頁標籤。 
- 按一下要查看的節點集區名稱。 
gcloud CLI
執行下列指令:
gcloud container vmware node-pools describe NODE_POOL_NAME \ --cluster=USER_CLUSTER_NAME \ --project=FLEET_HOST_PROJECT_ID \ --location=LOCATION
刪除節點集區
雖然可以刪除節點集區,但使用者叢集至少要有一個節點集區。刪除節點集區後,系統會立即移除集區的節點,無論這些節點是否正在執行工作負載。
如要從使用者叢集中刪除節點集區,請按照下列步驟操作:
gkectl
- 確認受影響的節點上沒有任何執行中的工作負載。 
- 從使用者叢集設定檔的 - nodePools區段中移除其定義。
- 更新叢集: - gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG - 更改下列內容: - [ADMIN_CLUSTER_KUBECONFIG],並提供管理員叢集的 kubeconfig 檔案路徑。
- [USER_CLUSTER_CONFIG],並提供使用者叢集設定檔的路徑。
 
控制台
- 確認受影響的節點上沒有任何執行中的工作負載。 
- 在控制台中,前往「Google Kubernetes Engine clusters overview」(Google Kubernetes Engine 叢集總覽) 頁面。 
- 選取使用者叢集所在的 Google Cloud 專案。 
- 在叢集清單中,按一下叢集名稱,然後按一下「詳細資料」面板中的「查看詳細資料」。 
- 按一下「Nodes」(節點) 分頁標籤。 
- 按一下要刪除的節點集區名稱。 
- 按一下「刪除」圖示 。 
- 按一下 返回上一頁。 
- Google Cloud 控制台會顯示「叢集狀態:變更進行中」。按一下「顯示詳細資料」,即可查看資源狀態條件和狀態訊息。 
gcloud CLI
- (選用) 列出節點集區,取得要刪除的節點集區名稱: - gcloud container vmware node-pools list \ --cluster=USER_CLUSTER_NAME \ --project=FLEET_HOST_PROJECT_ID \ --location=LOCATION 
- 執行下列指令即可刪除節點集區: - gcloud container vmware node-pools delete NODE_POOL_NAME \ --cluster=USER_CLUSTER_NAME \ --project=FLEET_HOST_PROJECT_ID \ --location=LOCATION - 更改下列內容: - NODE_POOL_NAME:要刪除的節點集區名稱。
- USER_CLUSTER_NAME:節點集區所在使用者叢集的名稱。
- LOCATION:與使用者叢集相關聯的 Google Cloud 位置。
 
疑難排解
- 一般來說, - gkectl update cluster指令會在失敗時提供具體資訊。如果指令成功執行,但您沒有看到節點,可以參閱「診斷叢集問題」指南排解問題。
- 節點集區建立或更新期間,叢集資源可能不足,例如沒有可用的 IP 位址。如要進一步瞭解如何確認 IP 位址是否可用,請參閱「調整使用者叢集大小」主題。 
- 您也可以參閱「排解 Google Distributed Cloud 更新問題」。 
- 不會繼續執行 - Creating node MachineDeployment(s) in user cluster…之後的步驟。- 在使用者叢集中建立或更新節點集區可能需要一段時間。 不過,如果等待時間極長,且您懷疑可能發生錯誤,可以執行下列指令: - 執行 kubectl get nodes取得節點狀態。
- 針對任何未準備就緒的節點,請執行 kubectl describe node NODE_NAME以取得詳細資料。
 
- 執行