修改現有叢集設定,即可隨著工作負載變化,調整基礎架構容量和作業設定。您可以使用 bmctl、Google Cloud CLI 或 Terraform,在環境中新增、移除或取代節點、更新註解,以及修改可變更的設定。如需支援欄位的完整清單,請參閱「叢集設定欄位參考資料」。
工具支援取決於叢集類型和您要修改的資源:
- gcloud CLI 和 Terraform 僅支援更新管理員和使用者叢集。如要更新其他叢集類型,則必須使用
bmctl。 - gcloud CLI 和 Terraform 僅支援變更
Cluster和NodePool資源。如要更新會影響叢集的其他自訂資源,則必須使用kubectl或bmctl。
如何更新叢集
叢集設定有許多方面無法變更,建立叢集後即無法更新。如需可變動和不可變動欄位的完整清單,請參閱叢集設定欄位參考資料。欄位參考資料是可排序的表格。按一下欄標題即可變更排列順序。按一下欄位名稱即可查看說明。
一般來說,您會按照下列順序更新叢集:
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 有三種節點集區:控制層、負載平衡器和 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
如要移除節點,請按照下列步驟操作:
(選用) 如果要移除的節點正在執行重要 Pod,請先將節點設為維護模式。
如要監控 worker 節點的節點排除程序,請查看
NodePool資源的status.nodesDrained和status.nodesDraining欄位。編輯叢集設定檔,刪除節點的 IP 位址項目。
更新叢集:
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 指令。
(選用) 如果要移除的節點正在執行重要 Pod,請先將節點設為維護模式。
如要監控 worker 節點的節點排除程序,請查看
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.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 位址。
執行下列指令,移除 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.36 abm-admin-cluster1 RUNNING abm-user-cluster1b europe-west1 1.36 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 位址指派給 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",就無法刪除叢集。例如:
新增註解,防止叢集意外刪除:
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 必須適用於指定使用者。叢集建立和更新作業會檢查是否能透過指定的使用者和安全殼層金鑰存取節點機器。
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/sudoersvisudo指令會鎖定 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
從 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 區段中,為下列節點集區指定這些欄位:
- 叢集規格:
- 控制層節點
spec.controlPlane.nodePoolSpec.kubeletConfig - 負載平衡器節點
spec.loadBalancer.nodePoolSpec.kubeletConfig - NodePool 規格:
- worker 節點
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
worker 節點
使用方法
以下是調整映像檔提取作業時的注意事項:
根據預設,映像檔會依序提取,因此如果提取映像檔的時間過長,可能會延遲節點上排定的所有其他映像檔提取作業。延遲提取映像檔可能會阻礙升級程序 (特別是需要在節點上部署新的 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 驅動程式。
請按照「NVIDIA 驅動程式安裝快速入門指南」中的操作說明,手動安裝 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 工作負載,使用動態資源分配功能。
設定叢集,啟用動態資源分配功能:
編輯叢集設定檔,加入
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 的節點集區中啟用
DynamicResourceAllocationfeature 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狀態。如要查看叢集裸機機器的狀態,請使用下列指令:
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/v1beta1API 群組,與這項功能的開放原始碼 Kubernetes API 群組resource.k8s.io/v1不同。v1開放原始碼 API 群組提供的功能比v1beta1API 群組更多,穩定性也更高。
後續步驟
如要搭配 GPU 工作負載使用動態資源分配功能,請參閱「使用動態資源分配功能管理 GPU 裝置」。
如要進一步瞭解動態資源分配,請參閱 Kubernetes 說明文件中的「動態資源分配」。