更新叢集

修改現有叢集設定,即可隨著工作負載變化,調整基礎架構容量和作業設定。您可以使用 bmctl、Google Cloud CLI 或 Terraform,在環境中新增、移除或取代節點、更新註解,以及修改可變更的設定。如需支援欄位的完整清單,請參閱「叢集設定欄位參考資料」。

工具支援取決於叢集類型和您要修改的資源:

  • gcloud CLI 和 Terraform 僅支援更新管理員和使用者叢集。如要更新其他叢集類型,則必須使用 bmctl。
  • gcloud CLI 和 Terraform 僅支援變更 Cluster 和 NodePool 資源。如要更新會影響叢集的其他自訂資源,則必須使用 kubectl 或 bmctl。

如何更新叢集

叢集設定有許多方面無法變更,建立叢集後即無法更新。如需可變動和不可變動欄位的完整清單,請參閱叢集設定欄位參考資料。欄位參考資料是可排序的表格。按一下欄標題即可變更排列順序。按一下欄位名稱即可查看說明。

一般來說,您會按照下列順序更新叢集:

bmctl

  1. 變更叢集設定檔中適用欄位的值,預設位置如下:
    bmctl-workspace/CLUSTER-NAME/CLUSTER-NAME.yaml

  2. 執行 bmctl update 指令來更新叢集:

    bmctl update cluster -c CLUSTER_NAME --kubeconfig=KUBECONFIG
    

    更改下列內容:

    • CLUSTER_NAME:要更新的叢集名稱。
    • KUBECONFIG:如果是管理員、混合或獨立叢集,請輸入叢集 kubeconfig 檔案的路徑。如果是使用者叢集,請輸入管理員叢集 kubeconfig 檔案的路徑。

gcloud CLI

  1. 僅指定要修改的設定旗標。

  2. 執行適用的更新指令:

Terraform

  1. 在您用來建立叢集或節點集區的 Terraform 設定檔中,變更適用欄位的值。如需詳細的欄位說明,請參閱 Terraform 參考文件:

  2. 執行 terraform apply 指令來更新設定。

以下各節概述更新現有叢集的一些常見範例。

在叢集中新增或移除節點

節點集區是叢集內設定相同的一組節點。請注意,節點一律屬於節點集區。如要將新節點新增至叢集,必須將其新增至特定節點集區。從節點集區中移除節點,等同於從叢集中移除節點。

Google Distributed Cloud 有三種節點集區:控制層、負載平衡器和 worker 節點集區。以下各節說明如何從各類節點集區新增或移除節點。

bmctl

如要從節點集區新增或移除節點,請在叢集設定檔的特定部分新增或移除節點的 IP 位址。下表列出特定節點集區應編輯的部分:

  • Worker 節點集區:在 NodePool 規格的 spec.nodes 區段中,新增或移除節點的 IP 位址。
  • 控制層節點集區:在 Cluster 規格的 spec.controlPlane.nodePoolSpec.nodes 區段中,新增或移除節點的 IP 位址。
  • 負載平衡器節點集區:在 Cluster 規格的 spec.loadBalancer.nodePoolSpec.nodes 區段中,新增或移除節點的 IP 位址。

範例:移除 worker 節點

以下是叢集設定檔範例,顯示兩個 worker 節點的規格:

---
apiVersion: baremetal.cluster.gke.io/v1
kind: NodePool
metadata:
  name: nodepool1
  namespace: cluster-cluster1
spec:
  clusterName: cluster1
  nodes:
  - address: 192.0.2.1
  - address: 192.0.2.2

如要移除節點,請按照下列步驟操作:

  1. (選用) 如果要移除的節點正在執行重要 Pod,請先將節點設為維護模式。

    如要監控 worker 節點的節點排除程序,請查看 NodePool 資源的 status.nodesDrained 和 status.nodesDraining 欄位。

  2. 編輯叢集設定檔,刪除節點的 IP 位址項目。

  3. 更新叢集:

    bmctl update cluster1 \
        --kubeconfig=ADMIN_KUBECONFIG
    

gcloud CLI

您可以使用 update 指令新增或移除節點。您使用的 update 指令,以及指定 IP 位址的旗標,取決於要更新的節點集區類型:

  • worker 節點集區:執行 gcloud container bare-metal node-pools update,並在 --node-configs 'node-ip=IP_ADDRESS' 旗標中指定 IP 位址。

  • 管理員叢集上的控制層節點集區:執行 gcloud container bare-metal admin-clusters update,並在 --control-plane-node-configs 'node-ip=IP_ADDRESS' 旗標中指定 IP 位址。

  • 使用者叢集上的控制層節點集區:執行 gcloud container bare-metal clusters update,並在 --control-plane-node-configs 'node-ip=IP_ADDRESS' 旗標中指定 IP 位址。

  • 負載平衡器節點集區:執行 gcloud container bare-metal clusters update,並在 --metal-lb-load-balancer-node-configs 'node-ip=IP_ADDRESS' 或
    旗標中指定 IP 位址--bgp-load-balancer-node-configs 'node-ip=IP_ADDRESS'

指定 IP 位址的旗標只能接受一個 node-ip。請為節點集區中的每個 IP 位址加入旗標。

