带有容差的Pod计划排入没有污点的节点

时间:2019-03-29 08:40:11

标签: kubernetes

我已使用以下设置设置了广告连播:

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

吊舱已调度到该节点中:

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>

请帮我理解原因。 如果我没有记错的话,必须将容忍度为“ role_va”的豆荚安排为仅到有此异味的节点上。 在我的情况下,该节点没有此异味,但无论如何都将吊舱调度到该节点中。为什么?

2 个答案:

答案 0 :(得分:1)

正如 Malgorzata 所说,Taints 和 Tolerations 仅对接受某种 Pod 的节点有用。例如。具有“蓝色”污点的节点只能接受具有“蓝色”容忍度的 pod。但是,这并不意味着具有“蓝色”容忍度的 pod 只会在具有“蓝色”污点的节点中结束。 Kube-Scheduler 可能会选择任何其他没有污点的节点(因此对 pod 类型没有偏好)。

以下是实现您的要求的两种可能方法。

  1. 应用带有污点的节点和具有该容忍度的 pod。并且还为 pod 声明节点亲和性,这是 pod 在特定节点上获取调度的偏好。这两个配置一起将确保您的 pod 将被安排在特定节点上。并且该节点将只拥有具有特定容忍度的 Pod。

  2. 如果您有三个节点,请在其中一个节点上应用“蓝色”污点,在其余节点上应用“红色”污点。这将迫使具有“蓝色”容忍度的 pod 只有一种选择才能继续使用具有“蓝色”污点的节点。因为其他节点有“红色”污点,而 Pod 没有“红色”容忍度。

答案 1 :(得分:0)

您的问题的答案包含在Kubernetes文档的{strong>污染和容忍定义中:Taints and Tolerations

  

Kubernetes处理多个污点和容差的方式就像过滤器:从节点的所有污点开始,然后忽略吊舱具有匹配容差的污点;其余不可忽视的污渍对豆荚有明显的作用

这意味着,如果节点没有有污点,它将接受每个吊舱,无论将在其中定义什么公差。