6.4. 创建将 pod 分散到所有区中的 Topology CR
创建 Topology 自定义资源(CR),将 control plane 服务 pod 分散到区。以下流程创建示例 Topology CR。有关如何控制 pod 放置的详情,请参考 RHOCP 节点指南中的控制节点上的 pod 放置(调度)。
流程
在工作站上创建一个文件,它定义了一个
TopologyCR,将 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-hashwhenUnsatisfiable: 指定如何在不满足分布式约束的情况下处理 pod:-
DoNotSchedule:构建调度程序而不是调度 pod。这是默认的行为。为确保部署具有高可用性(HA),请将 HA 服务rabbitmq和galera设置为DoNotSchedule。 -
ScheduleAnyway:构建调度程序以在任何位置调度 pod,但为拓扑赋予更高的优先级,以最小化 skew。如果将 HA 服务设置为ScheduleAnyway,则当无法满足分布式约束时,该 pod 会被放置在不同的区域中。然后,在区正常工作后,您必须手动将 pod 移到正确的区。有关如何手动移动 pod 的更多信息,请参阅 RHOCP 节点中的 控制 pod 放置到节点上。
-
-
matchLabelKeys:指定标签键,用于对关联性规则要应用到的 pod 进行分组。使用此字段确保关联性规则仅在调度时应用到来自同一statefulset或deployment资源的 pod。matchLabelKeys字段可让资源使用新 pod 更新,而分散约束规则仅应用到新的 pod 集合。
如果每个区中有多个主机节点,您可以配置主机反关联性,将服务 pod 分散到同一区的主机中:
spec: topologySpreadConstraints: ... - maxSkew: 1 topologyKey: kubernetes.io/hostname whenUnsatisfiable: DoNotSchedule matchLabelKeys: - pod-template-hash - controller-revision-hash创建
TopologyCR:$ oc create -f spread_pods.yaml
后续步骤