3.7. 使用容忍度来控制集群日志记录 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 collection: logs: type: "fluentd" fluentd: tolerations: 3 - key: "logging" operator: "Exists" effect: "NoExecute" tolerationSeconds: 6000 resources: limits: memory: 2Gi requests: cpu: 100m memory: 1Gi
3.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"
先决条件
- 必须安装 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
上。