管理叢集中的節點集區

節點集區是叢集中具有相同配置的一組節點。叢集中的所有節點都必須屬於節點集區。Google Distributed Cloud 叢集有三種節點集區:控制層、負載平衡器和工作站節點集區。

本頁說明如何檢查工作站節點集區的狀態,以及如何新增、更新及移除工作站節點集區。

選擇管理節點集區的工具

管理節點集區的方式取決於叢集類型,以及使用者叢集是否由 GKE On-Prem API 管理。如果符合下列任一條件,使用者叢集就會由 GKE On-Prem API 管理:

  • 叢集是在 Google Cloud 控制台中建立,或是使用 Google Cloud CLI (gcloud CLI) 建立,這會自動設定 GKE On-Prem API 來管理叢集。

  • 叢集是使用 bmctl 建立,但已設定為由 GKE On-Prem API 管理

如果 GKE On-Prem API 管理使用者叢集,您可以使用主控台或 gcloud CLI 管理節點集區。如果使用者叢集不是由 GKE On-Prem API 管理,請使用管理工作站上的 kubectl 管理節點集區。您也可以使用 kubectl 管理所有可包含工作站節點集區的叢集類型 (混合式、獨立和使用者叢集) 的節點集區。

如果您打算使用 gcloud CLI,請在已安裝 gcloud CLI 的電腦上執行下列操作:

  1. 使用您的 Google 帳戶登入

    gcloud auth login
    
  2. 更新元件:

    gcloud components update
    

檢查節點狀態

新增或移除節點集區前,請先檢查節點及其所屬節點集區的狀態。

kubectl

使用 kubectl,您可以取得特定命名空間或整個叢集中的節點狀態。以下範例顯示叢集命名空間 cluster-abm-cluster 中的節點集區狀態:

kubectl get nodepools.baremetal.cluster.gke.io -n cluster-abm-cluster

系統會傳回類似下列內容的結果:

NAME                    READY   RECONCILING   STALLED   UNDERMAINTENANCE   UNKNOWN
abm-cluster             3       0             0         0                  0
default-pool            2       0             0         0                  0
backup-pool             3       0             0         0                  0

表格中的每個資料欄都代表節點可能處於的不同狀態。表格中的每一列,都是各節點狀態下每個節點集區的節點數量。

新增節點時,節點在佈建期間的初始狀態為 Reconciling。節點加入叢集後,節點狀態會變更為 Ready

您也可以執行下列指令,檢查叢集中節點的狀態:

kubectl get nodes --kubeconfig=PATH_TO_KUBECONFIG

控制台

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

    前往 GKE 叢集

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

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

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

    畫面上會顯示節點集區清單。

節點清單螢幕截圖

gcloud CLI

  1. 列出叢集中的節點集區:

    gcloud container bare-metal node-pools list \
      --cluster=USER_CLUSTER_NAME \
      --project=FLEET_HOST_PROJECT_ID \
      --location=LOCATION
    

    更改下列內容:

    • USER_CLUSTER_NAME:包含節點集區的使用者叢集名稱。

    • FLEET_HOST_PROJECT_ID:叢集建立所在的專案 ID。

    • LOCATION:與使用者叢集相關聯的 Google Cloud 位置。

  2. 描述節點集區:

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

    NODE_POOL_NAME 替換為節點集區的名稱。

如要進一步瞭解如何診斷叢集,請參閱「建立診斷叢集快照」。

新增節點集區

kubectl

將節點集區新增至叢集時,請注意下列規則:

  • 管理員叢集可以包含負載平衡器節點集區和控制層節點集區,但不能包含工作站節點集區:嘗試將工作站節點集區新增至管理員叢集會產生錯誤。

  • 叢集只能包含一個控制層節點集區和一個負載平衡器節點集區。您無法在叢集中新增額外的控制層或負載平衡節點集區。

