关于污点和容忍度

将一个 Kubernetes 节点标记为污点会导致 pods 排斥在该节点上运行。

除非 pods 对该节点的污点有容忍度,否则它们会在集群中的其他节点上运行。

污点和容忍度可以与PodSpec中的nodeSelector字段一起工作,它可以实现污点的相反效果。

使用 “nodeSelector “使 pod 对某些节点有亲和力。

两者都为 pod 运行的节点提供了选择。

Rancher 的日志堆栈中的默认实现

v2.5.8+

默认情况下,Rancher 用cattle.io/os=linux玷污所有 Linux 节点,而不玷污 Windows 节点。 日志堆栈 pod 对这种污点有toleration,这使得它们能够在 Linux 节点上运行。 此外,大多数日志堆栈 pod 只在 Linux 上运行,并添加了一个nodeSelector以确保它们在 Linux 节点上运行。

Rancher v2.5.8 之前

默认情况下,Rancher 用cattle.io/os=linux玷污所有 Linux 节点,而不玷污 Windows 节点。 日志堆栈 pod 对这种污点有toleration,这使得它们能够在 Linux 节点上运行。 此外,我们可以填充 “nodeSelector”,以确保我们的 pods 运行在 Linux 节点上。

这个 Pod YAML 文件的例子显示了一个 nodeSelector 与一个 toleration 的使用。

  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

Copy

在上面的例子中,我们确保我们的 pod 只在 Linux 节点上运行,我们为我们所有的 Linux 节点上的污点添加了一个toleration

你可以用 Rancher 现有的污点,或者你自己的自定义污点做同样的事情。

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

如果你想添加自己的nodeSelector设置,或者你想为额外的污点添加tolerations,你可以向 chart 的数值传递以下内容。

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

Copy

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

然而,如果你想只为fluentbit容器添加容忍度,你可以在图表的数值中添加以下内容。

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

Copy