[英]One pod/job per kubernetes node
我想定期安排 kube.netes 作业(使用不同的图像)
这些作业需要在支持 GPU 的节点上运行(1 GPU 设备)
目前,如果我同时创建两个作业——pod 将被安排在同一个节点上——而只有一个 pod 可以访问 GPU 设备
有没有一种方法可以配置节点/pods,以便调度程序只为每个节点放置一个 pod,一旦完成就放置下一个作业?
您可以按照此处文档中的描述设置 Pod 间反亲和性。
Pod 间亲和力和反亲和力规则采取的形式是“如果 X 已经在运行一个或多个满足规则 Y 的 Pod,则此 Pod 应该(或者,在反亲和力的情况下,不应该)在 X 中运行”,其中 X 是拓扑域,如节点、机架、云提供商区域或区域等,Y 是 Kubernetes 试图满足的规则。
与node affinity类似的还有Pod affinity和anti-affinity两种类型,如下:
- requiredDuringSchedulingIgnoredDuringExecution
- preferredDuringSchedulingIgnoredDuringExecution
考虑以下 Pod 规范:
apiVersion: v1 kind: Pod metadata: name: with-pod-affinity spec: affinity: podAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchExpressions: - key: security operator: In values: - S1 topologyKey: topology.kubernetes.io/zone podAntiAffinity: preferredDuringSchedulingIgnoredDuringExecution: - weight: 100 podAffinityTerm: labelSelector: matchExpressions: - key: security operator: In values: - S2 topologyKey: topology.kubernetes.io/zone containers: - name: with-pod-affinity image: registry.k8s.io/pause:2.0
由于您更喜欢使用一种简单的方法,因此您可以使用 nodeSelector 使用节点标签选择所需的节点,并使用 queueSort 一个接一个地调度 pod。 简而言之,您正在定义具有特定标签的 Pod,以在优先级基础上在特定节点上运行。 本文档让您更好地理解实现所需的功能。
我最终使用了@Calum Halpin 的建议和节点的扩展资源
https://kube.netes.io/docs/tasks/administer-cluster/extended-resource-node/
curl --header "Content-Type: application/json-patch+json" \
--request PATCH \
--data '[{"op": "add", "path": "/status/capacity/gpu", "value": "1"}]' \
http://localhost:8001/api/v1/nodes/<node-name>/status
resources:
requests:
gpu: 1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.