update 指令會將所有 IP 位址替換為您指定的 IP 位址。如要新增節點,請在 update 指令中加入現有節點的 IP 位址和新節點的 IP 位址。同樣地,如要移除節點,只要加入要保留的節點 IP 位址即可。

範例:移除 worker 節點

本節說明如何使用範例資料,從節點集區中移除 worker 節點。下列步驟也包含其他實用的 gcloud CLI 指令。

  1. (選用) 如果要移除的節點正在執行重要 Pod,請先將節點設為維護模式。

    如要監控 worker 節點的節點排除程序,請查看 NodePool 資源的 status.nodesDrained 和 status.nodesDraining 欄位。

  2. 執行 list 指令,列出叢集中的所有節點集區:

    gcloud container bare-metal node-pools list \
        --cluster=abm-user-cluster1 \
        --project=example-project-12345 \
        --location=us-central1
    

    輸出結果會與下列內容相似:

    NAME         LOCATION     STATE
    node-pool-1  us-central1  RUNNING
    node-pool-2  asia-east1   RUNNING
    
  3. 執行 describe 指令,列出節點集區中的所有 IP 位址:

    gcloud container bare-metal node-pools describe node-pool-1 \
        --cluster=abm-user-cluster1 \
        --project=example-project-12345 \
        --location=us-central1
    

    以下輸出範例經過截斷,方便閱讀:

    annotations:
      ...
      baremetal.cluster.gke.io/version: 1.36
    ...
    name: projects/example-project-12345/locations/us-central1/bareMetalClusters/abm-user-cluster1/bareMetalNodePools/node-pool-1
    nodePoolConfig:
      nodeConfigs:
      - nodeIp: 192.0.2.1
      - nodeIp: 192.0.2.2
      operatingSystem: LINUX
    state: RUNNING
    ...
    

    請注意範例輸出內容中的下列事項:

    • name 欄位包含節點集區的完整名稱。在指令中指定節點集區名稱時,您可以指定完整名稱,也可以指定節點集區名稱 (例如 node-pool-1),以及 --cluster、--project 和 --location 旗標。

    • nodeConfigs 區段包含兩個 nodeIp 欄位,其中含有節點的 IP 位址。

  4. 執行下列指令,移除 IP 位址為 192.0.2.1 的節點:

    gcloud container bare-metal node-pools update node-pool-1 \
        --cluster=abm-user-cluster1 \
        --project=example-project-12345 \
        --location=us-central1 \
        --node-configs='node-ip=192.0.2.2'
    

    update 指令會將所有 IP 位址替換為您指定的 IP 位址。由於 192.0.2.1 不在清單中,因此系統會移除該節點。

    指令會輸出類似以下的結果:

    Waiting for operation [projects/example-project-12345/locations/us-central1/operations/operation-1697154681749-6078d9def4030-76686d6e-9fcb1de9] to complete
    

    在輸出範例中,字串 operation-1697154681749-6078d9def4030-76686d6e-9fcb1de9 是長時間執行的作業 OPERATION_ID。在其他終端機視窗中執行下列指令,即可查看作業狀態:

    gcloud container bare-metal operations describe operation-1697154681749-6078d9def4030-76686d6e-9fcb1de9 \
        --project= example-project-12345 \
        --location=us-central1
    

    您可以不時重新執行指令,查看狀態。

如果無法移除節點,可以強制從叢集移除。詳情請參閱「在 Google Distributed Cloud 中重設失敗的節點」。

替換高可用性控制層節點

bmctl

您可以使用 bmctl,取代所有叢集類型中的高可用性 (HA) 控制層節點。

如要更換叢集中的節點,請按照下列步驟操作:

  1. 從叢集設定檔中移除節點的 IP 位址。
  2. 更新叢集。
  3. 檢查叢集中的節點狀態。
  4. 將新節點的 IP 位址新增至同一個叢集設定檔。
  5. 更新叢集。

範例:替換高可用性控制層節點

以下是叢集設定檔範例,顯示使用者叢集中的三個控制層節點:

---
apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
name: user-cluster
namespace: cluster-user-cluster
spec:
  controlPlane:
  nodePoolSpec:
    nodes:
    - address: 192.0.2.11
    - address: 192.0.2.12
    - address: 192.0.2.13

如要取代 spec.controlPlane.nodePoolSpec.nodes 區段中列出的最後一個節點,請按照下列步驟操作:

  1. 刪除叢集設定檔中的 IP 位址項目,即可移除節點。完成這項變更後,叢集設定檔應如下所示:

    ---
    apiVersion: baremetal.cluster.gke.io/v1
    kind: Cluster
    metadata:
    name: user-cluster
    namespace: cluster-user-cluster
    spec:
      controlPlane:
      nodePoolSpec:
        nodes:
        - address: 192.0.2.11
        - address: 192.0.2.12
    
  2. 執行下列指令來更新叢集:

    bmctl update cluster -c CLUSTER_NAME \
      --kubeconfig=KUBECONFIG
    

    進行下列變更:

    • 將 CLUSTER_NAME 替換為要更新的叢集名稱。
    • 如果叢集是自行管理的叢集 (例如管理員或獨立叢集),請將 KUBECONFIG 替換為叢集 kubeconfig 檔案的路徑。如果叢集是使用者叢集 (如本例所示),請將 KUBECONFIG 替換為管理員叢集 kubeconfig 檔案的路徑。
  3. bmctl update 指令執行成功後,machine-preflight 和 machine-init 工作需要一些時間才能完成。如要查看節點和其節點集區的狀態,請執行本文件「驗證更新」一節所述的指令。節點集區和節點處於就緒狀態後,即可繼續執行下一個步驟。

  4. 如要將新的控制層節點新增至節點集區,請將新控制層節點的 IP 位址新增至叢集設定檔的 spec.controlPlane.nodePoolSpec.nodes 區段。完成這項變更後,叢集設定檔應如下所示:

    ---
    apiVersion: baremetal.cluster.gke.io/v1
    kind: Cluster
    metadata:
    name: user-cluster
    namespace: cluster-user-cluster
    spec:
      controlPlane:
      nodePoolSpec:
        nodes:
        - address: 192.0.2.11
        - address: 192.0.2.12
        - address: 192.0.2.14
    
  5. 執行下列指令來更新叢集:

    bmctl update cluster -c CLUSTER_NAME \
      --kubeconfig=KUBECONFIG
    

