叢集建立後,您可以變更叢集設定的某些方面。舉例來說,您可以:
- 新增、移除或替換節點。
- 在叢集中新增或移除註解。
- 修改叢集和節點集區資源中可變更的欄位值。
- 修改其他自訂資源。
您可以使用 bmctl
或 Google Cloud CLI 更新叢集。如果您是使用 Terraform 建立管理員或使用者叢集,則可以使用 Terraform 更新叢集。注意事項:
叢集設定的許多方面都是不可變更的,叢集建立後就無法更新。如需可變動和不可變動欄位的完整清單,請參閱叢集設定欄位參考資料。欄位參照是可排序的表格。按一下欄標題即可變更排序方式。按一下欄位名稱即可查看說明。
gcloud CLI 和 Terraform 僅支援更新管理員和使用者叢集。如要更新其他叢集類型,請使用
bmctl
。gcloud CLI 和 Terraform 僅支援變更叢集和節點集區資源。您必須使用
kubectl
或bmctl
,更新會影響叢集的其他自訂資源。
本文適用於管理底層技術基礎架構生命週期的管理員、架構師和營運人員。如要進一步瞭解我們在 Google Cloud 內容中提及的常見角色和範例工作,請參閱「常見的 GKE Enterprise 使用者角色和工作」。
如何更新叢集
一般來說,更新叢集時會依序執行下列動作:
bmctl
在叢集的設定檔中變更適用欄位的值,該檔案預設位於:
bmctl-workspace/CLUSTER-NAME/CLUSTER-NAME.yaml
執行
bmctl update
指令來更新叢集:bmctl update cluster -c CLUSTER_NAME --kubeconfig=KUBECONFIG
更改下列內容:
CLUSTER_NAME
:要更新的叢集名稱。KUBECONFIG
:如果是管理員、混合式或獨立叢集,請輸入叢集 kubeconfig 檔案的路徑。如果是使用者叢集,請輸入管理員叢集的 kubeconfig 檔案路徑。
gcloud CLI
請僅指定要修改的設定標記。
執行適用的更新指令:
Terraform
在用於建立叢集或節點集區的 Terraform 設定檔中,變更適用欄位的值。如需詳細的欄位說明,請參閱 Terraform 參考說明文件:
執行
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
如要移除節點,請按照下列步驟操作:
(選用) 如果要移除的節點正在執行重要 Pod,請先將節點設為維護模式。
如要監控工作站節點的節點排空程序,請查看
NodePool
資源的status.nodesDrained
和status.nodesDraining
欄位。編輯叢集設定檔,刪除節點的 IP 位址項目。
更新叢集:
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 指令。
(選用) 如果要移除的節點正在執行重要 Pod,請先將節點設為維護模式。
如要監控工作站節點的節點排空程序,請查看
NodePool
資源的status.nodesDrained
和status.nodesDraining
欄位。執行
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
執行
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 位址。
執行下列指令,移除 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) 控制層節點。
如要更換叢集中的節點,請執行下列步驟:
- 從叢集設定檔中移除節點的 IP 位址。
- 更新叢集。
- 檢查叢集中的節點狀態。
- 將新節點的 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
- address: 192.0.2.13
如要取代「spec.controlPlane.nodePoolSpec.nodes
」
部分列出的最後一個節點,請按照下列步驟操作:
如要移除節點,請刪除叢集設定檔中的節點 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
執行下列指令來更新叢集:
bmctl update cluster -c CLUSTER_NAME \ --kubeconfig=KUBECONFIG
進行下列變更:
- 將 CLUSTER_NAME 替換為要更新的叢集名稱。
- 如果叢集是自我管理叢集 (例如管理員或獨立叢集),請將 KUBECONFIG 替換為叢集 kubeconfig 檔案的路徑。如果叢集是使用者叢集 (如本範例所示),請將 KUBECONFIG 替換為管理員叢集的 kubeconfig 檔案路徑。
bmctl update
指令成功執行後,需要一段時間才能完成machine-preflight
和machine-init
工作。您可以執行本文「驗證更新」一節所述的指令,查看節點和各自節點集區的狀態。節點集區和節點處於就緒狀態後,即可繼續下一個步驟。將新控制層節點的 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
執行下列指令來更新叢集:
bmctl update cluster -c CLUSTER_NAME \ --kubeconfig=KUBECONFIG
gcloud CLI
您可以使用 gcloud CLI,替換管理員和使用者叢集中的高可用性 (HA) 控制層節點。
如要更換叢集中的節點,請執行下列步驟:
執行適用的
update
指令,移除節點的 IP 位址:- 使用者叢集:
gcloud container bare-metal clusters update
- 管理員叢集:
gcloud container bare-metal admin-clusters update
- 使用者叢集:
執行
gcloud container bare-metal operations describe OPERATION_ID
,檢查叢集中節點移除作業的狀態。執行適用的
update
指令,新增節點的 IP 位址。
例如:更換高可用性控制層節點
本節說明如何使用範例資料,從叢集取代控制平面。下列步驟也包含您可能會用到的其他 gcloud CLI 指令。
執行
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
在叢集上執行
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 位址。
移除 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
您可以不時重新執行指令,檢查狀態。
新增 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 位址指派給服務。這樣可避免發生錯誤的消費裝置誤將傳送至這些特殊 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 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
如果您使用值 baremetal.cluster.gke.io/prevent-deletion="true"
指定 --add-annotations
旗標,系統會禁止您刪除叢集。例如:
新增註解,防止叢集遭到意外刪除:
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"
嘗試刪除使用者叢集:
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
存取權,請在每個叢集節點電腦上執行下列步驟:
使用
sudo visudo
開啟 sudoers 檔案進行編輯:sudo visudo -f /etc/sudoers
visudo
指令會鎖定 sudoers 檔案,防止同時編輯,並在儲存時驗證檔案語法。為登入使用者新增項目至 sudoers 檔案,如下所示:
USERNAME ALL=(ALL) NOPASSWD: ALL
關閉並儲存檔案。
如要以登入使用者的權限執行指令,請執行下列指令:
su - USERNAME
如要確認登入使用者執行
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
設定 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
區段中,為下列節點集區指定這些欄位:
- 叢集規格:
- 控制層節點
spec.controlPlane.nodePoolSpec.kubeletConfig
- 負載平衡器節點
spec.loadBalancer.nodePoolSpec.kubeletConfig
- NodePool 規格:
- 工作站節點
spec.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 提取作業:
控制層節點
負載平衡器節點
- --bgp-load-balancer-registry-burst
- --bgp-load-balancer-registry-pull-qps
- --disable-bgp-load-balancer-serialize-image-pulls
- --enable-bgp-load-balancer-serialize-image-pulls
- --metal-lb-load-balancer-registry-burst
- --metal-lb-load-balancer-registry-pull-qps
- --disable-metal-lb-load-balancer-serialize-image-pull
- --enable-metal-lb-load-balancer-serialize-image-pulls
工作站節點
使用方法
以下是微調圖片提取作業時需要考量的事項:
由於系統預設會依序提取映像檔,因此提取映像檔的時間過長可能會延遲節點上排定的所有其他映像檔提取作業。延遲提取映像檔可能會阻礙升級程序 (特別是需要在節點上部署新的 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 驅動程式。
請按照 NVIDIA 驅動程式安裝快速入門指南中的說明,手動安裝 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 工作負載,使用動態資源分配功能。
設定叢集以啟用動態資源分配:
編輯叢集設定檔,加入
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
執行
bmctl update
指令來更新叢集:bmctl update cluster -c CLUSTER_NAME \ --kubeconfig=ADMIN_KUBECONFIG
更改下列內容:
CLUSTER_NAME
:要更新的使用者叢集名稱。ADMIN_KUBECONFIG
:管理員叢集 kubeconfig 檔案的路徑。
套用這項設定後,裸機的
READY
欄位可能會在True
和False
之間多次切換。等待READY
欄位穩定顯示True
,再繼續操作。如要在具有 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
狀態。如要檢查叢集裸機的狀態,請使用下列指令:
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 群組。
後續步驟
如要搭配 GPU 工作負載使用動態資源分配功能,請參閱「使用動態資源分配功能管理 GPU 裝置」。
如要進一步瞭解動態資源分配,請參閱 Kubernetes 說明文件中的「動態資源分配」。