资源风味
集群中的资源通常不是同质的。资源可能在以下方面有所不同
- 定价和可用性(例如,现货与按需 VM)
- 架构(例如,x86 与 ARM CPU)
- 品牌和型号(例如,Radeon 7000 与 Nvidia A100 与 T4 GPU)
ResourceFlavor 是一个代表这些资源变化的对象,它允许你通过标签、污点和容忍度将它们与集群节点关联起来。
注意:如果集群中的资源是同质的,你可以使用 空 ResourceFlavor,而不是向自定义 ResourceFlavor 添加标签。
一个示例 ResourceFlavor 如下所示
apiVersion: kueue.x-k8s.io/v1beta1
kind: ResourceFlavor
metadata:
name: "spot"
spec:
nodeLabels:
instance-type: spot
nodeTaints:
- effect: NoSchedule
key: spot
value: "true"
tolerations:
- key: "spot-taint"
operator: "Exists"
effect: "NoSchedule"
你可以使用 .metadata.name
字段从 .spec.resourceGroups[*].flavors[*].name
字段中的 ClusterQueue 引用 ResourceFlavor。
ResourceFlavor 标签
需要 Kubernetes 1.23 或更新版本
要将 ResourceFlavor 与集群中节点的子集关联,您可以使用匹配的节点标签(唯一标识节点)配置 .spec.nodeLabels
字段。如果您正在使用 集群自动扩缩器(或等效控制器),请确保在添加新节点时控制器配置为添加这些标签。
为了确保 工作负载 中的 Pod 在 Kueue 选择的 flavor 关联的节点上运行,Kueue 执行以下步骤
在接纳工作负载时,Kueue 根据 工作负载 的 PodSpec 中的
.nodeSelector
和.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution
字段评估 ResourceFlavor 标签。与工作负载的节点亲和性不匹配的ResourceFlavors
无法分配给工作负载的 podSet。工作负载接纳后
Kueue 将 ResourceFlavor 标签添加到基础工作负载 Pod 模板的
.nodeSelector
中。如果工作负载尚未将ResourceFlavor
标签指定为其 nodeSelector 的一部分,则会发生这种情况。例如,对于 batch/v1.Job,Kueue 将标签添加到
.spec.template.spec.nodeSelector
字段。这可确保工作负载的 Pod 只能调度到 Kueue 分配给工作负载的 flavor 所针对的节点上。Kueue 将容忍度添加到基础工作负载 Pod 模板中。
例如,对于 batch/v1.Job,Kueue 将容忍度添加到
.spec.template.spec.tolerations
字段。这允许工作负载 Pod 调度到具有特定污点的节点上。
ResourceFlavor 污点
要限制 ResourceFlavor 的使用,您可以配置 .spec.nodeTaints
字段。这些污点通常应与与 ResourceFlavor 关联的节点的污点匹配。
ResourceFlavor 上的污点与 节点污点 的工作方式类似。对于 Kueue “准许”工作负载使用 ResourceFlavor,工作负载中的 PodSpecs 应具有对其的容忍度。与 ResourceFlavor 标签 的行为相反,Kueue 不会为风味污点添加容忍度。
空 ResourceFlavor
如果你的集群具有同构资源,或者如果你不需要分别管理资源的不同风味的配额,你可以创建一个没有任何标签或污点的 ResourceFlavor。此类 ResourceFlavor 称为空 ResourceFlavor,其定义如下所示
apiVersion: kueue.x-k8s.io/v1beta1
kind: ResourceFlavor
metadata:
name: default-flavor