gcloud CLI

您可以使用 gcloud CLI,替換管理員和使用者叢集中的高可用性 (HA) 控制層節點。

如要更換叢集中的節點,請按照下列步驟操作:

  1. 執行適用的 update 指令,移除節點的 IP 位址:

    • 使用者叢集:gcloud container bare-metal clusters update
    • 管理員叢集:gcloud container bare-metal admin-clusters update
  2. 執行 gcloud container bare-metal operations describe OPERATION_ID,檢查叢集中的節點移除狀態。

  3. 執行適用的 update 指令,新增節點的 IP 位址。

範例:替換高可用性控制層節點

本節說明如何使用範例資料,取代叢集的控制層。下列步驟也包含其他實用的 gcloud CLI 指令。

  1. 執行 list 指令,列出Google Cloud 專案中的所有使用者叢集:

    gcloud container bare-metal clusters list \
        --project=example-project-12345 \
        --location=-
    

    設定 --location=-,即代表列出所有區域中的所有叢集。如要縮小清單範圍,請將 --location 設為特定區域。

    輸出結果會與下列內容相似:

    NAME                 LOCATION      VERSION   ADMIN_CLUSTER        STATE
    abm-user-cluster1a   us-central1   1.36      abm-admin-cluster1   RUNNING
    abm-user-cluster1b   europe-west1  1.36      abm-admin-cluster1   RUNNING
    
  2. 在叢集上執行 describe 指令:

    gcloud container bare-metal clusters describe abm-user-cluster1  \
        --project=example-project-12345 \
        --location=us-central1
    

    為方便閱讀,輸出範例已經過截斷:

    ...
    controlPlane:
      controlPlaneNodePoolConfig:
        nodePoolConfig:
          nodeConfigs:
          - nodeIp: 192.0.2.11
          - nodeIp: 192.0.2.12
          - nodeIp: 192.0.2.13
          operatingSystem: LINUX
    ...
    name: projects/example-project-1234567/locations/us-central1/bareMetalClusters/abm-user-cluster1a
    ...
    

    請注意範例輸出內容中的下列事項:

    • name 欄位包含叢集的完整名稱。在指令中指定叢集名稱時,您可以指定完整名稱或叢集名稱,例如 abm-user-cluster1a,以及 --project 和 --location flags。

    • nodeConfigs 區段包含三個 nodeIp 欄位,其中包含控制層節點的 IP 位址。

  3. 移除 IP 位址為 192.0.2.13 的節點:

    gcloud container bare-metal cluster update abm-user-cluster1a \
        --project=example-project-12345 \
        --location=us-central1 \
        --control-plane-node-configs 'node-ip=192.0.2.11'
        --control-plane-node-configs 'node-ip=192.0.2.12'
    

    指令會輸出類似以下的結果:

    Waiting for operation [projects/example-project-12345/locations/us-central1/operations/operation-1956154681749-6078d9def4030-76686d6e-9fcb1d7] to complete
    

    在輸出範例中,字串 operation-1956154681749-6078d9def4030-76686d6e-9fcb1de7 是長時間執行的作業 OPERATION_ID。在其他終端機視窗中執行下列指令,即可查看作業狀態:

    gcloud container bare-metal operations describe operation-1956154681749-6078d9def4030-76686d6e-9fcb1de7 \
        --project= example-project-12345 \
        --location=us-central1
    

    您可以不時重新執行指令,查看狀態。

  4. 新增 IP 位址為 192.0.2.14 的新節點:

    gcloud container bare-metal cluster update abm-user-cluster1a \
        --project=example-project-12345 \
        --location=us-central1 \
        --control-plane-node-configs 'node-ip=192.0.2.11'
        --control-plane-node-configs 'node-ip=192.0.2.12'
        --control-plane-node-configs 'node-ip=192.0.2.14'
    

驗證更新

kubectl

您可以使用 kubectl get 指令,查看節點和其節點集區的狀態。

舉例來說,下列指令會顯示叢集命名空間 cluster-my-cluster 中節點集區的狀態:

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

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

NAME                    READY   RECONCILING   STALLED   UNDERMAINTENANCE   UNKNOWN
cluster-my-cluster      3       0             0         0                  0
cluster-my-cluster-lb   2       0             0         0                  0
np1                     3       0             0         0                  0