如要在叢集中新增節點集區,請在叢集中建立新的 nodepools.baremetal.cluster.gke.io 資源。在下列範例中,資訊清單會新增名為「machine-learning-pool」的新節點集區。新的節點集區包含兩個節點,IP 位址分別為 10.200.0.710.200.0.8

apiVersion: baremetal.cluster.gke.io/v1
kind: NodePool
metadata:
  name: machine-learning-pool
  namespace: cluster-abm-cluster
spec:
  clusterName: abm-cluster
  nodes:
  - address: 10.200.0.7
  - address: 10.200.0.8
  taints:
  - key: TAINT_KEY
    value: TAINT_VALUE
    effect: NoSchedule
  labels:
    key1: LABEL_1
    key2: LABEL_2

將設定儲存在名為 machine-learning-pool.yaml 的檔案中,然後使用下列指令將設定套用至叢集:

kubectl apply -f machine-learning-pool.yaml

在叢集中新增節點集區時,請考量下列事實:

  • NodePool.spec.taintsNodePool.spec.labels 設定會協調至節點。系統會移除直接新增至節點的所有汙點和標籤。在同步程序中直接新增的汙點和標籤不會遭到移除。如要略過這個協調步驟,可以為節點加上 baremetal.cluster.gke.io/label-taint-no-sync 註解。

  • 節點集區資源必須與相關聯的叢集建立在相同的命名空間,且節點集區資源必須在 spec.clusterName 欄位中參照叢集名稱。

控制台

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

    前往 GKE 叢集

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

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

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

  5. 輸入節點集區的名稱。

  6. 在「節點位址 1」欄位中,輸入工作站節點機器的 IP 位址。

    如要新增多個工作站節點機器,請按一下 「新增地址」

  7. 視需要新增 Kubernetes 標籤和/或 Kubernetes 汙點

  8. 點選「建立」

節點集區的狀態會顯示在「節點」分頁標籤中。你可能需要重新整理頁面,才能查看最新狀態。

gcloud CLI

gcloud container bare-metal node-pools create NODE_POOL_NAME \
  --cluster=USER_CLUSTER_NAME \
  --project=FLEET_HOST_PROJECT_ID \
  --location=LOCATION \
  --node-configs-from-file=NODE_POOL_CONFIG

更改下列內容:

  • NODE_POOL_NAME:您為節點集區選用的名稱。名稱必須符合下列規定:

    • 最多可包含 40 個半形字元
    • 只能包含小寫英數字元或連字號 (-)
    • 開頭必須是字母字元
    • 結尾為英數字元
  • USER_CLUSTER_NAME:使用者叢集的名稱。

  • FLEET_HOST_PROJECT_ID:叢集建立所在的專案 ID。

  • LOCATION:您在建立叢集時指定的 Google Cloud 位置。

  • NODE_POOL_CONFIG:說明節點集區的設定檔路徑。例如:

    nodeConfigs:
    - nodeIP: 10.200.0.10
      labels:
        key1: value1
        key2: value2
    - nodeIP: 10.200.0.11
      labels:
        key3: value3
        key4: value4
    

您也可以選擇指定下列項目:

  • --node-labels=KEY=VALUE,...:以半形逗號分隔的Kubernetes 標籤 (鍵/值組合) 清單,會套用至集區中的每個節點。

  • --node-taints=KEY=VALUE:EFFECT,... 以半形逗號分隔的 Kubernetes taint 清單

套用至集區中的每個節點。汙點是與效果相關聯的鍵/值組合。taint 會搭配容許條件用於 Pod 排程。為 EFFECT 指定下列其中一個值:NoSchedulePreferNoScheduleNoExecute

  • --validate-only 如果您想驗證更新,但不想進行任何變更,請指定這個標記。

更新節點集區

kubectl

如要更新節點集區,請修改叢集中的 nodepools.baremetal.cluster.gke.io 資源。您可以直接使用 kubectl edit 更新資源,也可以更新 YAML 檔案並使用 kubectl apply

