8.8. 使用容忍度来控制集群日志记录 Pod 放置

您可以使用污点和容忍度来确保集群日志记录 Pod 在特定节点上运行,并确保其他工作负载不在这些节点上运行。

污点和容忍度是简单的 key:value 对。节点上的污点指示节点排斥所有不容许该污点的 Pod。

key 是最长为 253 个字符的任意字符串,value 则是最长为 63 个字符的任意字符串。字符串必须以字母或数字开头,并且可以包含字母、数字、连字符、句点和下划线。

具有容忍度的集群日志记录 CR 的示例

apiVersion: "logging.openshift.io/v1"
kind: "ClusterLogging"
metadata:
  name: "instance"
  namespace: openshift-logging
spec:
  managementState: "Managed"
  logStore:
    type: "elasticsearch"
    elasticsearch:
      nodeCount: 1
      tolerations: 1
      - key: "logging"
        operator: "Exists"
        effect: "NoExecute"
        tolerationSeconds: 6000
      resources:
        limits:
          memory: 8Gi
        requests:
          cpu: 100m
          memory: 1Gi
      storage: {}
      redundancyPolicy: "ZeroRedundancy"
  visualization:
    type: "kibana"
    kibana:
      tolerations: 2
      - key: "logging"
        operator: "Exists"
        effect: "NoExecute"
        tolerationSeconds: 6000
      resources:
        limits:
          memory: 2Gi
        requests:
          cpu: 100m
          memory: 1Gi
      replicas: 1
  curation:
    type: "curator"
    curator:
      tolerations: 3
      - key: "logging"
        operator: "Exists"
        effect: "NoExecute"
        tolerationSeconds: 6000
      resources:
        limits:
          memory: 200Mi
        requests:
          cpu: 100m
          memory: 100Mi
      schedule: "*/5 * * * *"
  collection:
    logs:
      type: "fluentd"
      fluentd:
        tolerations: 4
        - key: "logging"
          operator: "Exists"
          effect: "NoExecute"
          tolerationSeconds: 6000
        resources:
          limits:
            memory: 2Gi
          requests:
            cpu: 100m
            memory: 1Gi

1
此容忍度添加到 Elasticsearch Pod。
2
此容忍度添加到 Kibana Pod。
3
此容忍度添加到 Curator Pod。
4
此容忍度添加到日志记录收集器 Pod。

8.8.1. 使用容忍度来控制 Elasticsearch Pod 放置

您可以通过在 Pod 上使用容忍度来控制 Elasticsearch Pod 在哪些节点上运行,并防止其他工作负载使用这些节点。

您可以通过集群日志记录自定义资源 (CR) 将容忍度应用到 Elasticsearch Pod,并通过节点规格将污点应用到节点。节点上的污点是一个 key:value 对,它指示节点排斥所有不容许该污点的 Pod。通过使用不在其他 Pod 上的特定 key:value 对,可以确保仅 Elasticseach Pod 能够在该节点上运行。

默认情况下,Elasticsearch Pod 具有以下容忍度:

tolerations:
- effect: "NoExecute"
  key: "node.kubernetes.io/disk-pressure"
  operator: "Exists"

先决条件

  • 必须安装 Cluster Logging 和 Elasticsearch。

流程

  1. 使用以下命令,将污点添加到要在其上调度集群日志记录 Pod 的节点:

    $ oc adm taint nodes <node-name> <key>=<value>:<effect>

    例如:

    $ oc adm taint nodes node1 elasticsearch=node:NoExecute

    本例在 node1 上放置一个键为 elasticsearch 且值为 node 的污点,污点效果是 NoExecute。具有 NoExecute 效果的节点仅调度与污点匹配的 Pod,并删除不匹配的现有 Pod。

  2. 编辑集群日志记录自定义资源 (CR) 的 logstore 部分,以配置 Elasticsearch Pod 的容忍度:

      logStore:
        type: "elasticsearch"
        elasticsearch:
          nodeCount: 1
          tolerations:
          - key: "elasticsearch"  1
            operator: "Exists"  2
            effect: "NoExecute"  3
            tolerationSeconds: 6000  4
    1
    指定添加到节点的键。
    2
    指定 Exists operator 需要节点上有一个带有键为 elasticsearch 的污点。
    3
    指定 NoExecute 效果。
    4
    (可选)指定 tolerationSeconds 参数,以设置 Pod 在被逐出前可以保持绑定到节点的时长。

此容忍度与 oc adm taint 命令创建的污点匹配。具有此容忍度的 Pod 可以调度到 node1 上。

8.8.2. 使用容忍度(toleration)来控制 Kibana Pod 放置

您可以通过在 Pod 上使用容限(toleration)来控制 Kibana Pod 在哪些节点上运行,并防止其他工作负载使用这些节点。

您可以通过集群日志记录自定义资源 (CR) 将容限应用到 Kibana Pod,并通过节点规格将污点(taint)应用到节点。节点上的污点是一个 key:value 对,它指示节点排斥所有不容许该污点的 Pod。通过使用没有在其他 Pod 上使用的特定 key:value 对,可以确保仅 Kibana Pod 能够在该节点上运行。

先决条件

  • 必须安装 Cluster Logging 和 Elasticsearch。

