更新叢集

叢集建立後,您可以變更叢集設定的某些方面。舉例來說,您可以:

  • 新增、移除或替換節點。
  • 在叢集中新增或移除註解。
  • 修改叢集和節點集區資源中可變更的欄位值。
  • 修改其他自訂資源。

您可以使用 bmctl 或 Google Cloud CLI 更新叢集。如果您是使用 Terraform 建立管理員或使用者叢集,則可以使用 Terraform 更新叢集。注意事項:

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

  • gcloud CLI 和 Terraform 僅支援更新管理員和使用者叢集。如要更新其他叢集類型,請使用 bmctl

  • gcloud CLI 和 Terraform 僅支援變更叢集和節點集區資源。您必須使用 kubectlbmctl,更新會影響叢集的其他自訂資源。

本文適用於管理底層技術基礎架構生命週期的管理員、架構師和營運人員。如要進一步瞭解我們在 Google Cloud 內容中提及的常見角色和範例工作,請參閱「常見的 GKE Enterprise 使用者角色和工作」。

如何更新叢集

一般來說,更新叢集時會依序執行下列動作:

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 中有三種節點集區:控制層、負載平衡器和工作站節點集區。下列各節說明如何從各類節點集區新增或移除節點。

bmctl

如要新增或移除節點集區中的節點,請在叢集設定檔的特定部分新增或移除節點的 IP 位址。下列清單顯示要編輯特定節點集區的哪個部分:

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

範例:移除工作節點

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

---
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,請先將節點設為維護模式

    如要監控工作站節點的節點排空程序,請查看 NodePool 資源的 status.nodesDrainedstatus.nodesDraining 欄位。

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

  3. 更新叢集:

    bmctl update cluster1 \
        --kubeconfig=ADMIN_KUBECONFIG
    

gcloud CLI

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

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

  • 管理員叢集上的控制層節點集區:執行 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'
    --bgp-load-balancer-node-configs 'node-ip=IP_ADDRESS' 旗標中指定 IP 位址。

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

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

範例:移除工作節點

本節將使用範例資料,說明如何從節點集區移除工作站節點。下列步驟也包含您可能會用到的其他 gcloud CLI 指令。

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

    如要監控工作站節點的節點排空程序,請查看 NodePool 資源的 status.nodesDrainedstatus.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.33
    ...
    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-preflightmachine-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.33      abm-admin-cluster1   RUNNING
    abm-user-cluster1b   europe-west1  1.33      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.avoidBuggyIPsaddressPools.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;...' \

值包含以關鍵字 poolavoid-buggy-ipmanual-assignaddresses 開頭的區隔。請以半形逗號分隔每個區隔。

  • pool:您為集區選用的名稱。

  • avoid-buggy-ips:如果將此值設為 True,IP 位址管理 (IPAM) 控制器就不會將結尾為 .0.255 的 IP 位址指派給服務。這樣可避免發生錯誤的消費裝置誤將傳送至這些特殊 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 位址 (例如輸入 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 clusterbmctl 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

如果您使用值 baremetal.cluster.gke.io/prevent-deletion="true" 指定 --add-annotations 旗標,系統會禁止您刪除叢集。例如:

  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 必須適用於指定使用者。叢集建立和更新作業會檢查是否能使用指定的使用者和 SSH 金鑰存取節點機器。

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 createupdate 指令支援在叢集資源中設定 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

設定 kubelet 映像檔提取設定

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

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

為方便進行同步更新並確保更新作業持續進行,Google Distributed Cloud 可讓您為每個叢集節點集區 (控制層節點、負載平衡器節點和工作站節點) 指定部分 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 會在負載平衡器節點上使用 Virtual Router Redundancy Protocol (VRRP),確保高可用性。

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

  • 對於高可用性控制平面,Google Distributed Cloud 會自動設定 Keepalived VRRP 設定,確保容錯移轉行為具有確定性,並防止 ARP 回覆與不同 MAC 位址交錯:

    • 每個 Keepalived 例項都會在 VRRP 路由器中自動設定不同的 priority 值。

    • 系統會自動為每個 Keepalived 執行個體設定 nopreempt,避免在非主要執行個體重新啟動時進行選舉。

  • 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.33
      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 運算子

NVIDIA GPU 運算子可讓您在叢集中執行 GPU 相關工作負載。從 Google Distributed Cloud 1.33.0 版開始,叢集會隨附完整的 NVIDIA GPU 運算子堆疊,提供代管解決方案,處理在叢集工作站節點上佈建 GPU 時所需的 NVIDIA 軟體元件。

必要條件

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

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

  • NVIDIA GPU:NVIDIA GPU 安裝在叢集工作站節點上。 以下安裝 NVIDIA GPU 運算子一節包含相關步驟,可驗證 GPU 是否已正確安裝,且作業系統可辨識 GPU。

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

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

    您必須先安裝並準備好 NVIDIA GPU 驅動程式,才能啟用隨附的 NVIDIA GPU 運算子。

版本資訊

本節包含隨附 NVIDIA GPU 運算子軟體的版本資訊。

軟體元件版本

Google Distributed Cloud 1.33 版隨附 NVIDIA GPU 運算子 25.3.1 版。在 Google Distributed Cloud 中,套裝組合包含下列映像檔:

  • NVIDIA Container Toolkit 1.17.8 版
  • NVIDIA DCGM Exporter v3.3.9-3.6.1
  • NVIDIA Kubernetes 裝置外掛程式 v0.17.1
  • 節點功能探索 v0.17.2

Google Distributed Cloud 1.33 版隨附的映像檔版本,可能與25.3.1 版發行說明中列出的軟體元件版本不完全一致。

驅動程式相容性

如需驅動程式相容性資訊,請參閱 NVIDIA 文件中心上的版本 25.3.1 的平台支援

更新隨附的 NVIDIA GPU 運算子

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

安裝隨附的運算符

在隨附的 NVIDIA GPU 運算子處於搶先版期間,請使用 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 運算子堆疊就會安裝至叢集。

解除安裝隨附的運算子

在隨附的 NVIDIA GPU 運算子處於搶先版期間,您可以使用 bmctl update 從具有 GPU 節點的叢集中移除下列註解,藉此解除安裝:

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

移除註解後,叢集中的 NVIDIA GPU 運算子堆疊所有元件都會一併移除。

啟用動態資源分配

動態資源分配是 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 欄位可能會在 TrueFalse 之間多次切換。等待 READY 欄位穩定顯示 True,再繼續操作。

  3. 如要在具有 GPU 節點的節點集區中啟用 DynamicResourceAllocation 功能閘道,請在 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 運算子有下列限制:

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

    • NVIDIA Container Toolkit
    • NVIDIA DCGM Exporter
    • NVIDIA Kubernetes 裝置外掛程式
    • Kubernetes 適用的 NVIDIA MIG 管理工具。
  • 預覽期間,NVIDIA GPU 運算子設定是固定的。如果您嘗試自訂任何設定,系統會將設定還原為原始安裝設定。

  • 隨附的 NVIDIA GPU 運算子無法用來安裝 NVIDIA GPU 驅動程式。

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

後續步驟

參考說明文件