建立及管理節點集區

建立使用者叢集時,您必須設定至少一個節點集區,也就是具有相同設定的一組節點。叢集建立完成後,您可以新增節點集區、更新節點集區設定,以及刪除節點集區。

選擇管理節點集區的工具

建立、更新及刪除節點集區的方式,取決於叢集是否由 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 的電腦上執行下列操作:

  1. 登入 Google 帳戶

    gcloud auth login
    
  2. 更新元件:

    gcloud components update
    

新增節點集區

如果叢集是由 GKE On-Prem API 管理,您可以使用主控台或 gcloud CLI 新增節點集區,但必須在管理工作站上使用 gkectl,才能設定下列節點集區設定:

新增其他節點集區前,請先確認叢集有足夠的可用 IP 位址

gkectl

在管理員工作站上執行下列操作:

  1. 使用者叢集設定檔中,填寫nodePools部分。

    您必須指定下列欄位:

    • nodePools.[i].name
    • nodePools[i].cpus
    • nodePools.[i].memoryMB
    • nodePools.[i].replicas

    以下欄位為選填項目。如未加入 nodePools[i].bootDiskSizeGBnodePools[i].osImageType, 系統會使用預設值。

    • nodePools[i].labels
    • nodePools[i].taints
    • nodePools[i].bootDiskSizeGB
    • nodePools[i].osImageType
    • nodePools[i].vsphere.datastore
    • nodePools[i].vsphere.tags
  2. 執行下列指令:

    gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG
    

    更改下列內容:

    • ADMIN_CLUSTER_KUBECONFIG,並提供管理員叢集的 kubeconfig 檔案路徑。

    • USER_CLUSTER_CONFIG,並提供使用者叢集設定檔的路徑。

範例設定

在下列範例設定中,有四個節點集區,每個節點集區都有不同的屬性:

  • pool-1:僅指定必要屬性
  • pool-2:包括 vsphere.datastorevsphere.tags
  • pool-3:包括 taintslabels
  • pool-4:包括 osImageTypebootDiskSizeGB
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

控制台

  1. 在控制台中,前往「Google Kubernetes Engine clusters overview」(Google Kubernetes Engine 叢集總覽) 頁面。

    前往 GKE 叢集

  2. 選取使用者叢集所在的 Google Cloud 專案。

  3. 在叢集清單中,按一下叢集名稱,然後按一下「詳細資料」面板中的「查看詳細資料」

  4. 按一下 「Add node pool」(新增節點集區)

  5. 設定節點集區:

    1. 輸入「節點集區名稱」
    2. 輸入集區中每個節點的 vCPUs 數量 (每個使用者叢集工作站至少須有 4 個)。
    3. 輸入集區中每個節點的記憶體大小 (以 MiB 為單位,每個使用者叢集工作站節點至少須有 8192 MiB,且必須為 4 的倍數)。
    4. 在「節點」欄位中,輸入集區中的節點數量 (最少 3 個)。
    5. 選取「OS image type」(作業系統映像檔類型):Ubuntu ContainerdCOS

    6. 以 GiB 為單位輸入開機磁碟大小 (預設為 40 GiB)。

  6. 在「節點集區中繼資料 (選用)」專區中,如要新增 Kubernetes 標籤汙點,請按照下列步驟操作:

    1. 按一下「+ Add Kubernetes Labels」(+ 新增 Kubernetes 標籤)。輸入標籤的「Key」(鍵) 和「Value」(值)。視需要重複上述步驟。
    2. 按一下「+ Add Taint」(新增汙染)。輸入汙染的「鍵」、「值」和「效果」。視需要重複上述步驟。
  7. 點選「建立」

  8. 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_containerdcos

    • 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 指定下列其中一項:NoSchedulePreferNoScheduleNoExecute

    例如:

    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

  1. 在使用者叢集設定檔的 nodePools 區段中,修改要變更的欄位值。

  2. 更新叢集:

    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

  1. 在控制台中,前往「Google Kubernetes Engine clusters overview」(Google Kubernetes Engine 叢集總覽) 頁面。

    前往 GKE 叢集

  2. 選取使用者叢集所在的 Google Cloud 專案。

  3. 在叢集清單中,按一下叢集名稱,然後按一下「詳細資料」面板中的「查看詳細資料」

  4. 按一下「Nodes」(節點) 分頁標籤。

  5. 按一下要修改的節點集區名稱。

  6. 在要修改的欄位旁,按一下「編輯」,然後按一下「完成」

  7. 按一下 即可返回上一頁。

  8. Google Cloud 控制台會顯示「叢集狀態:變更進度」。按一下「顯示詳細資料」,即可查看資源狀態條件狀態訊息

