本頁面提供拓撲網域的總覽,以及設定拓撲網域的指南。
如要設定拓撲網域,必須啟用進階叢集。
本頁面適用於管理員和架構師,他們會根據公司策略定義 IT 解決方案和系統架構,並建立及管理與使用者授權相關的政策。如要進一步瞭解 Google Cloud 內容中提及的常見角色和工作範例,請參閱「常見的 GKE 使用者角色和工作」。
總覽
「拓撲網域」是一組叢集節點,屬於同一個邏輯或實體分組,例如園區或資料中心。拓撲網域應對應至某些可能發生相關故障的基礎硬體或軟體。例如:
- 軟體故障,例如 vCenter Server 不同
- 硬體故障,例如不同的機架、不同的電源和不同的建築物
在 VMware 適用的 Google Distributed Cloud (僅限軟體) 中,建立叢集時,您必須定義拓撲標籤,做為設定拓撲網域的一部分。叢集建立後,拓撲標籤會填入拓撲網域中節點的標籤。
如要使用拓撲網域,可以採取下列做法:
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 都會獲得預期的分散行為。
限制
您無法使用 gkectl get-config 從採用拓撲網域的叢集產生設定檔。這項限制適用於管理員叢集,以及由管理員叢集管理的所有使用者叢集。請保留用於建立及更新這些叢集的設定檔,包括 vSphere 基礎架構設定檔和 IP 區塊檔案。請將這些檔案做為叢集設定的可靠資料來源。