本頁提供拓撲網域的總覽,以及設定拓撲網域的指南。
如要設定拓撲網域,必須啟用進階叢集。請注意,進階叢集預覽功能有下列限制:
- 您只能在建立新的 1.31 叢集時啟用進階叢集。
- 啟用進階叢集後,您將無法將叢集升級至 1.32 版。請僅在測試環境中啟用進階叢集。
本頁內容適用於管理員和架構師。他們會根據公司策略定義 IT 解決方案和系統架構,並建立及管理與使用者權限相關的政策。如要進一步瞭解內容中提及的常見角色和範例工作,請參閱「常見的 GKE Enterprise 使用者角色和工作」。 Google Cloud
總覽
拓撲網域是一組叢集節點,可視為同一邏輯或實體群組 (例如校園或資料中心) 的一部分。拓撲網域應對應至某些可能發生相關故障的基礎硬體或軟體。例如:
- 軟體故障,例如不同的 vCenter Server
- 硬體故障,例如不同機架、不同電源和不同建築物
在 Google Distributed Cloud (僅限軟體) for VMware 中,建立叢集時設定拓撲網域時,您會定義拓撲標籤。建立叢集後,拓撲標籤會填入拓撲網域中節點的標籤。
如要使用拓撲網域,可以採取下列做法:
1.32 以上版本:設定叢集層級的預設拓撲擴散限制。詳情請參閱
schedulerConfiguration
。使用 Kubernetes 叢集層級的預設限制條件
"topology.kubernetes.io/zone"
做為拓撲標籤中的鍵。詳情請參閱「內建預設限制」。在 Deployment、StatefulSet 或 ReplicaSet 中設定
PodTemplate
,視拓撲標籤鍵而定。在 Pod 規格中,您會使用拓撲標籤中的鍵做為topologySpreadConstraints.topologyKey
欄位的值。Kubernetes 排程器可透過這個鍵,將 Pod 分散到拓撲網域中,確保高可用性,並避免在發生故障時,Pod 過度集中在單一區域。如要進一步瞭解如何在 Pod 規格中設定topologySpreadConstraints
,請參閱 Kubernetes 說明文件的「Pod 拓撲分散限制」。
拓撲網域標籤範例
假設您在建立使用者叢集時,建立下列三個拓撲網域:
...
topologyDomains:
- name: "topology-domain-1"
topologyLabels:
"topology.examplepetstore.com/zone": "zone-1"
...
...
topologyDomains:
- name: "topology-domain-2"
topologyLabels:
"topology.examplepetstore.com/zone": "zone-2"
...
...
topologyDomains:
- name: "topology-domain-3"
topologyLabels:
"topology.examplepetstore.com/zone": "zone-3"
...
建立叢集後,請更新 Pod 規格,例如:
...
topologySpreadConstraints:
topologyKey: "topology.examplepetstore.com/zone"
...
從高層次來看,Kubernetes 排程器會使用 topology.examplepetstore.com/zone
將叢集節點分成不同群組 (zone-1
、zone-2
和 zone-3
)。排程器接著會將 Pod 分散到這三個節點群組。
拓撲網域設定指南
為確保 Kubernetes 排程器有效使用所有叢集資源,建議您遵循下列準則:
- 拓撲網域必須保持平衡。您應在每個拓撲網域中提供近乎相等的 CPU 和 RAM 容量。
- 請至少提供兩個拓撲網域,最好是三個。
- 請勿依據多個拓撲鍵分散。
- 每個拓撲網域中的節點大小應相近。
- 如果您使用汙點和容許度,在叢集內區隔工作負載,則每個節點群組都應符合先前的規定。
如果不符合這些規範,排程器仍會嘗試使用叢集的完整容量,但排定 Pod 的時間可能會較長,且並非所有 Pod 都會獲得預期的散布行為。