第 6 章 使用 pod 拓扑分布限制来监控


当 OpenShift Container Platform pod 部署到多个可用区时,您可以使用 pod 拓扑分布约束来控制监控 pod 如何分散到网络拓扑中。

Pod 拓扑分布约束适合在分层拓扑内控制 pod 调度,节点分散到不同的基础架构级别,如这些区域内的地区和区域。另外,通过能够在不同区中调度 pod,您可以在某些情况下提高网络延迟。

6.1. 配置 pod 拓扑分布限制

您可以为 Cluster Monitoring Operator 部署的所有 pod 配置 pod 拓扑分布限制,以控制如何在区调度到节点的 pod 副本。这样可确保 pod 具有高可用性并更有效地运行,因为工作负载分散在不同的数据中心或分层基础架构区域中。

您可以使用 cluster-monitoring-configuser-workload-monitoring-config 配置映射为监控 pod 配置 pod 拓扑分布限制。

先决条件

  • 如果要为 OpenShift Container Platform 核心监控配置 pod:

    • 您可以使用具有 cluster-admin 集群角色的用户身份访问集群。
    • 您已创建 cluster-monitoring-config ConfigMap 对象。
  • 如果要为用户定义的监控配置 pod:

    • 您可以使用具有 cluster-admin 集群角色的用户访问集群,也可以使用在 openshift-user-workload-monitoring 项目中具有 user-workload-monitoring-config-edit 角色的用户访问集群。
    • 集群管理员为用户定义的项目启用了监控。
  • 已安装 OpenShift CLI(oc)。

流程

  • 为 OpenShift Container Platform 核心监控配置 pod 拓扑分布限制:

    1. 编辑 openshift-monitoring 项目中的 cluster-monitoring-config 配置映射:

      $ oc -n openshift-monitoring edit configmap cluster-monitoring-config
      Copy to Clipboard Toggle word wrap
    2. data/config.yaml 字段中添加以下设置来配置 pod 拓扑分布限制:

      apiVersion: v1
      kind: ConfigMap
      metadata:
        name: cluster-monitoring-config
        namespace: openshift-monitoring
      data:
        config.yaml: |
          <component>: 
      1
      
            topologySpreadConstraints:
            - maxSkew: <n> 
      2
      
              topologyKey: <key> 
      3
      
              whenUnsatisfiable: <value> 
      4
      
              labelSelector: 
      5
      
                <match_option>
      Copy to Clipboard Toggle word wrap
      1
      指定您要为其设置 pod 拓扑分布限制的组件名称。
      2
      maxSkew 指定数字值,它定义了允许不均匀分布 pod 的程度。
      3
      topologyKey 指定节点标签键。带有具有此键和相同值标签的节点被视为在同一拓扑中。调度程序会尝试将大量 pod 放置到每个域中。
      4
      whenUnsatisfiable 指定一个值。可用选项包括 DoNotScheduleScheduleAnyway。如果您希望 maxSkew 值定义目标拓扑和全局最小值中匹配 pod 数量之间允许的最大值,则指定 DoNotSchedule。如果您希望调度程序仍然调度 pod,但为可能降低 skew 的节点赋予更高的优先级,请指定 ScheduleAnyway
      5
      指定 labelSelector 来查找匹配的 pod。与此标签选择器匹配的 Pod 被计算,以确定其对应拓扑域中的 pod 数量。

      Prometheus 配置示例

      apiVersion: v1
      kind: ConfigMap
      metadata:
        name: cluster-monitoring-config
        namespace: openshift-monitoring
      data:
        config.yaml: |
          prometheusK8s:
            topologySpreadConstraints:
            - maxSkew: 1
              topologyKey: monitoring
              whenUnsatisfiable: DoNotSchedule
              labelSelector:
                matchLabels:
                  app.kubernetes.io/name: prometheus
      Copy to Clipboard Toggle word wrap

    3. 保存文件以使改变生效。受新配置影响的 Pod 会自动重新部署。
  • 为用户定义的监控配置 pod 拓扑分布限制:

    1. 编辑 openshift-user-workload-monitoring 项目中的 user-workload-monitoring-config 配置映射:

      $ oc -n openshift-user-workload-monitoring edit configmap user-workload-monitoring-config
      Copy to Clipboard Toggle word wrap
    2. data/config.yaml 字段中添加以下设置来配置 pod 拓扑分布限制:

      apiVersion: v1
      kind: ConfigMap
      metadata:
        name: user-workload-monitoring-config
        namespace: openshift-user-workload-monitoring
      data:
        config.yaml: |
          <component>: 
      1
      
            topologySpreadConstraints:
            - maxSkew: <n> 
      2
      
              topologyKey: <key> 
      3
      
              whenUnsatisfiable: <value> 
      4
      
              labelSelector: 
      5
      
                <match_option>
      Copy to Clipboard Toggle word wrap
      1
      指定您要为其设置 pod 拓扑分布限制的组件名称。
      2
      maxSkew 指定数字值,它定义了允许不均匀分布 pod 的程度。
      3
      topologyKey 指定节点标签键。带有具有此键和相同值标签的节点被视为在同一拓扑中。调度程序会尝试将大量 pod 放置到每个域中。
      4
      whenUnsatisfiable 指定一个值。可用选项包括 DoNotScheduleScheduleAnyway。如果您希望 maxSkew 值定义目标拓扑和全局最小值中匹配 pod 数量之间允许的最大值,则指定 DoNotSchedule。如果您希望调度程序仍然调度 pod,但为可能降低 skew 的节点赋予更高的优先级,请指定 ScheduleAnyway
      5
      指定 labelSelector 来查找匹配的 pod。与此标签选择器匹配的 Pod 被计算,以确定其对应拓扑域中的 pod 数量。

      Thanos Ruler 的配置示例

      apiVersion: v1
      kind: ConfigMap
      metadata:
        name: user-workload-monitoring-config
        namespace: openshift-user-workload-monitoring
      data:
        config.yaml: |
          thanosRuler:
            topologySpreadConstraints:
            - maxSkew: 1
              topologyKey: monitoring
              whenUnsatisfiable: ScheduleAnyway
              labelSelector:
                matchLabels:
                  app.kubernetes.io/name: thanos-ruler
      Copy to Clipboard Toggle word wrap

    3. 保存文件以使改变生效。受新配置影响的 Pod 会自动重新部署。
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat