7.7. 使用容忍度来控制 OpenShift Logging pod 放置
您可以使用污点和容限来确保 logging 子系统 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: 3
tolerations: 1
- key: "logging"
operator: "Exists"
effect: "NoExecute"
tolerationSeconds: 6000
resources:
limits:
memory: 16Gi
requests:
cpu: 200m
memory: 16Gi
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
collection:
logs:
type: "fluentd"
fluentd:
tolerations: 3
- key: "logging"
operator: "Exists"
effect: "NoExecute"
tolerationSeconds: 6000
resources:
limits:
memory: 2Gi
requests:
cpu: 100m
memory: 1Gi
7.7.1. 使用容忍度来控制日志存储 pod 放置
您可以通过在 pod 上使用容忍度来控制日志存储 pod 在哪些节点上运行,并防止其他工作负载使用这些节点。
您可以通过 ClusterLogging 自定义资源(CR)将容限应用到日志存储 pod,并通过节点规格将污点应用到节点。节点上的污点是一个 key:value 对,它指示节点排斥所有不容许该污点的 pod。通过使用不在其他 pod 上的特定 key:value 对,可以确保仅日志存储 pod 能够在该节点上运行。
默认情况下,日志存储 pod 具有以下容忍度:
tolerations: - effect: "NoExecute" key: "node.kubernetes.io/disk-pressure" operator: "Exists"
先决条件
- 必须安装 Red Hat OpenShift Logging 和 Elasticsearch Operator。
流程
使用以下命令,将污点添加到要在其上调度 OpenShift Logging 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。编辑
ClusterLoggingCR 的logstore部分,以配置 Elasticsearch Pod 的容忍度:logStore: type: "elasticsearch" elasticsearch: nodeCount: 1 tolerations: - key: "elasticsearch" 1 operator: "Exists" 2 effect: "NoExecute" 3 tolerationSeconds: 6000 4
此容忍度与 oc adm taint 命令创建的污点匹配。具有此容忍度的 pod 可以调度到 node1 上。
7.7.2. 使用容忍度来控制日志可视化 pod 放置
您可以通过在 pod 上使用容忍度来控制 Curator pod 在哪些节点上运行,并防止其他工作负载使用这些节点。
您可以通过 ClusterLogging 自定义资源(CR)将容忍度应用到日志视觉化 pod,并通过节点规格将污点应用到节点。节点上的污点是一个 key:value 对,它指示节点排斥所有不容许该污点的 pod。通过使用没有在其他 Pod 上使用的特定 key:value 对,可以确保仅 Kibana Pod 能够在该节点上运行。
先决条件
- 必须安装 Red Hat OpenShift Logging 和 Elasticsearch Operator。
流程
使用以下命令,将污点添加到要在其上调度日志可视化 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。编辑
ClusterLoggingCR 的visualization部分,以配置 Kibana pod 的容忍度:visualization: type: "kibana" kibana: tolerations: - key: "kibana" 1 operator: "Exists" 2 effect: "NoExecute" 3 tolerationSeconds: 6000 4
此容忍度与 oc adm taint 命令创建的污点匹配。具有此容限的 pod 可以调度到 node1 上。
7.7.3. 使用容忍度来控制日志收集器 pod 放置
您可以通过在 pod 上使用容忍度来确保日志记录收集器 pod 在哪些节点上运行,并防止其他工作负载使用这些节点。
您可以通过 ClusterLogging 自定义资源(CR)将容忍度应用到日志记录收集器 pod,并通过节点规格将污点应用到节点。您可以使用污点和容限来确保 pod 不会因为内存和 CPU 问题而被驱除。
默认情况下,日志记录收集器 pod 具有以下容忍度:
tolerations: - key: "node-role.kubernetes.io/master" operator: "Exists" effect: "NoExecute"
先决条件
- 必须安装 Red Hat OpenShift Logging 和 Elasticsearch Operator。
流程
使用以下命令,将污点添加到要在其上调度日志记录收集器 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。编辑
ClusterLogging自定义资源(CR)的collection小节,以配置日志记录收集器 Pod 的容忍度:collection: logs: type: "fluentd" fluentd: tolerations: - key: "collector" 1 operator: "Exists" 2 effect: "NoExecute" 3 tolerationSeconds: 6000 4
此容忍度与 oc adm taint 命令创建的污点匹配。具有此容限的 pod 可以调度到 node1 上。