准入检查
AdmissionChecks 是一种机制,允许 Kueue 在接纳 Workload 之前考虑额外的标准。 在 Kueue 为 Workload 预留配额后,Kueue 并发运行 ClusterQueue 中配置的所有准入检查。 只有当所有 AdmissionCheck 都为 Workload 提供了正面信号时,Kueue 才能接纳该 Workload。
API
AdmissionCheck 是一个非命名空间的 API 对象,用于定义有关准入检查的详细信息:
controllerName- 标识处理 AdmissionCheck 的控制器,不一定是 Kubernetes Pod 或 Deployment 名称。不能为空。retryDelayMinutes(已弃用)- 指定在检查失败(转换为 False)后保持 Workload 暂停的时间长度。之后检查状态变为 “Unknown”。默认是 15 分钟。parameters- 标识带有检查附加参数的配置。
一个 AdmissionCheck 对象如下所示:
apiVersion: kueue.x-k8s.io/v1beta2
kind: AdmissionCheck
metadata:
name: prov-test
spec:
controllerName: kueue.x-k8s.io/provisioning-request
parameters:
apiGroup: kueue.x-k8s.io
kind: ProvisioningRequestConfig
name: prov-test-config
使用方法
一旦定义,AdmissionCheck 可以在ClusterQueue 的规约中引用。
与队列关联的所有 Workload 在被接纳前都需要由 AdmissionCheck 的控制器进行评估。
类似于 ResourceFlavors,如果未找到 AdmissionCheck 或其控制器未将其标记为
Active,ClusterQueue 将被标记为 Inactive。
在 ClusterQueue 的 spec 中引用 AdmissionChecks 有两种方式:
.spec.admissionChecks—— 是将为所有提交到 ClusterQueue 的 Workloads 运行的 AdmissionCheck 列表.spec.admissionCheckStrategy—— 包含admissionCheckStrategyRules列表, 这为你提供了更大的灵活性。它允许你既为所有 Workloads 运行 AdmissionCheck, 也可以将 AdmissionCheck 与特定 ResourceFlavor 关联。 要指定 AdmissionCheck 应运行的 ResourceFlavor,请使用admissionCheckStrategyRule.onFlavors字段,如果你想为所有 Workload 运行 AdmissionCheck,只需留空该字段即可。
上述字段中只能指定一个。
示例
使用 .spec.admissionChecks
apiVersion: kueue.x-k8s.io/v1beta2
kind: ClusterQueue
metadata:
name: "cluster-queue"
spec:
<...>
admissionChecks:
- sample-prov
使用 .spec.admissionCheckStrategy
apiVersion: kueue.x-k8s.io/v1beta2
kind: ClusterQueue
metadata:
name: "cluster-queue"
spec:
<...>
admissionChecksStrategy:
admissionChecks:
- name: "sample-prov" # Name of the AdmissionCheck to be run
onFlavors: ["default-flavor"] # This AdmissionCheck will only run for Workloads that use default-flavor
- name: "sample-prov-2" # This AdmissionCheck will run for all Workloads regardless of a used ResourceFlavor
AdmissionCheck 状态
AdmissionCheckState 是特定 Workload 的 AdmissionCheck 状态的表示。
AdmissionCheckState 列于 Workload 的 .status.admissionCheckStates 字段中。
AdmissionCheck 可以处于以下状态之一:
Pending- 检查尚未执行/未完成Ready- 检查已通过Retry- 当前无法通过检查,它将回退(可能允许其他尝试,释放配额)并重试。Rejected- 近期内检查不会通过。不值得重试。
具有 Pending AdmissionCheck 的 Workload 的状态类似于以下情况:
status:
admission:
<...>
admissionChecks:
- lastTransitionTime: "2023-10-20T06:40:14Z"
message: ""
name: sample-prov
podSetUpdates:
- annotations:
cluster-autoscaler.kubernetes.io/consume-provisioning-request: job-prov-job-9815b-sample-prov
name: main
state: Pending
<...>
Kueue 确保 Workload 的 AdmissionCheckStates 列表与 Workload 的 ClusterQueue 列表保持同步。
当用户添加一个新的 AdmissionCheck 时,Kueue 将其以 Pending 状态添加到 Workload 的 AdmissionCheckState 中。
如果 Workload 已被接纳,添加新的 AdmissionCheck 不会驱逐该 Workload。
带有 AdmissionChecks 的 Workload 的接纳
一旦 Workload 的 QuotaReservation 条件设置为 True,并且所有 AdmissionCheck
都处于 Ready 状态,Workload 将变为 Admitted。
如果 Workload 的任意 AdmissionCheck 处于 Retry 状态:
- 如果已
Admitted,Workload 被驱逐 - Workload 在workload.Status.Condition中将有一个Evicted条件,原因标记为AdmissionCheck - 如果 Workload 具有
QuotaReservation,它将会被释放。 - 发出
EvictedDueToAdmissionCheck事件
如果 Workload 的任意 AdmissionCheck 处于 Rejected 状态:
- Workload 被停用 -
workload.Spec.Active设置为False - 如果已
Admitted,Workload 被驱逐 - Workload 在workload.Status.Condition中具有一个Evicted条件,原因标记为Deactivated - 如果 Workload 具有
QuotaReservation,它将会被释放。 - 发出
AdmissionCheckRejected事件
接下来是什么?
反馈
这个页面有帮助吗?
Glad to hear it! Please tell us how we can improve.
Sorry to hear that. Please tell us how we can improve.