kubernetes 调度昂贵的资源
kubernetes scheduling for expensive resources
我们有一个 Kubernetes 集群。
现在我们想用 GPU 节点扩展它(这样这将是 Kubernetes 集群中唯一拥有 GPU 的节点)。
我们希望避免 Kubernetes 在这些节点上安排 pods,除非它们需要 GPU。
并非我们所有的管道都可以使用 GPU。绝大多数仍然只是 CPU-heavy。
带有 GPU 的服务器可能非常昂贵(例如,Nvidia DGX 可能高达每台服务器 150 美元/k)。
如果我们只是将 DGX 节点添加到 Kubernetes 集群,那么 Kubernetes 也会在那里调度非 GPU 工作负载,这将是一种资源浪费(例如,其他需要 GPU 的稍后调度的作业,可能有其他那里的非 GPU 资源已经耗尽,例如 CPU 和内存,因此他们必须等待非 GPU jobs/containers 完成。
是否有一种方法可以在 Kubernetes 中自定义 GPU 资源调度,以便它只在那些需要 GPU 的昂贵节点上调度 pods?如果他们不这样做,他们可能不得不等待其他非 GPU 资源的可用性,例如 CPU 和非 GPU 服务器上的内存...
谢谢。
您可以为此使用标签和标签选择器。
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-only
为您的节点使用标签和标签选择器是正确的。但是你需要在 pods.
上使用 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
我们有一个 Kubernetes 集群。
现在我们想用 GPU 节点扩展它(这样这将是 Kubernetes 集群中唯一拥有 GPU 的节点)。
我们希望避免 Kubernetes 在这些节点上安排 pods,除非它们需要 GPU。
并非我们所有的管道都可以使用 GPU。绝大多数仍然只是 CPU-heavy。
带有 GPU 的服务器可能非常昂贵(例如,Nvidia DGX 可能高达每台服务器 150 美元/k)。
如果我们只是将 DGX 节点添加到 Kubernetes 集群,那么 Kubernetes 也会在那里调度非 GPU 工作负载,这将是一种资源浪费(例如,其他需要 GPU 的稍后调度的作业,可能有其他那里的非 GPU 资源已经耗尽,例如 CPU 和内存,因此他们必须等待非 GPU jobs/containers 完成。
是否有一种方法可以在 Kubernetes 中自定义 GPU 资源调度,以便它只在那些需要 GPU 的昂贵节点上调度 pods?如果他们不这样做,他们可能不得不等待其他非 GPU 资源的可用性,例如 CPU 和非 GPU 服务器上的内存...
谢谢。
您可以为此使用标签和标签选择器。 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-only
为您的节点使用标签和标签选择器是正确的。但是你需要在 pods.
上使用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