2

我们有一个 Kubernetes 集群。

现在我们想用 GPU 节点来扩展它(这将是 Kubernetes 集群中唯一拥有 GPU 的节点)。

我们希望避免 Kubernetes 在这些节点上调度 Pod,除非它们需要 GPU。

并非我们所有的管道都可以使用 GPU。绝大多数仍然只是 CPU 密集型。

带有 GPU 的服务器可能非常昂贵(例如,Nvidia DGX 每台服务器可能高达 150 美元/千美元)。

如果我们只是将 DGX 节点添加到 Kubernetes 集群,那么 Kubernetes 也会在那里调度非 GPU 工作负载,这会浪费资源(例如,稍后安排的其他作业确实需要 GPU,那里可能有其他非 GPU 资源在那里像 CPU 和内存一样耗尽,所以他们必须等待非 GPU 作业/容器完成)。

是否有一种方法可以在 Kubernetes 中自定义 GPU 资源调度,以便仅在那些需要 GPU 的昂贵节点上调度 Pod?如果他们不这样做,他们可能不得不等待其他非 GPU 资源的可用性,例如非 GPU 服务器上的 CPU 和内存......

谢谢。

4

2 回答 2

1

您可以为此使用标签和标签选择器。 kubernates 文档

更新:示例

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
于 2018-12-19T21:21:06.807 回答
1

为您的节点使用标签和标签选择器是正确的。但是你需要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-19T22:03:50.253 回答