Reconciling=1 表示對帳步驟仍在進行中。請等到狀態變更為 Reconciling=0。

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

kubectl get nodes --kubeconfig=KUBECONFIG

gcloud CLI

如前所述,執行 update 指令後,您可以使用 gcloud container bare-metal operations describe OPERATIONS_ID 檢查作業狀態。指令輸出內容會顯示節點狀態,例如:

  ...
  metrics:
  - intValue: '1'
    metric: NODES_RECONCILING
  - intValue: '2'
    metric: NODES_HEALTHY
  - intValue: '0'
    metric: NODES_FAILED
  - intValue: '0'
    metric: NODES_IN_MAINTENANCE
  - intValue: '3'
    metric: NODES_TOTAL
  stage: HEALTH_CHECK
...

無論您使用哪種工具更新節點集區,都可以執行適用的 describe 指令 (如前文所示),取得節點集區的目前狀態。

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

負載平衡器位址集區

bmctl

addressPools 區段包含多個欄位,可用於指定 MetalLB 和邊界閘道通訊協定 (BGP) 組合負載平衡器的負載平衡集區。您隨時可以新增更多負載平衡位址集區,但無法移除任何現有位址集區。從 Google Distributed Cloud 1.16.0 版開始,您可以隨時修改 addressPools.avoidBuggyIPs 和 addressPools.manualAssign 的值。

addressPools:
- name: pool1
  addresses:
  - 198.51.100.0-198.51.100.4
  - 198.51.100.240/28
- name: pool2
  addresses:
  - 198.51.100.224/28

gcloud CLI

您隨時可以為隨附的負載平衡器新增更多負載平衡位址集區,但無法移除任何現有的位址集區。在 gcloud container bare-metal clusters update 中指定用於新增位址集區的旗標,取決於隨附負載平衡器的類型:

  • MetalLB (第 2 層):使用 --metal-lb-address-pools 旗標。
  • 邊界閘道通訊協定 (BGP):使用 --bgp-address-pools 旗標。

旗標值的格式如下:

'pool=NAME,avoid-buggy-ips=True|False,manual-assign=True|False,addresses=IP_ADDRESS_RANGE_1;IP_ADDRESS_RANGE_2;...' \

這個值包含以關鍵字 pool、avoid-buggy-ip、manual-assign 和 addresses 開頭的區隔。請以半形逗號分隔各個區隔。

  • pool:集區名稱,可自行選擇。

  • avoid-buggy-ips:如果設為 True,IP 位址管理 (IPAM) 控制器就不會將結尾為 .0 或 .255 的 IP 位址指派給 Service。這樣一來,就能避免有錯誤的消費者裝置誤將傳送至這些特殊 IP 位址的流量捨棄。如未指定,則預設為 False。自 Google Distributed Cloud 1.16.0 版起,您可以在現有位址集區中修改這個值。

  • manual-assign:如果不想讓 IPAM 控制器自動將這個集區中的 IP 位址指派給服務,請將這個值設為 True。接著,開發人員可以建立 LoadBalancer 類型的 Service,並手動指定集區中的其中一個位址。如未指定,manual-assign 會設為 False。從 Google Distributed Cloud 1.16.0 版開始,您可以在現有位址集區中修改這個值。

  • addresses 清單:每個位址都必須是 CIDR 或連字號範圍格式的範圍。如要在集區中指定單一 IP 位址 (例如 Ingress VIP),請使用 CIDR 標記法中的 /32 (例如 192.0.2.1/32)。

請注意下列語法規則:

  • 請用單引號括住整個值。
  • 不得包含空白字元。
  • 請以分號分隔每個 IP 位址範圍。

您可以指定多個標記例項,如以下範例所示:

--metal-lb-address-pools='pool=pool2,avoid-buggy-ips=False,manual-assign=True,addresses=198.51.100.0/30;198.51.100.64-198.51.100.72'
--metal-lb-address-pools='pool=pool3,avoid-buggy-ips=True,manual-assign=True,addresses=203.0.113.0/28'

如要進一步瞭解負載平衡器位址集區,請參閱「設定隨附的負載平衡功能」中的 loadBalancer.addressPools。

防止不慎刪除叢集

bmctl

如果您在叢集設定檔中新增 baremetal.cluster.gke.io/prevent-deletion: "true" 註解,就無法刪除叢集。例如,執行 kubectl delete cluster 或 bmctl reset cluster 會產生錯誤。

apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
  name: ci-10c3c6f4d9c698e
  namespace: cluster-ci-10c3c6f4d9c698e
  annotations:
    baremetal.cluster.gke.io/prevent-deletion: "true"
spec:
  clusterNetwork:

gcloud CLI

