如何定义 kuberenets 节点以选择特定 pod 的唯一节点选择器



好吧,我们可以选择以下方法来选择Kubernetes调度特定Pods的位置:

  1. nodeSelector字段与节点标签匹配

Mine k8的环境共享系统,不同的团队可以在其中操作,并在幕后运行10个节点。每个团队都是独立的,他们只是在自己的命名空间上进行一些部署,并让Kubernetes决定应该运行哪个节点pod,

TeamA-NamespaceA-Scheduled on Node-1,3,7,4,8
TeamB-NamespaceB-Scheduled on Node-5,1,9,10,6,4,3
TeamC-NamespaceC-Scheduled on Node-1,2,3,4,5,6,7,8

我们想保留一些特定于我们团队的节点,基本上,在该命名空间上发生的任何部署都应该在特定节点上运行,是的,我可以为pod部署规范选择nodeSelector,例如

TeamD-NamespaceD-Scheduled on Node-5,6

我需要应用于其他命名空间的限制不应该是将pod调度到专用于命名空间(NamespaceD(的特定保留节点

您可以为此使用taintstolerations

基本上,您可以使用专用的团队名称taint您的节点。如果pod没有用于该tainttoleration,则不会在该节点上进行调度。

例如,team-d必须使用节点node-5node-6。然后可以将taint节点node-5node-6作为:

kubectl taint nodes node-5 node-6 team=team-d:NoSchedule

这将设置节点上的NoSchedule污点。意思是,如果一个吊舱不能容忍这种情况,它就会";不被安排";在这里

然后在部署中的pod模板中,您将添加以下内容:

tolerations:
- key: "team"
operator: "Equal"
value: "team-d"
effect: "NoSchedule"

这将仅使用于该部署的podtolerate成为node-5node-6上的taint,并且将允许在这些节点上进行调度。

这样,您不仅可以控制亲和性(pod应该去哪里(,还可以控制反亲和性(pods不应该去那里(。您可以在这里阅读更多关于taintstolerations的信息。

最新更新