预置准入检查控制器
Provisioning AdmissionCheck 控制器是专为将 Kueue 与 Kubernetes cluster-autoscaler 集成而设计的 AdmissionCheck 控制器。其主要功能是为持有 配额预留 的工作负载创建 ProvisioningRequests,并保持 AdmissionCheckState 同步。
该控制器是 Kueue 的一部分。它默认启用。您可以通过编辑 ProvisioningACC
特性门禁来禁用它。有关特性门禁配置的详细信息,请查看 安装 指南。
Provisioning Admission Check 控制器在 Kubernetes cluster-autoscaler 1.29 及更高版本中受支持。但是,某些云提供商可能没有针对它的实现。
在 ClusterAutoscaler 文档 中查看受支持的 Provisioning Class 以及它们的先决条件的列表。
用法
要使用 Provisioning AdmissionCheck,请使用 kueue.x-k8s.io/provisioning-request
作为 .spec.controllerName
创建一个 AdmissionCheck,并使用 ProvisioningRequestConfig
对象创建 ProvisioningRequest 配置。
接下来,您需要从 ClusterQueue 引用 AdmissionCheck,如 Admission Check 用法 中所述。
有关完整设置,请参见 以下内容。
ProvisioningRequest 配置
有两种方法可以配置 Kueue 为你的作业创建的 ProvisioningRequests。
- ProvisioningRequestConfig:此配置中的 AdmissionCheck 适用于通过此检查的所有作业。它使你可以设置
provisioningClassName
、managedResources
和parameters
- 作业注释:此配置使你可以为特定作业设置
parameters
。如果注释和 ProvisioningRequestConfig 引用同一个参数,则注释值优先。
ProvisioningRequestConfig
ProvisioningRequestConfig
如下所示
apiVersion: kueue.x-k8s.io/v1beta1
kind: ProvisioningRequestConfig
metadata:
name: prov-test-config
spec:
provisioningClassName: check-capacity.autoscaling.x-k8s.io
managedResources:
- nvidia.com/gpu
其中
- provisioningClassName - 描述了配置资源的不同模式。支持的 ProvisioningClasses 列在 ClusterAutoscaler 文档 中,还可以查看你的云提供商的文档以了解他们支持的其他 ProvisioningRequest 类。
- managedResources - 包含自动缩放管理的资源列表。
请查看 API 定义 了解更多详情。
作业注释
传递 ProvisioningRequest 的另一种方法 parameters 是使用作业注释。每个带有前缀 provreq.kueue.x-k8s.io/ 的注释都将直接传递到创建的 ProvisioningRequest。例如,provreq.kueue.x-k8s.io/ValidUntilSeconds: "60"
将传递 ValidUntilSeconds
参数,其值为 60
。请参阅以下更多示例。
一旦 Kueue 为你提交的作业创建了 ProvisioningRequest,修改作业中注释的值将不会对 ProvisioningRequest 产生影响。
示例
设置
apiVersion: kueue.x-k8s.io/v1beta1
kind: ResourceFlavor
metadata:
name: "default-flavor"
---
apiVersion: kueue.x-k8s.io/v1beta1
kind: ClusterQueue
metadata:
name: "cluster-queue"
spec:
namespaceSelector: {} # match all.
resourceGroups:
- coveredResources: ["cpu", "memory", "nvidia.com/gpu"]
flavors:
- name: "default-flavor"
resources:
- name: "cpu"
nominalQuota: 9
- name: "memory"
nominalQuota: 36Gi
- name: "nvidia.com/gpu"
nominalQuota: 9
admissionChecksStrategy:
admissionChecks:
- name: "sample-prov"
onFlavors: [default-flavor] # optional if the admission check targets all flavors.
---
apiVersion: kueue.x-k8s.io/v1beta1
kind: LocalQueue
metadata:
namespace: "default"
name: "user-queue"
spec:
clusterQueue: "cluster-queue"
---
apiVersion: kueue.x-k8s.io/v1beta1
kind: AdmissionCheck
metadata:
name: sample-prov
spec:
controllerName: kueue.x-k8s.io/provisioning-request
parameters:
apiGroup: kueue.x-k8s.io
kind: ProvisioningRequestConfig
name: prov-test-config
---
apiVersion: kueue.x-k8s.io/v1beta1
kind: ProvisioningRequestConfig
metadata:
name: prov-test-config
spec:
provisioningClassName: queued-provisioning.gke.io
managedResources:
- nvidia.com/gpu
使用 ProvisioningRequest 的作业
apiVersion: batch/v1
kind: Job
metadata:
generateName: sample-job-
namespace: default
labels:
kueue.x-k8s.io/queue-name: user-queue
annotations:
provreq.kueue.x-k8s.io/maxRunDurationSeconds: "600"
spec:
parallelism: 3
completions: 3
suspend: true
template:
spec:
tolerations:
- key: "nvidia.com/gpu"
operator: "Exists"
effect: "NoSchedule"
containers:
- name: dummy-job
image: gcr.io/k8s-staging-perf-tests/sleep:v0.1.0
args: ["120s"]
resources:
requests:
cpu: "100m"
memory: "100Mi"
nvidia.com/gpu: 1
limits:
nvidia.com/gpu: 1
restartPolicy: Never