本文档采用自动化机器翻译技术翻译。 尽管我们力求提供准确的译文,但不对翻译内容的完整性、准确性或可靠性作出任何保证。 若出现任何内容不一致情况,请以原始 英文 版本为准,且原始英文版本为权威文本。

处理污点和容忍

对 Kubernetes 节点进行“污点”处理会导致在该节点上运行的 Pods 被排斥。

除非 Pods 对该节点的污点具有 toleration,否则它们将在集群中的其他节点上运行。

污点与容忍 可以与 nodeSelector 字段 一起使用,这使得 PodSpec 能够实现污点的 相反 效果。

使用 nodeSelector 可以使 Pods 对某些节点产生亲和性。

两者都为 Pod 运行在哪些节点上提供了选择。

Rancher 日志堆栈中的默认实现

默认情况下,Rancher 会使用 cattle.io/os=linux 给所有 Linux 节点添加污点,而不会对 Windows 节点进行污点处理。 日志堆栈 Pods 对该污点具有 tolerations,这使它们能够在 Linux 节点上运行。 此外,大多数日志堆栈 Pods 仅在 Linux 上运行,并且添加了 nodeSelector 以确保它们在 Linux 节点上运行。

此示例 Pod YAML 文件展示了如何将 nodeSelector 与容忍一起使用:

apiVersion: v1
kind: Pod
# metadata...
spec:
  # containers...
  tolerations:
    - key: cattle.io/os
      operator: "Equal"
      value: "linux"
      effect: NoSchedule
  nodeSelector:
    kubernetes.io/os: linux

在上述示例中,我们确保 Pod 仅在 Linux 节点上运行,并为所有 Linux 节点上的污点添加了 toleration

您可以对 Rancher 现有的污点或您自己的自定义污点执行相同操作。

为自定义污点添加 NodeSelector 设置和容忍度

如果您想添加自己的 nodeSelector 设置,或者想为额外的污点添加 tolerations,您可以将以下内容传递给图表的值。

tolerations:
  # insert tolerations...
nodeSelector:
  # insert nodeSelector...

这些值将同时添加设置到 fluentdfluentbitlogging-operator 容器。 本质上,这些是日志堆栈中所有 Pods 的全局设置。

但是,如果您想为 fluentbit 容器添加容忍,您可以将以下内容添加到图表的值中。

fluentbit_tolerations:
  # insert tolerations list for fluentbit containers only...