我想在两个特定节点(我们的 kube 集群中总共 15 个节点)中安排 10 个 pod。
所以在复制控制器文件中,我提到了 nodeSelector 中的两个值,如下所示。
nodeSelector:
app: node1
app: node2
问题是它一直只占用node2。无论我提到什么序列,它只占用最后一个节点。
注意:node1
并且node2
是节点的标签。
我想在两个特定节点(我们的 kube 集群中总共 15 个节点)中安排 10 个 pod。
所以在复制控制器文件中,我提到了 nodeSelector 中的两个值,如下所示。
nodeSelector:
app: node1
app: node2
问题是它一直只占用node2。无论我提到什么序列,它只占用最后一个节点。
注意:node1
并且node2
是节点的标签。
更好的方法是使用这样的东西:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- node1
- node2
nodeSelector
on aPodSpec
只是一个(而不是对象中使用map[string]string
的更具特色的NodeSelector
类型NodeAffinity
)。这意味着键“app”只能有一个值,并且最终被覆盖为“node2”。
您可以通过应用一个公共标签(例如scheduling-group: foo
)来完成 node1 和 node2 之间的调度,然后让您的 replicationController 将该标签用作nodeSelector
.
是的你可以。
如果您希望将 Pod 调度到 node1 或 node2,您可以使用相同的标签(例如,app=node
)标记两个节点,然后添加app=node
为您的nodeSelector
. 您可以根据需要添加任意数量的标签,但就像 CJ 提到的那样,nodeSelector
它是一个具有键值对的映射,因此它不能具有具有不同值的相同键。
这些 pod 可以安排在任何满足这一要求的节点上nodeSelector
。
有关更多信息,请阅读将 Pod 分配给节点。请注意,nodeAffinity
您可能还想尝试一个名为的新功能。
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}
如果可以是一条线,那就更容易操作了。