建立使用者叢集時,您必須設定至少一個節點集區,也就是具有相同設定的一組節點。叢集建立完成後,您可以新增節點集區、更新節點集區設定,以及刪除節點集區。
選擇管理節點集區的工具
建立、更新及刪除節點集區的方式,取決於叢集是否由 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
,才能設定下列節點集區設定:
- OS 映像檔類型為 Windows
- vSphere 資料儲存庫
vSphere 標記 如要將標記附加至節點集區中的所有 VM,vCenter 使用者帳戶必須具備下列 vSphere 標記權限:
- vSphere 標記。指派或取消指派 vSphere 標記
- vSphere Tagging.Assign 或 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 的倍數)。
- 在「節點」欄位中,輸入集區中的節點數量 (最少 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
以取得詳細資料。
- 執行