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节点,但是如果我这样做,将不会在其中安排任何吊舱。
这里是否有更好的方法来实现我不知道的目标?
答案 0 :(得分:1)
如果污染了第4个节点,则具有容差的第4个部署将部署在该节点上,而其他三个则不会部署。
答案 1 :(得分:0)
您可以在运行时使用admission controller将NodeSelector
动态添加到pod规范中,而不用修改现有的部署Yaml。您可以在mutating web-hook中编写任何自定义逻辑来满足您的用例。例如,您可以在新的部署规范中有一个标签/注释,并根据该标签/注释的存在可以动态添加一个NodeSelector
。
PodNodeSelector入网钩是一个很好的例子。