4.3. 为 Thanos Ruler 设置 pod 拓扑分布限制

对于用户定义的监控,您可以为 Thanos Ruler 设置 pod 拓扑分布限制,以微调如何在区调度到节点的 pod 副本。这有助于确保 Thanos Ruler pod 具有高可用性并更有效地运行,因为工作负载分散在不同的数据中心或分级基础架构区中。

您可以在 user-workload-monitoring-config 配置映射中为 Thanos Ruler 配置 pod 拓扑分布限制。

先决条件

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

步骤

  1. 编辑 openshift-user-workload-monitoring 命名空间中的 user-workload-monitoring-config 配置映射:

    $ oc -n openshift-user-workload-monitoring edit configmap user-workload-monitoring-config
  2. data/config.yaml/thanosRuler 下添加以下设置的值来配置 pod 拓扑分布限制:

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: user-workload-monitoring-config
      namespace: openshift-user-workload-monitoring
    data:
      config.yaml: |
        thanosRuler:
          topologySpreadConstraints:
          - maxSkew: 1 1
            topologyKey: monitoring 2
            whenUnsatisfiable: ScheduleAnyway 3
            labelSelector:
              matchLabels: 4
                app.kubernetes.io/name: thanos-ruler
    1
    maxSkew 指定数字值,它定义了允许不均匀分布 pod 的程度。此字段是必需的,值必须大于零。指定的值会根据您为 whenUnsatisfiable 指定的值的不同而有所不同。
    2
    topologyKey 指定节点标签键。此字段是必需的。带有具有此键和相同值标签的节点被视为在同一拓扑中。调度程序会尝试将大量 pod 放置到每个域中。
    3
    whenUnsatisfiable 指定一个值。此字段是必需的。可用选项包括 DoNotScheduleScheduleAnyway。如果您希望 maxSkew 值定义目标拓扑和全局最小值中匹配 pod 数量之间允许的最大值,则指定 DoNotSchedule。如果您希望调度程序仍然调度 pod,但为可能降低 skew 的节点赋予更高的优先级,请指定 ScheduleAnyway
    4
    matchLabels 指定一个值。这个值用于标识要应用约束的匹配 pod 的集合。
  3. 保存文件以自动应用更改。

    警告

    当您将更改保存到 user-workload-monitoring-config 配置映射时,可能会重新部署 openshift-user-workload-monitoring 项目中的 Pod 和其他资源。该项目中正在运行的监控进程可能会重启。