2.6. 使用节点选择器移动监控组件

通过将 nodeSelector 约束与标记的节点搭配使用,您可以将任何监控堆栈组件移到特定的节点上。通过这样做,您可以控制集群中监控组件的放置和分发。

通过控制监控组件的放置和分发,您可以根据特定要求或策略优化系统资源使用、提高性能和隔离工作负载。

2.6.1. 节点选择器与其他约束一起使用

如果使用节点选择器约束移动监控组件,请注意集群可能存在其他限制来控制 pod 调度:

  • 拓扑分布约束可能处于放置状态来控制 pod 放置。
  • Prometheus、Thanos Querier、Alertmanager 和其他监控组件会放置硬反关联性规则,以确保这些组件的多个 pod 始终分散到不同的节点上,因此始终具有高可用性。

将 pod 调度到节点时,pod 调度程序会在决定 pod 放置时尝试满足所有现有的限制。也就是说,当 pod 调度程序决定将哪些 pod 放置到哪些节点上时,所有约束都会编译。

因此,如果您配置节点选择器约束,但无法满足现有的约束,pod 调度程序无法与所有约束匹配,也不会调度 pod 放置到节点上。

为保持监控组件的弹性和高可用性,请确保有足够的节点可用,并在配置节点选择器约束以移动组件时匹配所有约束。

2.6.2. 将监控组件移到其他节点

要指定运行监控堆栈组件的集群中的节点,请在组件的 ConfigMap 对象中配置 nodeSelector 约束,以匹配分配给节点的标签。

注意

您不能将节点选择器约束直接添加到现有调度的 pod 中。

先决条件

  • 如果要配置 OpenShift Container Platform 核心监控组件

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

    • 您可以使用具有 cluster-admin 集群角色或具有 openshift-user-workload-monitoring 项目中的 user-workload-monitoring-config-edit 角色的用户访问集群。
    • 您已创建了 user-workload-monitoring-config ConfigMap 对象。
  • 已安装 OpenShift CLI(oc)。

流程

  1. 如果您还没有这样做,请在要运行监控组件的节点中添加标签:

    $ oc label nodes <node-name> <node-label>
  2. 编辑 ConfigMap 对象:

    • 要移动用于监控 OpenShift Container Platform 核心项目的组件

      1. 编辑 openshift-monitoring 项目中的 cluster-monitoring-config ConfigMap 对象:

        $ oc -n openshift-monitoring edit configmap cluster-monitoring-config
      2. data/config.yaml 下为组件指定 nodeSelector 约束的节点标签:

        apiVersion: v1
        kind: ConfigMap
        metadata:
          name: cluster-monitoring-config
          namespace: openshift-monitoring
        data:
          config.yaml: |
            <component>: 1
              nodeSelector:
                <node-label-1> 2
                <node-label-2> 3
                <...>
        1
        <component> 替换为适当的监控堆栈组件名称。
        2
        <node-label-1> 替换为添加到节点的标签。
        3
        可选:指定附加标签。如果您指定了额外的标签,则组件的 pod 仅调度到包含所有指定标签的节点上。
        注意

        如果在配置 nodeSelector 约束后监控组件仍然处于 Pending 状态,请检查 Pod 事件中与污点和容限相关的错误。

    • 要移动用于监控用户定义的项目的组件

      1. openshift-user-workload-monitoring 项目中编辑 user-workload-monitoring-config ConfigMap 对象:

        $ oc -n openshift-user-workload-monitoring edit configmap user-workload-monitoring-config
      2. data/config.yaml 下为组件指定 nodeSelector 约束的节点标签:

        apiVersion: v1
        kind: ConfigMap
        metadata:
          name: user-workload-monitoring-config
          namespace: openshift-user-workload-monitoring
        data:
          config.yaml: |
            <component>: 1
              nodeSelector:
                <node-label-1> 2
                <node-label-2> 3
                <...>
        1
        <component> 替换为适当的监控堆栈组件名称。
        2
        <node-label-1> 替换为添加到节点的标签。
        3
        可选:指定附加标签。如果您指定了额外的标签,则组件的 pod 仅调度到包含所有指定标签的节点上。
        注意

        如果在配置 nodeSelector 约束后监控组件仍然处于 Pending 状态,请检查 Pod 事件中与污点和容限相关的错误。

  3. 保存文件以使改变生效。新配置中指定的组件会自动移到新节点上。

    注意

    除非集群管理员为用户定义的项目启用了监控,否则应用到 user-workload-monitoring-config ConfigMap 的配置不会被激活。

    警告

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

其他资源