我们可以在kubernetes中的单个nodeSelector中提到多个节点标签

时间:2016-05-24 13:48:58

标签: docker kubernetes kubernetes-pod

我想在两个特定节点中安排10个pod(我们的kube集群中共有15个节点)。

所以在复制控制器文件中我提到了nodeSelector中的两个值 如下。

nodeSelector:  
  app: node1  
  app: node2  

问题在于,它一直只占用node2。无论我提到什么序列,它只占用最后一个节点。

注意:node1node2是节点的标签。

4 个答案:

答案 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}

如果它可以是一行,则更容易操作。