Kubernetes:在节点上标记每个图形卡,以便能够在该卡上安排特定的pod

Kubernetes:在节点上标记每个图形卡,以便能够在该卡上安排特定的pod,kubernetes,kubectl,Kubernetes,Kubectl,我有一些具有不同数量gpu卡的节点。我希望能够将一个特定的pod分配给某个gpu卡,就像我分配任务时的预约一样 我已经看到,您可以这样标记节点: kubectl label node nodaA project-type=ProjectA 但这只是标记一个节点,一个pod将分配给它。但我想说得更具体一些 假设我有一个名为NodeA的节点,它有3个来自Nvidia的GPU卡。第一张卡是为一个名为“CertainOne”的特定任务保留的,另外两张卡正好可以用于其他POD 当用户提交的POD不是“C

我有一些具有不同数量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”的POD应该分配给卡1或卡2

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

但这只是标记一个节点,一个pod将分配给它。 但我想说得更具体一些

但我没能找到解决办法

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

不幸的是,根据我的经验,我有坏消息告诉你,因为我从未见过像你想要的那样的解决方案。 非常标准的方法是在spike中使用适当的标签和选择器。但这保证了您只能在选定的节点上调度POD,这不符合您的要求:(

但这只是标记一个节点,一个pod将分配给它。 但我想说得更具体一些

但我没能找到解决办法

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

不幸的是,根据我的经验,我有坏消息告诉你,因为我从未见过像你想要的那样的解决方案。 非常标准的方法是在spike中使用适当的标签和选择器。但这保证了您只能在选定的节点上调度POD,这不符合您的要求:(


到目前为止,您只能指定在哪个节点上调度pod。这实际上取决于您的应用程序本身来选择在哪个GPU上运行。我有一个类似的问题。我希望能够将特定节点中的某些GPU排除在群集中。例如,如果主机上有GPU 0、1、2和3,我希望能够生成GPU2和3可供kubernetes使用,并保留0和1供主机上运行的应用程序使用。不幸的是,我还没有找到一种方法来做到这一点。我不完全同意@KenChen的评论,因为可以使用nvidia请求
nvidia.com/gpu
资源,然后kubernetes将为pod选择一个gpu,但是似乎无法控制它将从哪个GPU中选择。到目前为止,你只能指定在哪个节点上调度pod。实际上,要选择在哪个GPU上运行pod完全取决于你的应用程序本身。我有一个类似的问题。我希望能够将某个节点的某些GPU排除在群集中。例如,如果我有GPU主机上的U 0、1、2和3,我希望能够使kubernetes可以使用gpu 2和3,并保留0和1供主机上运行的应用程序使用。不幸的是,我还没有找到这样做的方法。我不完全同意@KenChen的评论,因为可以请求
nvidia.com/gpu
资源使用NVIDIA的,然后kubernetes将选择一个GPU的pod,但似乎无法控制它将选择从哪个GPU。
$ 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