Kubernetes节点关联性-将Pod分配给特定节点?

时间:2020-05-21 13:20:07

标签: kubernetes nodeselector

k8s node affinity文档介绍了如何通过首先使用标签标记节点并使用nodeSelector来选择节点,从而将Pod部署到特定节点。

但是,我有一个用例,其中在集群中有40-50个部署,我想向集群中添加一个新节点,并将该节点设置为专用于这些部署/吊舱之一,而不会更改所有不影响部署的部署没有指定任何nodeSelector

例如,假设我有3个部署,未定义任何nodeSelector和3个工作节点。这意味着k8s决定了Pod的部署位置,并且可以将其部署在这3个节点之一中。现在,我必须创建第4个部署,并添加第4个服务器,并且我想将第4个部署专用于第4个服务器,并且还要确保k8不会将前3个部署调度到该第4个节点。在不经历所有这3个部署方案并应用nodeSelector筛选器而不部署在第4个节点的情况下,如何做到这一点? (可以在3个部署上执行此更改,但我说的是现实生活中的50个部署)

我唯一能想到的是taint节点,但是如果我这样做,将不会在其中安排任何吊舱。

这里是否有更好的方法来实现我不知道的目标?

2 个答案:

答案 0 :(得分:1)

如果污染了第4个节点,则具有容差的第4个部署将部署在该节点上,而其他三个则不会部署。

答案 1 :(得分:0)

您可以在运行时使用admission controllerNodeSelector动态添加到pod规范中,而不用修改现有的部署Yaml。您可以在mutating web-hook中编写任何自定义逻辑来满足您的用例。例如,您可以在新的部署规范中有一个标签/注释,并根据该标签/注释的存在可以动态添加一个NodeSelector

PodNodeSelector入网钩是一个很好的例子。