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


创建 Topology 自定义资源(CR),将 control plane 服务 pod 分散到区。以下流程创建示例 Topology CR。有关如何控制 pod 放置的详情,请参考 RHOCP 节点指南中的控制节点上的 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 
    1
    
        matchLabelKeys: 
    2
    
          - pod-template-hash
          - controller-revision-hash
    Copy to Clipboard Toggle word wrap
    1
    指定在不满足分布式约束时如何处理 pod:
    • DoNotSchedule :构建调度程序而不是调度 pod。这是默认的行为。为确保部署具有高可用性(HA),请将 HA 服务 rabbitmqgalera 设置为 DoNotSchedule
    • ScheduleAnyway :构建调度程序以在任何位置调度 pod,但为拓扑赋予更高的优先级,以最小化 skew。如果将 HA 服务设置为 ScheduleAnyway,则当无法满足分布式约束时,该 pod 会被放置在不同的区域中。然后,在区正常工作后,您必须手动将 pod 移到正确的区。有关如何手动移动 pod 的更多信息,请参阅 RHOCP 节点中的 控制 pod 放置到节点上
    2
    指定用于对关联性规则应用到的 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
    Copy to Clipboard Toggle word wrap
  3. 创建 Topology CR:

    $ oc create -f spread_pods.yaml
    Copy to Clipboard Toggle word wrap
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat