本页面简要介绍了拓扑网域以及设置拓扑网域的准则。
设置拓扑网域需要启用高级集群。请注意高级集群预览版的以下限制:
- 您只能在创建集群时为新的 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-1
、zone-2
和 zone-3
。然后,调度器会将 Pod 分布到这三个节点组中。
拓扑网域设置指南
为确保 Kubernetes 调度器能够有效利用所有集群资源,我们建议遵循以下准则:
- 拓扑网域需要平衡。您应在每个拓扑网域中提供接近等量的 CPU 和 RAM 容量。
- 至少提供两个(最好是三个)拓扑网域。
- 不要按多个拓扑键进行分布。
- 节点在每个拓扑网域中的大小应类似。
- 如果您使用污点和容忍在集群中隔离工作负载,则每个节点组都应满足上述要求。
如果不符合这些准则,调度器仍会尝试使用集群的全部容量,但调度 Pod 所需的时间可能会更长,并且并非所有 Pod 都会获得预期的分布行为。