Taint 和 toleration

Node 亲和性,根据之前的描述,是 pod 的一个属性,将其 吸引 到一个 node 集上(以倾向性或硬性要求的形式)。Taint 则刚好相反 – 它们允许一个 node 排斥 一些 pod。

Taint 和 toleration 一起工作,以确保 pod 不会被调度到不适当的 node 上。如果一个或多个 taint 应用于一个 node,这表示该节点不应该接受任何不能容忍 taint 的 pod。 Toleration 应用到 pod 上,则表示允许(但不要求)pod 调度到具有匹配 taint 的 node 上。

您可以通过使用 kubectl taint 命令来给 node 添加一个 taint。例如,

kubectl taint nodes node1 key=value:NoSchedule

为pod添加toleration

tolerations: 
- key: "key"
  operator: "Equal"
  value: "value"
  effect: "NoSchedule"
----------------------
tolerations: 
- key: key
  operator: Exists
  value: value
  effect: NoSchedule

最佳实践

  • 专有node(指定pod运行)
    • 添加taint(NoSchedule)
    • 为pod添加toleration
  • 具有特殊硬件的 node
    • 添加taint(PreferNoSchedule)
    • 为pod添加toleration

符合taint则立即被驱逐 发生改变后tolerationSeconds 指定则在过期后驱逐,不添加则不驱逐

pod默认有以下toleration:

  • node.alpha.kubernetes.io/notReady tolerationSeconds=300
  • node.alpha.kubernetes.io/unreachable tolerationSeconds=300
  • statefulset 会自动添加node.alpha.kubernetes.io/notReady node.alpha.kubernetes.io/unreachable

results matching ""

    No results matching ""