如果指定 --add-annotations 旗標,並將值設為 baremetal.cluster.gke.io/prevent-deletion="true",就無法刪除叢集。例如:

  1. 新增註解,防止叢集意外刪除:

    gcloud container bare-metal clusters update abm-user-cluster1a \
        --project=example-project-12345 \
        --location=us-central1 \
        --add-annotations=baremetal.cluster.gke.io/prevent-deletion="true"
    
  2. 嘗試刪除使用者叢集:

    gcloud container bare-metal clusters delete abm-user-cluster1a \
        --project=example-project-12345 \
        --location=us-central1 \
        --force \
        --allow-missing
    

    指令的回應大致如下:

    ERROR: (gcloud.container.bare-metal.clusters.delete) INVALID_ARGUMENT:
    invalid request: admission webhook "vcluster.kb.io" denied the request:
    annotations[baremetal.cluster.gke.io/prevent-deletion]: Invalid value:
    "true": Annotation "baremetal.cluster.gke.io/prevent-deletion" should be
    removed in order to delete this cluster
    

    如要移除註解,請在 update 指令中指定 --remove-annotations=baremetal.cluster.gke.io/prevent-deletion="true"。

略過預檢

這項功能僅適用於 bmctl update。

bypassPreflightCheck 欄位的預設值為 false。如果您在叢集設定檔中將這個欄位設為 true,則將資源套用至現有叢集時,系統會忽略內部預檢。

  apiVersion: baremetal.cluster.gke.io/v1
  kind: Cluster
  metadata:
    name: cluster1
    namespace: cluster-cluster1
    annotations:
      baremetal.cluster.gke.io/private-mode: "true"
  spec:
    bypassPreflightCheck: true

新增或移除叢集管理員

bmctl

如要新增或移除使用者叢集的叢集管理員 (使用者或服務帳戶),請在叢集設定檔的 clusterSecurity.authorization.clusterAdmin.gcpAccounts 部分指定電子郵件地址。這些帳戶會獲得叢集的叢集管理員角色,具備叢集的完整存取權。

apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
  name: cluster1
  namespace: cluster-cluster1
spec:
  clusterSecurity:
    authorization:
      clusterAdmin:
        gcpAccounts:
        - alex@example.com
        - hao@example.com
        - my-sa@example-project-12345.iam.gserviceaccount.com

更新使用者叢集以新增帳戶時,請務必在清單中加入所有帳戶 (包括現有和新帳戶),因為 bmctl update 會以您在設定檔中指定的內容覆寫清單。如要移除帳戶,請從叢集設定檔中移除帳戶,然後執行 bmctl update。

gcloud CLI

您可以在 --admin-users 旗標中指定電子郵件地址,新增或移除使用者或服務帳戶做為叢集管理員。這個旗標只接受一個電子郵件地址。如要新增多位使用者,請在每個旗標中指定一個帳戶,例如:

gcloud container bare-metal clusters update abm-user-cluster1a \
    --project=example-project-12345 \
    --location=us-central1 \
    --admin-users=alex@example.com \
    --admin-users=hao@example.com
    --admin-users=my-sa@example-project-12345.iam.gserviceaccount.com

update 指令會覆寫整個授權清單。指定要成為叢集管理員的所有現有和新使用者。

設定登入使用者

您可以指定非超級使用者名稱,用於無密碼 sudo 功能存取叢集中的節點機器。您的安全殼層金鑰 sshPrivateKeyPath 必須適用於指定使用者。叢集建立和更新作業會檢查是否能透過指定的使用者和安全殼層金鑰存取節點機器。

bmctl

apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
  name: cluster1
  namespace: cluster-cluster1
  annotations:
    baremetal.cluster.gke.io/private-mode: "true"
spec:
  nodeAccess:
    loginUser: abm

gcloud CLI

您可以在 --login-user 旗標中指定要用來存取節點機器的使用者,例如:

gcloud container bare-metal clusters update abm-user-cluster1a \
    --project=example-project-12345 \
    --location=us-central1 \
    --login-user=abm

如要為使用者啟用無密碼 sudo 存取權,請在每個叢集節點機器上按照下列步驟操作:

  1. 使用 sudo visudo 開啟 sudoers 檔案進行編輯:

    sudo visudo -f /etc/sudoers
    

    visudo 指令會鎖定 sudoers 檔案,防止同時編輯,並在儲存時驗證檔案語法。

  2. 為登入使用者在 sudoers 檔案中新增項目,如下所示:

    USERNAME ALL=(ALL) NOPASSWD: ALL
    
  3. 關閉並儲存檔案。

  4. 如要以登入使用者的權限執行指令,請執行下列指令:

    su - USERNAME
    
  5. 如要確認登入使用者不需密碼即可執行 sudo 指令,請執行下列 sudo 指令:

    sudo ip a
    

進階網路

叢集建立後,您可以在各種自訂資源中設定進階網路功能。如要使用自訂資源和相關網路功能,您必須在建立叢集時啟用進階網路功能。

bmctl

建立叢集時,請在叢集設定中將 clusterNetwork.advancedNetworking 設為 true:

apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
  name: cluster1
  namespace: cluster-cluster1
spec:
  clusterNetwork:
    ...
    advancedNetworking: true
    ...

gcloud CLI

建立叢集時,請在 gcloud container bare-metal clusters create 指令中加入 --enable-advanced-networking 旗標。

建立叢集並啟用進階網路功能後,您可以使用 kubectl apply 設定本節所述的自訂資源。

NetworkGatewayGroup

NetworkGatewayGroup 自訂資源用於為進階網路功能提供浮動 IP 位址,例如輸出 NAT 閘道或與 BGP 搭配使用的套裝負載平衡功能。

apiVersion: networking.gke.io/v1
kind: NetworkGatewayGroup
  name: default
  namespace: cluster-bm
