处理污点和容忍度

在 Kubernetes 节点上添加污点会导致 pod 排斥在该节点上运行。

除非 pod 对该节点的污点具有容忍度(toleration),否则 Pod 将在集群中的其他节点上运行。

污点和容忍度可以与 PodSpec 中的 nodeSelector 字段一起使用,从而实现相反的污点效果。

nodeSelector 可以使 pod 被吸引到某类节点。

两者都能让 pod 选择在哪个节点上运行。

Rancher 日志堆栈中的默认实现

默认情况下,Rancher 使用 cattle.io/os=linux 来将污点应用到所有 Linux 节点,而不影响 Windows 节点。 日志堆栈 pod 具有针对此污点的容忍度,因此它们能够运行在 Linux 节点上。 此外,大多数日志堆栈 pod 仅在 Linux 上运行,并添加了 nodeSelector 以确保它们在 Linux 节点上运行。

此示例 Pod YAML 文件显示了与容忍度一起使用的 nodeSelector:

  1. apiVersion: v1
  2. kind: Pod
  3. # metadata...
  4. spec:
  5. # containers...
  6. tolerations:
  7. - key: cattle.io/os
  8. operator: "Equal"
  9. value: "linux"
  10. effect: NoSchedule
  11. nodeSelector:
  12. kubernetes.io/os: linux

在上面的示例中,我们确保了的 pod 仅在 Linux 节点上运行,并且为所有 Linux 节点上的污点添加了容忍度

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

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

如果要添加你自己的 nodeSelector 设置,或者要为其他污点添加 容忍度,你可以将以下内容传递给 Chart 的值:

  1. tolerations:
  2. # insert tolerations...
  3. nodeSelector:
  4. # insert nodeSelector...

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

但是,如果你想fluentbit 容器添加容忍度,你可以将以下内容添加到 Chart 的值中:

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