首页 > 解决方案 > 当节点标签消失时,Kubernetes nodeSelector 不会删除 pod

问题描述

我有一个有 nodeSelector 的 statefulset:

  nodeSelector:
    app: licensed

当我用 分配节点时app: licensed,我可以看到 pod 已安排在特定节点上。

但是当我从节点中删除标签时,我没有看到 k8s 从该节点中删除 pod。我必须明确删除 pod。

它是 Kubernetes 的功能吗?或者我是否正确使用了 nodeSelector?

标签: kubernetes

解决方案


如果您只希望指定的东西在指定的节点上运行,那么您正在寻找的东西可能是污点和容忍。您使用的nodeSelector:用于调度决策,但未用于协调循环(如您所见)

通过 进行更细粒度的控制effect: NoSchedule,正如它暗示的那样,如果 Pod 不能容忍污点,它只会阻止 Pod 被调度,并且如果污点出现在节点上,effect: NoExecute这更接近您所要求的,并且 Pod 不容忍它,Pod 将被驱逐并且不会重新安排在任何此类受污染的节点上。现代版本的kubernetes允许通过它的另一端进行更细粒度的控制PreferNoScheduletolerationSeconds


推荐阅读