6.4. 创建将 pod 分散到所有区中的 Topology CR


创建 Topology 自定义资源(CR),将 control plane 服务 pod 分散到区。

流程

  1. 在工作站上创建一个文件,它定义了一个 Topology CR,将 control plane 服务 pod 分散到区,如 spread_pods.yaml

    apiVersion: topology.openstack.org/v1beta1
    kind: Topology
    metadata:
      name: spread-pods
      namespace: openstack
    spec:
      topologySpreadConstraints:
      - maxSkew: 1
        topologyKey: topology.kubernetes.io/zone
        whenUnsatisfiable: DoNotSchedule
        matchLabelKeys:
          - pod-template-hash
          - controller-revision-hash
    • whenUnsatisfiable: 指定如何在不满足分布式约束的情况下处理 pod:

      • DoNotSchedule :构建调度程序而不是调度 pod。这是默认的行为。为确保部署具有高可用性(HA),请将 HA 服务 rabbitmqgalera 设置为 DoNotSchedule
      • ScheduleAnyway :构建调度程序以在任何位置调度 pod,但为拓扑赋予更高的优先级,以最小化 skew。如果将 HA 服务设置为 ScheduleAnyway,则当无法满足分布式约束时,该 pod 会被放置在不同的区域中。然后,在区正常工作后,您必须手动将 pod 移到正确的区。有关如何手动移动 pod 的更多信息,请参阅 RHOCP 节点中的 控制 pod 放置到节点上
    • matchLabelKeys :指定标签键,用于对关联性规则要应用到的 pod 进行分组。使用此字段确保关联性规则仅在调度时应用到来自同一 statefulsetdeployment 资源的 pod。matchLabelKeys 字段可让资源使用新 pod 更新,而分散约束规则仅应用到新的 pod 集合。
  2. 如果每个区中有多个主机节点,您可以配置主机反关联性,将服务 pod 分散到同一区的主机中:

    spec:
      topologySpreadConstraints:
      ...
      - maxSkew: 1
        topologyKey: kubernetes.io/hostname
        whenUnsatisfiable: DoNotSchedule
        matchLabelKeys:
          - pod-template-hash
          - controller-revision-hash
  3. 创建 Topology CR:

    $ oc create -f spread_pods.yaml
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

关于红帽文档

Legal Notice

Theme

© 2026 Red Hat
返回顶部