我的 Pod 具有以下设置:
Node-Selectors: <none>
Tolerations: node.kubernetes.io/memory-pressure:NoSchedule
node.kubernetes.io/not-ready:NoExecute for 300s
node.kubernetes.io/unreachable:NoExecute for 60s
role_va
Run Code Online (Sandbox Code Playgroud)
pod 被调度到这个节点:
Labels: balancer=true
beta.kubernetes.io/arch=amd64
beta.kubernetes.io/os=linux
cpu_avx2=true
cpu_avx512f=true
kubernetes.io/hostname=p20b-sr3-r5-k8s-node4
master=true
worker=true
Annotations: node.alpha.kubernetes.io/ttl=0
volumes.kubernetes.io/controller-managed-attach-detach=true
Taints: <none>
Run Code Online (Sandbox Code Playgroud)
请帮助我理解为什么。如果我没有记错的话,具有“role_va”容忍度的 Pod 必须仅调度到具有此污点的节点。在我的例子中,节点没有这种污点,但 pod 被调度到这个节点中。为什么?
正如 Malgorzata 所说,Taints 和 Tolerations 仅对接受某种 pod 的节点有用。例如,具有“蓝色”污点的节点只能接受具有“蓝色”容忍度的 Pod。然而,这并不意味着具有“蓝色”容忍度的 Pod 只会出现在具有“蓝色”污点的节点中。Kube-Scheduler 可以选择任何其他没有污点的节点(因此不偏好 pod 类型)。
以下是实现您的要求的两种可能的方法。
应用具有污点的节点和具有该容忍度的 pod。并且还声明 pod 的节点关联性,这是 pod 在特定节点上获取调度的偏好。这两个配置结合在一起将确保您的 Pod 能够在特定节点上进行调度。并且节点只会拥有具有特定容忍度的 Pod。
如果您有三个节点,请在其中一个节点上应用“蓝色”污点,并在其余节点上应用“红色”污点。这将迫使具有“蓝色”容忍度的 pod 只有一种选择,以进入具有“蓝色”污点的节点。因为其他节点有“红色”污点,而 pod 没有“红色”容忍度。
您的问题的答案包含在Kubernetes 文档中的污点和容忍定义中:Taints and Tolerations
\n\n\nKubernetes 处理多个污点和容忍度的方式就像一个过滤器:从所有节点\xe2\x80\x99s 污点开始,然后忽略 pod 具有匹配容忍度的污点;其余未被忽略的污点对 pod 具有指定的影响
\n
这意味着,如果节点没有污点,它将接受每个 Pod,无论其中定义了什么容忍度。
\n| 归档时间: |
|
| 查看次数: |
2386 次 |
| 最近记录: |