gcloud CLI

  1. (選用) 列出節點集區,取得要更新的節點集區名稱:

    gcloud container vmware node-pools list \
      --cluster=USER_CLUSTER_NAME \
      --project=FLEET_HOST_PROJECT_ID \
      --location=LOCATION
    
  2. 執行下列指令來更新節點集區:

    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

控制台

  1. 在控制台中,前往「Google Kubernetes Engine clusters overview」(Google Kubernetes Engine 叢集總覽) 頁面。

    前往 GKE 叢集

  2. 選取使用者叢集所在的 Google Cloud 專案。

  3. 在叢集清單中,按一下叢集名稱,然後按一下「詳細資料」面板中的「查看詳細資料」

  4. 按一下「Nodes」(節點) 分頁標籤。

  5. 按一下要查看的節點集區名稱。

gcloud CLI

執行下列指令:

gcloud container vmware node-pools describe NODE_POOL_NAME \
  --cluster=USER_CLUSTER_NAME \
  --project=FLEET_HOST_PROJECT_ID \
  --location=LOCATION

刪除節點集區

雖然可以刪除節點集區,但使用者叢集至少要有一個節點集區。刪除節點集區後,系統會立即移除集區的節點,無論這些節點是否正在執行工作負載。

如要從使用者叢集中刪除節點集區,請按照下列步驟操作:

gkectl

  1. 確認受影響的節點上沒有任何執行中的工作負載。

  2. 從使用者叢集設定檔的 nodePools 區段中移除其定義。

  3. 更新叢集:

    gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG
    

    更改下列內容:

    • [ADMIN_CLUSTER_KUBECONFIG],並提供管理員叢集的 kubeconfig 檔案路徑。

    • [USER_CLUSTER_CONFIG],並提供使用者叢集設定檔的路徑。

控制台

  1. 確認受影響的節點上沒有任何執行中的工作負載。

  2. 在控制台中,前往「Google Kubernetes Engine clusters overview」(Google Kubernetes Engine 叢集總覽) 頁面。

    前往 GKE 叢集

  3. 選取使用者叢集所在的 Google Cloud 專案。

  4. 在叢集清單中,按一下叢集名稱,然後按一下「詳細資料」面板中的「查看詳細資料」

  5. 按一下「Nodes」(節點) 分頁標籤。

  6. 按一下要刪除的節點集區名稱。

  7. 按一下「刪除」圖示

  8. 按一下 即可返回上一頁。

  9. Google Cloud 控制台會顯示「叢集狀態:變更進度」。按一下「顯示詳細資料」,即可查看資源狀態條件狀態訊息

gcloud CLI

  1. (選用) 列出節點集區,取得要刪除的節點集區名稱:

    gcloud container vmware node-pools list \
      --cluster=USER_CLUSTER_NAME \
      --project=FLEET_HOST_PROJECT_ID \
      --location=LOCATION
    
  2. 執行下列指令即可刪除節點集區:

    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… 之後的步驟。

    在使用者叢集中建立或更新節點集區可能需要一段時間。 不過,如果等待時間極長,且您懷疑可能發生錯誤,可以執行下列指令:

    1. 執行 kubectl get nodes 取得節點狀態。
    2. 針對任何未準備就緒的節點,請執行 kubectl describe node NODE_NAME 以取得詳細資料。