spec:
  floatingIPs:
  - 10.0.1.100
  - 10.0.2.100

BGP 負載平衡

您可以在叢集資源和其他自訂資源中,設定邊界閘道通訊協定 (BGP) 負載平衡。gcloud container bare-metal clusters create 和 update 指令支援在叢集資源中設定 BGP,但不支援自訂資源。

使用 BGP 設定隨附的負載平衡器時,資料層負載平衡預設會使用為控制層對接指定的相同外部對等互連。或者,您也可以使用 BGPLoadBalancer 自訂資源和 BGPPeer 自訂資源,個別設定資料層負載平衡。詳情請參閱「使用 BGP 設定隨附的負載平衡器」。

BGPLoadBalancer

apiVersion: networking.gke.io/v1
kind: BGPLoadBalancer
metadata:
  name: default
  namespace: cluster-bm
spec:
  peerSelector:
    cluster.baremetal.gke.io/default-peer: "true"

BGPPeer

apiVersion: networking.gke.io/v1
kind: BGPPeer
metadata:
  name: bgppeer1
  namespace: cluster-bm
  labels:
    cluster.baremetal.gke.io/default-peer: "true"
spec:
  localASN: 65001
  peerASN: 65002
  peerIP: 10.0.3.254
  sessions: 2

增加服務網路範圍

如要建立超過初始限制的服務,可以縮減 IPv4 服務 CIDR 遮罩,增加叢集的服務網路。縮減遮罩 (「/」後面的值) 會擴大網路範圍。您只能增加 IPv4 服務 CIDR 的範圍。網路範圍無法縮減,也就是說,遮罩 (「/」後方的值) 無法增加。

bmctl

apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
  name: cluster1
  namespace: cluster-cluster1
spec:
  ...
  clusterNetwork:
    services:
      cidrBlocks:
        - 192.0.2.0/14
  ...

gcloud CLI

如要增加使用者叢集的 IPv4 服務 CIDR 範圍,請在 --island-mode-service-address-cidr-blocks 旗標中指定新範圍。

gcloud container bare-metal clusters update cluster1 \
    --project=example-project-12345 \
    --location=us-central1 \
    --island-mode-service-address-cidr-blocks=192.0.2.0/14

從 1.34 版開始,您會在叢集中看到新的 ServiceCIDR 資源。Kubernetes 控制層會使用這些資源,管理 Service 的 IP 位址範圍。

請勿嘗試手動建立或修改 ServiceCIDR 資源。叢集運算子會根據 Cluster 自訂資源中的值,自動管理這些資源。為避免網路問題,系統會禁止任何直接手動編輯,並顯示類似下列的錯誤訊息:

The servicecidrs "my-cidr" is invalid: : This resource is managed by cluster
operator and cannot be modified directly by users.

調整 kubelet 映像檔提取設定

kubelet 會在叢集的每個節點上執行,kubelet 負責監控節點上的容器,並確保容器健康狀態良好。kubelet 會視需要從 Artifact Registry 查詢及提取映像檔。

手動更新 kubelet 設定,並在所有叢集節點之間保持同步,可能相當困難。更糟的是,升級叢集時,節點上手動變更的 kubelet 設定會遺失。

為簡化同步更新作業並確保更新持續生效,Google Distributed Cloud 可讓您為每個叢集節點集區 (控制層節點、負載平衡器節點和 worker 節點) 指定部分 kubelet 設定。這些設定會套用至指定集區中的所有節點,並在叢集升級後保留。這些設定的欄位可變更,因此您隨時可以更新,不限於建立叢集時。

bmctl

下列支援的欄位可控制 kubelet 的 Artifact Registry 提取作業:

  • registryBurst (預設:10)
  • registryPullQPS (預設值:5)
  • serializeImagePulls (預設值:true)

如要進一步瞭解各個 kubelet 設定欄位,請參閱「叢集設定欄位參考資料」。

您可以在叢集規格和 NodePool 規格的 kubeletConfig 區段中,為下列節點集區指定這些欄位:

以下範例顯示叢集設定檔中新增的欄位及其預設值。請注意,preview.baremetal.cluster.gke.io/custom-kubelet: "enable" 註解為必要項目。

apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
  name: cluster1
  namespace: cluster-cluster1
  annotations:
    preview.baremetal.cluster.gke.io/custom-kubelet: "enable"
spec:
  ...
  controlPlane:
    nodePoolSpec:
      kubeletConfig:
        registryBurst: 10
        registryPullQPS: 5
        serializeImagePulls: true
  ...
  loadBalancer:
    nodePoolSpec:
      kubeletConfig:
        registryBurst: 10
        registryPullQPS: 5
        serializeImagePulls: true
  ...
apiVersion: baremetal.cluster.gke.io/v1
kind: NodePool
metadata:
  name: node-pool-new
  namespace: cluster-cluster1
spec:
  clusterName: cluster1
  ...
  kubeletConfig:
    registryBurst: 10
    registryPullQPS: 5
    serializeImagePulls: true

在任何情況下,設定都會套用至集區中的所有節點。

gcloud CLI

下列旗標可控制 kubelet 的 Artifact Registry 提取作業:

使用方法

