設定拓撲網域

本頁提供拓撲網域的總覽,以及設定拓撲網域的指南。

如要設定拓撲網域,必須啟用進階叢集。請注意,進階叢集預覽功能有下列限制:

  • 您只能在建立新的 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-1zone-2zone-3)。排程器接著會將 Pod 分散到這三個節點群組。

拓撲網域設定指南

為確保 Kubernetes 排程器有效使用所有叢集資源,建議您遵循下列準則:

  • 拓撲網域必須保持平衡。您應在每個拓撲網域中提供近乎相等的 CPU 和 RAM 容量。
  • 請至少提供兩個拓撲網域,最好是三個。
  • 請勿依據多個拓撲鍵分散。
  • 每個拓撲網域中的節點大小應相近。
  • 如果您使用汙點和容許度,在叢集內區隔工作負載,則每個節點群組都應符合先前的規定。

如果不符合這些規範,排程器仍會嘗試使用叢集的完整容量,但排定 Pod 的時間可能會較長,且並非所有 Pod 都會獲得預期的散布行為。

後續步驟