控制台

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

    前往 GKE 叢集

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

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

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

  5. 在清單中,按一下要更新的節點集區。

  6. 在「Node pool details」(節點集區詳細資料) 頁面中,按一下 「Edit」(編輯)

  7. 視需要變更設定,然後按一下「儲存」

gcloud CLI

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

    gcloud container bare-metal node-pools list \
      --cluster=USER_CLUSTER_NAME \
      --project=FLEET_HOST_PROJECT_ID \
      --location=LOCATION
    

    更改下列內容:

    • USER_CLUSTER_NAME:包含節點集區的使用者叢集名稱。

    • FLEET_HOST_PROJECT_ID:叢集建立所在的專案 ID。

    • LOCATION:與使用者叢集相關聯的 Google Cloud 位置。

  2. 執行下列指令:

    gcloud container bare-metal node-pools update NODE_POOL_NAME  \
      --cluster=USER_CLUSTER_NAME \
      --project=FLEET_HOST_PROJECT_ID \
      --location=LOCATION \
      --node-configs-from-file=NODE_CONFIG_FILE
    

    更改下列內容:

    • NODE_POOL_NAME 替換為節點集區的名稱。

    • NODE_CONFIG_FILE:說明節點集區的設定檔路徑。例如:

    nodeConfigs:
      - nodeIP: 10.200.0.10
        labels:
          key1: value1
      - nodeIP: 10.200.0.11
    

您也可以選擇指定下列項目:

  • --node-labels=KEY=VALUE,...:以半形逗號分隔的Kubernetes 標籤 (鍵/值組合) 清單,會套用至集區中的每個節點。

  • --node-taints=KEY=VALUE:EFFECT,... 以逗號分隔的Kubernetes 汙點清單, 會套用至集區中的每個節點。汙點是與效果相關聯的鍵/值組合。taint 會搭配容許條件用於 Pod 排程。為 EFFECT 指定下列其中一個值:NoSchedulePreferNoScheduleNoExecute

  • --validate-only 如果您想驗證更新,但不想進行任何變更,請指定這個標記。

例如:

gcloud container bare-metal node-pools create default-pool \
    --cluster=user-cluster-1  \
    --location=us-west1 \
    --node-configs-from-file=node-pool-config.yaml \
    --node-taints=key1=val1:NoSchedule,key2=val2:NoExecute

移除節點集區

kubectl

您可以使用 kubectl delete 移除節點集區。舉例來說,如要移除前一節中新增的節點集區 machine-learning-pool,請使用下列指令:

kubectl delete nodepool machine-learning-pool -n cluster-abm-cluster

請注意,控制層節點集區和負載平衡器節點集區對叢集功能至關重要,因此無法從叢集中移除。

控制台

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

    前往 GKE 叢集

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

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

  4. 按一下「節點」分頁標籤,然後按一下要刪除的節點集區。

  5. 按一下「刪除」圖示

  6. 在確認對話方塊中,輸入節點集區名稱,然後按一下「確認」

gcloud CLI

gcloud container bare-metal node-pools delete NODE_POOL_NAME  \
  --cluster=USER_CLUSTER_NAME \
  --project=FLEET_HOST_PROJECT_ID \
  --location=LOCATION

更改下列內容:

  • NODE_POOL_NAME 替換為節點集區的名稱。

  • USER_CLUSTER_NAME:包含節點集區的使用者叢集名稱。

  • FLEET_HOST_PROJECT_ID:叢集建立所在的專案 ID。

  • LOCATION:與使用者叢集相關聯的 Google Cloud 位置。

移除叢集中的工作站節點集區可能會導致 Pod 中斷。如果設有 Pod 中斷預算 (PDB),您可能無法移除節點集區。如要進一步瞭解 Pod 中斷政策,請參閱「移除受 Pod 中斷預算封鎖的節點」。

後續步驟

建立節點集區後,如果工作負載需求有變,您可以更新工作站節點集區來新增或移除節點。如要新增或移除工作站節點集區中的節點,請參閱「新增或移除叢集中的節點」。