设置拓扑网域

本页面简要介绍了拓扑网域以及设置拓扑网域的准则。

设置拓扑网域需要启用高级集群。请注意高级集群预览版的以下限制:

  • 您只能在创建集群时为新的 1.31 版集群启用高级集群。
  • 启用高级集群后,您将无法将集群升级到 1.32。请仅在测试环境中启用高级集群。

本页面适用于根据公司战略定义 IT 解决方案和系统架构,并创建和管理与用户权限相关的政策的管理员和架构师。如需详细了解我们在 Google Cloud 内容中提及的常见角色和示例任务,请参阅常见的 GKE Enterprise 用户角色和任务

概览

拓扑网域是一组被视为同一逻辑或物理分组(例如园区或数据中心)的集群节点。拓扑网域应对应于可能存在相关故障的某些底层硬件或软件。例如:

  • 软件故障,如不同的 vCenter Server
  • 硬件故障,如不同机架、不同电源和不同建筑物

在 Google Distributed Cloud for VMware(纯软件)中,在创建集群时要设置拓扑网域,在此过程中你需要定义拓扑标签。创建集群后,拓扑标签会填充到拓扑网域中节点的标签内。

如需在预览期间使用拓扑网域,您有以下几种选择:

  • 使用 Kubernetes 集群级默认约束条件 "topology.kubernetes.io/zone" 作为拓扑标签中的键。如需了解详情,请参阅内置默认约束条件

  • 在适用情况下,为 Deployment、StatefulSet 或 ReplicaSet 中的 PodTemplate 配置拓扑标签键。在 Pod 规范中,您可以使用拓扑标签中的键作为 topologySpreadConstraints.topologyKey 字段的值。此键可让 Kubernetes 调度器在拓扑网域中分发 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 都会获得预期的分布行为。

后续步骤