設定拓撲網域

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

如要設定拓撲網域,必須啟用進階叢集。

本頁面適用於管理員和架構師,他們會根據公司策略定義 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 區塊檔案。請將這些檔案做為叢集設定的可靠資料來源。

後續步驟