如何在kubernetes中指定pod到节点的亲缘关系

时间:2016-07-29 08:18:42

标签: kubernetes

如何配置特定的pod以在多节点kubernetes集群上运行,以便将POD的容器限制为节点的子集。

E.g。让我们说我有A,B,C三个节点运行mu kubernetes集群。

如何限制Pod仅在A& A上运行其容器B,而不是C?

3 个答案:

答案 0 :(得分:3)

您可以向要运行pod的节点添加标签,并将nodeSelector添加到pod配置。这个过程在这里描述:

http://kubernetes.io/docs/user-guide/node-selection/

所以基本上你想要

kubectl label nodes A node_type=foo
kubectl label nodes B node_type=foo

并且您希望在pod规范中使用此nodeSelector:

nodeSelector:
    node_type: foo

答案 1 :(得分:3)

首先,您需要向节点添加标签。你可以参考Nebril关于如何添加标签的答案。

然后,我建议您使用 节点关联 功能将pod限制为具有特定标签的节点。这是一个例子。

apiVersion: v1
kind: Pod
metadata:
  name: with-node-affinity
spec:
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: node_type
            operator: In
            values:
            - foo
  containers:
  - name: with-node-affinity
    image: gcr.io/google_containers/pause:2.0

nodeSelector 相比,亲和力/反亲和力功能极大地扩展了您可以表达的约束类型。

有关 节点关联 的更多详细信息,请参阅以下链接:https://kubernetes.io/docs/concepts/configuration/assign-pod-node/

答案 2 :(得分:2)

我无法对之前的回复发表评论,但我赞成完整的答案。 nodeSelector未严格执行并且依赖它可能会导致一些悲痛,包括Master无法满足请求以及来自Master上安排的pod的IO。在提供答案时,它可能仍然是唯一的选择,但在后来的版本中并非如此。

绝对使用 nodeAffinity nodeAntiAffinity with requiredDuringSchedulingIgnoredDuringExecution或preferredDuringSchedulingIgnoredDuringExecution

有关调度细读的更具表现力的过滤器:Assigning pods to nodes