我想在两个特定节点中安排10个pod(我们的kube集群中共有15个节点)。
所以在复制控制器文件中我提到了nodeSelector中的两个值 如下。
nodeSelector:
app: node1
app: node2
问题在于,它一直只占用node2。无论我提到什么序列,它只占用最后一个节点。
注意:node1
和node2
是节点的标签。
答案 0 :(得分:2)
nodeSelector
上的PodSpec
只是map[string]string
(而不是NodeSelector
对象中使用的更具特色的NodeAffinity
类型。)意味着关键" app"只能有一个值,最终会被覆盖为" node2"。
您可以通过应用公共标签(例如scheduling-group: foo
)来完成node1和node2之间的调度,然后让您的replicationController将该标签用作nodeSelector
。
答案 1 :(得分:2)
是的,你可以。
如果您希望将pod安排到node1或node2,则可以使用相同的标签标记两个节点(例如,app=node
),然后添加app=node
作为您的nodeSelector
。您可以根据需要添加任意数量的标签,但与CJ提到的一样,nodeSelector
是一个包含键和值对的地图,因此它不能具有不同值的相同键。
可以在满足nodeSelector
的任何节点上安排pod。
有关详细信息,请阅读Assigning Pods to Nodes。请注意,您可能还想尝试一项名为nodeAffinity
的新功能。
答案 2 :(得分:1)
更好的方法是使用类似这样的东西:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- node1
- node2
答案 3 :(得分:0)
否则不能在YAML词典中为键/值对使用相同的键名。使用不同的键。要将pod安排到使用node:super或nodetype:duper:
标记的节点spec:
nodeSelector: { node: "super", nodetype: "duper" }
在YAML
martin:
name: Martin D'vloper
job: Developer
skill: Elite
与:
相同martin: {name: Martin D'vloper, job: Developer, skill: Elite}
如果它可以是一行,则更容易操作。