我们有一个Kubernetes集群。
现在我们想用GPU节点来扩展它(因此这将是Kubernetes集群中唯一拥有GPU的节点)。
我们希望避免Kubernetes在这些节点上调度pod,除非它们需要GPU。
并不是所有的管道都可以使用GPU。绝大多数仍然只占用大量CPU资源。
配备GPU的服务器可能非常昂贵(例如,Nvidia DGX每台服务器可能高达150美元/k)。
如果我们只是将DGX节点添加到Kubernetes集群中,那么Kubernetes也会在那里调度非GPU工作负载,这将是对资源的浪费(例如,其他调度较晚并且确实需要GPU的作业,可能会在那里耗尽其他非GPU资源,如CPU和内存,因此它们将不得不等待非GPU作业/容器完成)。
是否有办法在Kubernetes中自定义GPU资源调度,以便仅在那些需要GPU的昂贵节点上调度pods?如果他们不这样做,他们可能不得不等待其他非GPU资源的可用性,比如非GPU服务器上的CPU和内存...
谢谢。
发布于 2018-12-20 06:03:50
对节点使用标签和标签选择器是正确的。但是你需要在你的pod上使用NodeAffinity。
如下所示:
apiVersion: v1
kind: Pod
metadata:
name: run-with-gpu
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/node-type
operator: In
values:
- gpu
containers:
- name: your-gpu-workload
image: mygpuimage另外,将标签附加到GPU节点:
$ kubectl label nodes <node-name> kubernetes.io/node-type=gpu发布于 2018-12-20 05:21:07
为此,您可以使用标签和标签选择器。kubernates docs
更新:示例
apiVersion: v1
kind: Pod
metadata:
name: with-gpu-antiAffinity
spec:
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
labelSelector:
matchExpressions:
- key: resources
operator: In
values:
- cpu-onlyhttps://stackoverflow.com/questions/53859237
复制相似问题