我有一些节点具有不同数量的GPU卡。我希望能够将特定的 pod 分配给某个 GPU 卡,就像在我为其分配任务时进行预留一样。
我已经看到,您可以像这样标记节点:
kubectl label node nodaA project-type=ProjectA
但这只是标记一个节点,一个 Pod 将被分配给它。但我希望能够更具体。
假设我有一个名为NodeA的节点,它有 3 个来自Nvidia的GPU 卡。第一张卡是为名为">CertainOne"的特定任务保留的,另外两张卡只是可用于其他吊舱。
当用户提交不是">CertainOne"的 Pod 时,无论标签如何,都应将 Pod 分配给这 3 张卡。但是,当另一个用户提交带有"CertainOne"标签的 pod 时,应始终使用保留的卡(此时可能正在使用的另一个正在运行的 pod 应删除,标签为CertainOne的 pod 应将其用作优先级(
但我无法找到解决方案。整个想法是,我可以随时更改预订卡,例如更改为另一张卡,还可以更改范围,例如不仅要说第一张,还要说第二张,因此在第二种情况下,应将带有标签">CertainOne"的 pod 分配给卡 1 或卡 2。
这可能吗?还是有其他类似的解决方案?
但这只是标记一个节点,一个 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