以下是調整映像檔提取作業時的注意事項:

  • 根據預設,映像檔會依序提取,因此如果提取映像檔的時間過長,可能會延遲節點上排定的所有其他映像檔提取作業。延遲提取映像檔可能會阻礙升級程序 (特別是需要在節點上部署新的 Google Distributed Cloud 映像檔時)。如果映像檔提取作業延遲,您可以停用序列化映像檔提取,允許平行提取映像檔。

  • 如果遇到映像檔提取節流錯誤 (例如 pull QPS exceeded),建議您提高 *-registry-pull-qps 和 *-registry-burst,增加映像檔提取處理量。這兩個欄位可調整提取率和佇列大小,可能有助於解決其他與節流相關的問題。不得為負值。

Keepalived 自訂

從 1.32 版開始,Google Distributed Cloud 提供 Keepalived 設定的部分自訂功能。使用套裝組合負載平衡時,控制層負載平衡器會提供控制層虛擬 IP (VIP) 位址。Google Distributed Cloud 會在負載平衡器節點上,以 Kubernetes 靜態 Pod 的形式執行 Keepalived 和 HAProxy,藉此宣告控制層 VIP。Keepalived 會在負載平衡器節點上使用虛擬路由器備援通訊協定 (VRRP),以確保高可用性。

1.32 以上版本的叢集具有下列 Keepalived 自訂項目:

  • 如果是高可用性控制層,Google Distributed Cloud 會自動設定 Keepalived VRRP,確保容錯移轉行為符合預期,並防止 ARP 回覆與不同 MAC 位址交錯。方法是為每個 Keepalived 執行個體設定不同的 priority 值。

  • 在 Google Distributed Cloud 中,您可以指定控制層節點轉換為主伺服器角色後,一次要傳送的免費 ARP (GARP) 訊息數量。如要變更要傳送的 GARP 訊息數量,請將 controlPlane.loadBalancer.keepalivedVRRPGARPMasterRepeat 欄位新增至叢集設定檔,將其設為新值,然後更新叢集。這個值會對應至 Keepalived 的 vrrp_garp_master_repeat 設定。預設值為 5。

    以下範例說明如何在叢集設定檔中指定 keepalivedVRRPGARPMasterRepeat:

    apiVersion: baremetal.cluster.gke.io/v1
    kind: Cluster
    metadata:
      name: hybrid-ha-lb
      namespace: cluster-hybrid-ha-lb
    spec:
      type: hybrid
      profile: default
      anthosBareMetalVersion: 1.36
      gkeConnect:
        projectID: project-fleet
      controlPlane:
        loadBalancer:
          keepalivedVRRPGARPMasterRepeat: 1
        nodePoolSpec:
          nodes:
          - address: 10.200.0.2
          - address: 10.200.0.3
          - address: 10.200.0.4
      ...
    

安裝或解除安裝隨附的 NVIDIA GPU Operator

NVIDIA GPU Operator 可讓您在叢集中執行 GPU 相關工作負載。從 Google Distributed Cloud 1.33.0 版開始,叢集會與完整的 NVIDIA GPU Operator 堆疊搭配,提供代管解決方案,用於處理在叢集 worker 節點上佈建 GPU 所需的 NVIDIA 軟體元件。

必要條件

安裝隨附的 NVIDIA GPU Operator 前,請確認環境符合下列需求:

  • 運作中的叢集:您已使用 Google Distributed Cloud 建立可運作的裸機叢集。

  • NVIDIA GPU:NVIDIA GPU 會安裝在叢集 worker 節點上。以下安裝 NVIDIA GPU Operator 的章節,包含驗證 GPU 是否正確安裝並由作業系統辨識的步驟。

  • 相容的 NVIDIA 驅動程式版本:您使用的 NVIDIA 驅動程式版本必須與 GPU、作業系統,以及應用程式使用的 CUDA 版本相容。詳情請參閱「版本資訊」。

    您可以選擇下列 NVIDIA 驅動程式安裝選項:

    您必須先安裝並備妥 NVIDIA GPU 驅動程式,才能啟用隨附的 NVIDIA GPU Operator。

版本資訊

本節提供 NVIDIA GPU Operator 軟體版本資訊。

軟體元件版本

Google Distributed Cloud 發布版本 1.33 隨附 NVIDIA GPU Operator 25.3.1 版。在 Google Distributed Cloud 中,套件包含下列映像檔 (預設啟用 CDI):

  • NVIDIA Container Toolkit 1.17.9 版
  • NVIDIA DCGM Exporter v3.3.9-3.6.1
  • NVIDIA Kubernetes 裝置外掛程式 v0.17.1
  • Node Feature Discovery 0.17.2 版

Google Distributed Cloud 1.33 版隨附的映像檔版本,可能與 25.3.1 版本資訊中列出的軟體元件版本不完全相符。

驅動程式相容性

如要瞭解驅動程式相容性資訊,請參閱 NVIDIA Docs Hub 的「Platform Support for version 25.3.1」(25.3.1 版平台支援)。

更新隨附的 NVIDIA GPU Operator

如果您在叢集上安裝 NVIDIA GPU Operator,升級至新的子版本時,系統會安裝最新隨附版本的 NVIDIA GPU Operator。

安裝套裝運算子

雖然隨附的 NVIDIA GPU Operator 處於預先發布版階段,但您可以使用 bmctl update 安裝,將下列註解新增至具有 GPU 節點的叢集:

apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
  name: cluster1
  namespace: cluster-cluster1
  annotations:
    preview.baremetal.cluster.gke.io/nvidia-gpu-operator: "enable"
spec:
  ...

套用註解後,NVIDIA GPU Operator 堆疊會安裝到叢集。

解除安裝套裝組合運算子

雖然隨附的 NVIDIA GPU Operator 處於預先發布版階段,但您可以使用 bmctl update 從具有 GPU 節點的叢集中移除下列註解,藉此解除安裝:

preview.baremetal.cluster.gke.io/nvidia-gpu-operator: "enable"

移除註解後,NVIDIA GPU Operator 堆疊的所有元件都會從叢集移除。

啟用動態資源分配

動態資源分配是一項 Kubernetes API,可讓您在 Pod 和容器之間要求及共用一般資源,例如 GPU。這些資源由第三方驅動程式管理。這項功能可動態精準分配裸機叢集中的 GPU 資源,協助您執行 AI 工作負載,提高資源使用率和效能,滿足高需求工作負載。

1.33 以上版本的叢集可預先發布動態資源分配功能。下列操作說明說明如何設定叢集,以使用動態資源分配。啟用後,您就能設定 GPU 工作負載,使用動態資源分配功能。

設定叢集,啟用動態資源分配功能:

  1. 編輯叢集設定檔,加入 preview.baremetal.cluster.gke.io/dynamic-resource-allocation: "enable" 預先發布版註解,並在 kubeletConfig 區段的 featureGates 下方新增 DynamicResourceAllocation: true:

    apiVersion: baremetal.cluster.gke.io/v1
    kind: Cluster
    metadata:
      name: dra
      namespace: cluster-dra
      annotations:
        preview.baremetal.cluster.gke.io/dynamic-resource-allocation: "enable"
    spec:
      controlPlane:
        nodePoolSpec:
          kubeletConfig:
            featureGates:
              DynamicResourceAllocation: true
    # ... other cluster configuration
    
  2. 執行 bmctl update 指令來更新叢集:

    bmctl update cluster -c CLUSTER_NAME \
        --kubeconfig=ADMIN_KUBECONFIG
    

    更改下列內容:

    • CLUSTER_NAME:要更新的使用者叢集名稱。

    • ADMIN_KUBECONFIG:管理員叢集 kubeconfig 檔案的路徑。

    套用這項設定後,裸機機器的 READY 欄位可能會在 True 和 False 之間切換多次。請等待 READY 欄位穩定顯示 True,再繼續操作。

  3. 如要在節點含有 GPU 的節點集區中啟用 DynamicResourceAllocation feature gate,請在 NodePool 規格的 kubeletConfig 區段中的 featureGates 區段,將 DynamicResourceAllocation 設為 true:

    如需新增及更新節點集區的操作說明,請參閱「管理叢集中的節點集區」。

    apiVersion: baremetal.cluster.gke.io/v1
    kind: NodePool
    metadata:
      name: np
      namespace: cluster-dra
    spec:
      clusterName: dra
      kubeletConfig:
        featureGates:
          DynamicResourceAllocation: true
      nodes:
    # ... other node pool configuration
    

    新增或更新節點集區後,請等待節點集區中的所有裸機機器達到 Ready 狀態。

  4. 如要查看叢集裸機機器的狀態,請使用下列指令:

    kubectl get baremetalmachines --kubeconfig ADMIN_KUBECONFIG -A
    

    裸機機器準備就緒後,回應應與下列範例回應類似:

    NAMESPACE          NAME         CLUSTER    READY   INSTANCEID               MACHINE      ABM VERSION        DESIRED ABM VERSION
    cluster-admin      10.200.0.2   dra        true    baremetal://10.200.0.2   10.200.0.2    1.33.0-gke.793   1.33.0-gke.793
    cluster-user-dra   10.200.0.6   user-dra   true    baremetal://10.200.0.6   10.200.0.6    1.33.0-gke.793   1.33.0-gke.793
    cluster-user-dra   10.200.0.7   user-dra   true    baremetal://10.200.0.7   10.200.0.7    1.33.0-gke.793   1.33.0-gke.793
    cluster-user-dra   10.200.0.8   user-dra   true    baremetal://10.200.0.8   10.200.0.8    1.33.0-gke.793   1.33.0-gke.793
    

限制

隨附的 NVIDIA GPU Operator 有下列限制:

  • 隨附的 NVIDIA GPU Operator 僅支援下列 NVIDIA 軟體元件:

    • NVIDIA Container Toolkit
    • NVIDIA DCGM Exporter
    • NVIDIA Kubernetes 裝置外掛程式
    • Kubernetes 專用 NVIDIA MIG Manager。
  • 在預先發布版期間,NVIDIA GPU Operator 設定是固定的。如果您嘗試自訂任何設定,系統會將這些設定還原為原始安裝設定。

  • 無法使用隨附的 NVIDIA GPU Operator 安裝 NVIDIA GPU 驅動程式。

  • 在預先發布版期間,這項功能會使用 resource.k8s.io/v1beta1 API 群組,與這項功能的開放原始碼 Kubernetes API 群組 resource.k8s.io/v1 不同。v1 開放原始碼 API 群組提供的功能比 v1beta1 API 群組更多,穩定性也更高。

後續步驟

參考文件