好吧,我们可以选择以下方法来选择Kubernetes调度特定Pods的位置:
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
(的特定保留节点
您可以为此使用taints
和tolerations
。
基本上,您可以使用专用的团队名称taint
您的节点。如果pod没有用于该taint
的toleration
,则不会在该节点上进行调度。
例如,team-d
必须使用节点node-5
和node-6
。然后可以将taint
节点node-5
和node-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-5
和node-6
上的taint
,并且将允许在这些节点上进行调度。
这样,您不仅可以控制亲和性(pod应该去哪里(,还可以控制反亲和性(pods不应该去那里(。您可以在这里阅读更多关于taints
和tolerations
的信息。