如何配置特定的pod以在多节点kubernetes集群上运行,以便将POD的容器限制为节点的子集。
E.g。让我们说我有A,B,C三个节点运行mu kubernetes集群。
如何限制Pod仅在A& A上运行其容器B,而不是C?
答案 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