3

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

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

nodeSelector:  
  app: node1  
  app: node2  

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

注意:node1并且node2是节点的标签。

4

4 回答 4

7

更好的方法是使用这样的东西:

  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: kubernetes.io/hostname
            operator: In
            values:
            - node1
            - node2
于 2018-12-30T08:01:20.587 回答
5

nodeSelectoron aPodSpec只是一个(而不是对象中使用map[string]string的更具特色的NodeSelector类型NodeAffinity)。这意味着键“app”只能有一个值,并且最终被覆盖为“node2”。

您可以通过应用一个公共标签(例如scheduling-group: foo)来完成 node1 和 node2 之间的调度,然后让您的 replicationController 将该标签用作nodeSelector.

于 2016-05-24T16:28:09.063 回答
1

是的你可以。

如果您希望将 Pod 调度到 node1 或 node2,您可以使用相同的标签(例如,app=node)标记两个节点,然后添加app=node为您的nodeSelector. 您可以根据需要添加任意数量的标签,但就像 CJ 提到的那样,nodeSelector它是一个具有键值对的映射,因此它不能具有具有不同值的相同键。

这些 pod 可以安排在任何满足这一要求的节点上nodeSelector

有关更多信息,请阅读将 Pod 分配给节点。请注意,nodeAffinity您可能还想尝试一个名为的新功能。

于 2016-05-24T16:35:53.593 回答
1

No 不能对 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}

如果可以是一条线,那就更容易操作了。

于 2018-03-18T11:55:49.233 回答