7.9. 使用容忍度来控制集群日志记录 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
7.9.1. 使用容限来控制 Elasticsearch pod 放置
您可以通过在 pod 上使用容限来控制 Elasticsearch pod 在哪些节点上运行,并防止其他工作负载使用这些节点。
您可以通过 ClusterLogging
自定义资源(CR)将容限应用到 Elasticsearch pod,并通过节点规格将污点应用到节点。节点上的污点是一个 key:value
对,它指示节点排斥所有不容许该污点的 pod。通过使用不在其他 pod 上的特定 key:value
对,可以确保仅 Elasticsearch pod 能够在该节点上运行。
默认情况下,Elasticsearch pod 有以下容限:
tolerations: - effect: "NoExecute" key: "node.kubernetes.io/disk-pressure" operator: "Exists"
先决条件
- 必须安装 Cluster Logging 和 Elasticsearch。
流程
使用以下命令,将污点添加到要在其上调度集群日志记录 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。编辑
ClusterLogging
自定义资源(CR)的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.9.2. 使用容限(toleration)来控制 Kibana pod 放置
您可以通过在 pod 上使用容限(toleration)来控制 Kibana pod 在哪些节点上运行,并防止其他工作负载使用这些节点。
您可以通过 ClusterLogging
自定义资源(CR)将容限应用到 Kibana pod,并通过节点规格将污点应用到节点。节点上的污点是一个 key:value
对,它指示节点排斥所有不容许该污点的 pod。通过使用没有在其他 Pod 上使用的特定 key:value
对,可以确保仅 Kibana Pod 能够在该节点上运行。
先决条件
- 必须安装 Cluster Logging 和 Elasticsearch。
流程
使用以下命令,将污点添加到要在其上调度 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。编辑
ClusterLogging
自定义资源(CR)的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.9.3. 使用容忍度来控制 Curator Pod 放置
您可以通过在 Pod 上使用容忍度来控制 Curator Pod 在哪些节点上运行,并防止其他工作负载使用这些节点。
您可以通过 ClusterLogging
自定义资源(CR)将容限应用到 Curator Pod,并通过节点规格将污点应用到节点。节点上的污点是一个 key:value
对,它指示节点排斥所有不容许该污点的 Pod。通过使用没有在其他 Pod 上使用的特定 key:value
对,可以确保仅 Curator Pod 能够在该节点上运行。
先决条件
- 必须安装 Cluster Logging 和 Elasticsearch。
流程
使用以下命令,将污点添加到要在其上调度 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。编辑
ClusterLogging
自定义资源(CR)的curation
部分,以配置 Curator Pod 的容忍度:curation: type: "curator" curator: tolerations: - key: "curator" 1 operator: "Exists" 2 effect: "NoExecute" 3 tolerationSeconds: 6000 4
此容忍度与 oc adm taint
命令创建的污点匹配。具有此容限的 Pod 能够调度到 node1
上。
7.9.4. 使用容忍度来控制日志收集器 pod 放置
您可以通过在 pod 上使用容忍度来确保日志记录收集器 pod 在哪些节点上运行,并防止其他工作负载使用这些节点。
您可以通过 ClusterLogging
自定义资源(CR)将容忍度应用到日志记录收集器 pod,并通过节点规格将污点应用到节点。您可以使用污点和容限来确保 pod 不会因为内存和 CPU 问题而被驱除。
默认情况下,日志记录收集器 pod 具有以下容忍度:
tolerations: - key: "node-role.kubernetes.io/master" operator: "Exists" effect: "NoExecute"
先决条件
- 必须安装 Cluster Logging 和 Elasticsearch。
流程
使用以下命令,将污点添加到要在其上调度日志记录收集器 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" rsyslog: tolerations: - key: "collector" 1 operator: "Exists" 2 effect: "NoExecute" 3 tolerationSeconds: 6000 4
此容忍度与 oc adm taint
命令创建的污点匹配。具有此容限的 pod 可以调度到 node1
上。
7.9.5. 其他资源
如需有关污点和容忍度的更多信息,请参见使用节点污点控制 Pod 位置。