Kubernetes Tolerations - 为什么我们需要在 pod 上定义“效果”

Bug*_*y B 6 kubernetes

在定义污点和容忍度时,我们将污点定义如下:

kubectl taint nodes node1 key1=value1:NoSchedule
Run Code Online (Sandbox Code Playgroud)

现在,任何不具有如下定义的容忍度的 Pod 将不会被调度到 Node1 上。定义了容忍度的节点将被调度到该节点上。但是,为什么我们需要在 POD 上定义 NoSchedule 呢?它已经在节点上定义了。

tolerations:
- key: "key1"
  operator: "Equal"
  value: "value1"
  effect: "NoSchedule"
Run Code Online (Sandbox Code Playgroud)

如果出现以下情况,会产生什么影响:

  1. 节点效果为NoSchedule
kubectl taint nodes node1 key1=value1:NoSchedule
Run Code Online (Sandbox Code Playgroud)
  1. 但POD的容忍度是NoExecute
tolerations:
- key: "key1"
  operator: "Equal"
  value: "value1"
  effect: "NoExecute"
Run Code Online (Sandbox Code Playgroud)

注意:我知道它不仅试图匹配“污点值”,还尝试匹配“污点效果”。但是也有匹配“污点效应”的用例吗?

tolerations.effect (string) Effect 指示要匹配的污点效果。空意味着匹配所有污点效果。指定后,允许的值为 NoSchedule、PreferNoSchedule 和 NoExecute。

谢谢

goh*_*m'c 2

如果出现以下情况,会产生什么影响:

  1. 节点效果为NoSchedule

kubectl 污点节点 node1 key1=value1:NoSchedule

  1. 但POD的容忍度是NoExecute

Pod 不会被调度到它无法容忍的节点上,例如。您的示例 pod 不会被安排在受 污染的节点上,NoSchdule因为它只容忍NoExecute.

...use case for matching "taint effect"

不确定这里的意思是什么;但仅通过指定键和值就可以容忍具有任何效果的键。