流程

  1. 使用以下命令,将污点添加到要在其上调度 Kibana Pod 的节点:

    $ oc adm taint nodes <node-name> <key>=<value>:<effect>

    例如:

    $ oc adm taint nodes node1 kibana=node:NoExecute

    本例在 node1 上放置一个键为 kibana 且值为 node 的污点,污点效果是 NoExecute。您必须使用 NoExecute 污点设置。NoExecute 仅调度与污点匹配的 Pod,并删除不匹配的现有 Pod。

  2. 编辑集群日志记录自定义资源 (CR) 的 visualization 部分,以配置 Kibana Pod 的容忍度:

      visualization:
        type: "kibana"
        kibana:
          tolerations:
          - key: "kibana"  1
            operator: "Exists"  2
            effect: "NoExecute"  3
            tolerationSeconds: 6000 4
    1
    指定添加到节点的键。
    2
    指定 Exists 运算符,以要求匹配 key/value/effect 参数。
    3
    指定 NoExecute 效果。
    4
    (可选)指定 tolerationSeconds 参数,以设置 Pod 在被逐出前可以保持绑定到节点的时长。

此容忍度与 oc adm taint 命令创建的污点匹配。具有此容限的 Pod 能够调度到 node1 上。

8.8.3. 使用容忍度来控制 Curator Pod 放置

您可以通过在 Pod 上使用容忍度来控制 Curator Pod 在哪些节点上运行,并防止其他工作负载使用这些节点。

您可以通过集群日志记录自定义资源 (CR) 将容忍度应用到 Curator Pod,并通过节点规格将污点应用到节点。节点上的污点是一个 key:value 对,它指示节点排斥所有不容许该污点的 Pod。通过使用没有在其他 Pod 上使用的特定 key:value 对,可以确保仅 Curator Pod 能够在该节点上运行。

先决条件

  • 必须安装 Cluster Logging 和 Elasticsearch。

流程

  1. 使用以下命令,将污点添加到要在其上调度 Curator Pod 的节点:

    $ oc adm taint nodes <node-name> <key>=<value>:<effect>

    例如:

    $ oc adm taint nodes node1 curator=node:NoExecute

    本例在 node1 上放置一个键为 curator 且值为 node 的污点,污点效果是 NoExecute。您必须使用 NoExecute 污点设置。NoExecute 仅调度与污点匹配的 Pod,并删除不匹配的现有 Pod。

  2. 编辑集群日志记录自定义资源 (CR) 的 curation 部分,以配置 Curator Pod 的容忍度:

      curation:
        type: "curator"
        curator:
          tolerations:
          - key: "curator"  1
            operator: "Exists"  2
            effect: "NoExecute"  3
            tolerationSeconds: 6000  4
    1
    指定添加到节点的键。
    2
    指定 Exists 运算符,以要求匹配 key/value/effect 参数。
    3
    指定 NoExecute 效果。
    4
    (可选)指定 tolerationSeconds 参数,以设置 Pod 在被逐出前可以保持绑定到节点的时长。

此容忍度与 oc adm taint 命令创建的污点匹配。具有此容限的 Pod 能够调度到 node1 上。

8.8.4. 使用容忍度来控制日志收集器 Pod 放置

您可以通过在 Pod 上使用容忍度来确保日志记录收集器 Pod 在哪些节点上运行,并防止其他工作负载使用这些节点。

您可以通过集群日志记录自定义资源 (CR) 将容忍度应用到日志记录收集器 Pod,并通过节点规格将污点应用到节点。您可以使用污点和容限来确保 Pod 不会因为内存和 CPU 问题而被驱除。

默认情况下,日志记录收集器 Pod 具有以下容忍度:

tolerations:
- key: "node-role.kubernetes.io/master"
  operator: "Exists"
  effect: "NoExecute"

先决条件

  • 必须安装 Cluster Logging 和 Elasticsearch。

流程

  1. 使用以下命令,将污点添加到要在其上调度日志记录收集器 Pod 的节点:

    $ oc adm taint nodes <node-name> <key>=<value>:<effect>

    例如:

    $ oc adm taint nodes node1 collector=node:NoExecute

    本例在 node1 上放置一个键为 collector 且值为 node 的污点,污点效果是 NoExecute。您必须使用 NoExecute 污点设置。NoExecute 仅调度与污点匹配的 Pod,并删除不匹配的现有 Pod。

  2. 编辑集群日志记录自定义资源 (CR) 的 collection 部分,以配置日志记录收集器 Pod 的容忍度:

      collection:
        logs:
          type: "fluentd"
          rsyslog:
            tolerations:
            - key: "collector"  1
              operator: "Exists"  2
              effect: "NoExecute"  3
              tolerationSeconds: 6000  4
    1
    指定添加到节点的键。
    2
    指定 Exists 运算符,以要求匹配 key/value/effect 参数。
    3
    指定 NoExecute 效果。
    4
    (可选)指定 tolerationSeconds 参数,以设置 Pod 在被逐出前可以保持绑定到节点的时长。

此容忍度与 oc adm taint 命令创建的污点匹配。具有此容限的 Pod 能够调度到 node1 上。

8.8.5. 其他资源

如需有关污点和容忍度的更多信息,请参见使用节点污点控制 Pod 位置