代码之家  ›  专栏  ›  技术社区  ›  Tagar

昂贵资源的kubernetes调度

  •  1
  • Tagar  · 技术社区  · 7 年前

    我们有一个Kubernetes星系团。

    现在我们想用GPU节点来扩展它(这样Kubernetes集群中只有GPU节点)。

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

    并非所有管道都可以使用GPU。绝大多数仍然只使用CPU。

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

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

    谢谢

    2 回复  |  直到 7 年前
        1
  •  1
  •   Rico    7 年前

    您可以为此使用标签和标签选择器。 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
    
        2
  •  1
  •   Rico    7 年前

    为节点使用标签和标签选择器是正确的。但是你需要使用 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
    
    推荐文章