首页 > 解决方案 > Kubernetes:标记节点上的每个图形卡,以便能够在该卡上调度特定的 pod

问题描述

我有一些具有不同数量 gpu 卡的节点。我希望能够将特定的 pod 分配给某个 gpu 卡,就像我分配任务时的预订一样。

我已经看到,您可以像这样标记节点:

kubectl label node nodaA project-type=ProjectA

但这只是标记一个节点,一个 pod 将分配给它。但我希望能够更具体。

假设我有一个名为NodeA的节点,它有3 张来自Nvidia的GPU 卡第一张卡是为名为“ CertainOne ”的特定任务保留的,其他两张卡仅可用于其他 pod。

当用户提交的 pod不是CertainOne ”时,无论标签是什么,都应该将这些 pod 分配给这 3 张卡。但是当另一个用户提交带有“ CertainOne ”标签的 pod 时,应该始终使用保留卡(此时可能正在使用的另一个正在运行的 pod 应该被丢弃,并且带有“CertainOne”标签的 pod 应该优先使用它)

但我无法找到解决方案。整个想法是,我可以随时更改预订卡,例如更改为另一张卡,还可以更改范围,例如不仅是第一个,还可以是第二个,以便带有“ CertainOne ”标签的吊舱" 应该在第二种情况下分配给卡 1 或卡 2。

这甚至可能吗?或者还有其他类似的解决方案吗?

标签: kuberneteskubectl

解决方案


但这只是标记一个节点,一个 pod 将分配给它。但我希望能够更具体。

但我无法找到解决方案。

这甚至可能吗?或者还有其他类似的解决方案吗?

不幸的是,根据我的经验,我有一个坏消息要告诉你,因为我从未见过像你想要的那样的解决方案。非常标准的方法是NodeAffinity在带有适当标签和选择器的尖峰中使用。但这保证您仅在选定的节点上安排 pod,这不符合您的要求:(

$ kubectl label nodes nodeA k8s-node=gpunode

apiVersion: v1
kind: Pod
metadata:
  name: runongpunode
spec:
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: k8s-node
            operator: In
            values:
            - gpunode

推荐阅读