預設情況下,ACK Kube Queue僅檢查ElasticQuotaTree中定義的配額的Max,配額檢查通過後通過調度器進行調度。如果您需要自訂更複雜的出隊檢查邏輯,可基於AdmissionCheck機制來實現。AdmissionCheck是ACK Kube Queue提供的一種外部可接入的自訂出隊檢查機制,允許在任務從隊列中出隊前(即被調度器調度前)進行額外的驗證或檢查,確保只有合格任務才能被調度器調度。
工作原理
在叢集中新增AdmissionCheck後,ACK Kube Queue在QueueUnit完成了配額檢查後不會立即將任務設定為Dequeued狀態,而是將QueueUnit設定為Reserved狀態,並在QueueUnit的status中增加Pending狀態的admissionChecks。
apiVersion: scheduling.x-k8s.io/v1alpha1
kind: QueueUnit
metadata:
...
spec:
...
status:
admissionChecks:
- lastTransitionTime: "2025-01-17T01:46:58Z"
message: ""
name: sample-prov
state: Pending
lastUpdateTime: "2025-01-17T01:46:58Z"
message: Reserved resources success, waiting admission checks to be ready
phase: Reserved
podState: {}各AdmissionCheckController會檢查各自的admissionChecks,並在檢查通過後將admissionChecks中的state置為Ready狀態。當所有AdmissionCheck都進入Ready狀態後,QueueUnit進入Dequeued狀態。
apiVersion: scheduling.x-k8s.io/v1alpha1
kind: QueueUnit
metadata:
...
spec:
...
status:
admissionChecks:
- lastTransitionTime: "2025-01-17T01:47:58Z"
message: Succeeded
name: sample-prov
state: Ready
lastUpdateTime: "2025-01-17T01:50:45Z"
message: Dequeued
phase: Dequeued
podState:
pending: 1AdmissionCheck具體工作流程如下。
AdmissionCheck配置介紹
配置說明
管理員需要在叢集中配置以下內容。
一個控制器:自訂的AdmissionCheckController(對應上圖中的ACController)。
AdmissionCheckController是由您維護、用於完成自訂檢查的控制器。通過監聽QueueUnit的
status中的admissionChecks欄位,控制器能感知需要進行自訂檢查的QueueUnit。通過QueueUnit的status中admissionChecks欄位中name對應的AdmissionCheck中的controllerName,控制器可以確定admissionChecks是否需要自身檢查。完成檢查後,控制器會根據結果是否成功修改QueueUnit的status中對應的admissionChecks的status為Ready或者Rejected。兩個自訂資源CRD:
AdmissionCheck
ACK Kube Queue安裝時自動安裝的CRD資源,您只需要提交CR即可,用於處理自訂檢查邏輯。其中包含了需要關注該檢查的控制器名稱,以及該自訂檢查的自訂參數。
AdmissionCheck的樣本以及可用欄位如下。
apiVersion: kueue.x-k8s.io/v1beta1 kind: AdmissionCheck metadata: name: sample-prov spec: controllerName: provisioning-request-admission-controller parameters: apiGroup: kueue.x-k8s.io kind: ProvisioningRequestConfig name: prov-test-config參數
類型
描述
controllerNamestring
描述了需要關注該准入檢查的控制器名稱。
parametersstruct
由
apiGroup、kind、name三個string類型欄位組成的結構體類型,描述該AdmissionCheck關聯的參數。自訂檢查參數
AdmissionCheck中通過Parameters欄位關聯一個自訂參數。控制器執行檢查時會讀取自訂檢查參數,以執行特定的檢查邏輯。自訂參數需要使用者自行安裝CRD並提交CR。同一個控制器可以執行多種不同的檢查邏輯。通過為每種檢查定義不同的參數,控制器可以根據參數的值來區分不同的檢查行為。
一個隊列中的配置項:
部署AdmissionCheckController、AdmissionCheck以及自訂檢查參數後,叢集已經具備了自訂檢查的能力。您可以在目標隊列中增加檢查項,以在隊列中啟用該自訂檢查。
配置樣本
一個AdmissionCheck配置樣本如下。下文以ProvisioningRequestAdmissionCheckController為例。
1、啟用ProvisioningRequestAdmissionCheck Controller
ProvisioningRequestAdmissionCheckController是ACK Kube Queue提供的用於與ProvisioningRequest結合的控制器。您可以在安裝ACK Kube Queue的Helm Chart時,設定.Values.admissionCheckController.enabled為true,啟用ProvisioningRequestAdmissionCheck。啟用後ProvisioningRequestAdmissionCheckController會自動部署。

2、在AdmissionCheck中使用Controller
為了使用ProvisioningRequestAdmissionCheckController,您需要參見下方樣本,提交AdmissionCheck,並將AdmissionCheck的controllerName設定為provisioning-request-admission-controller。
apiVersion: kueue.x-k8s.io/v1beta1
kind: AdmissionCheck
metadata:
name: sample-prov
spec:
controllerName: provisioning-request-admission-controller
parameters:
apiGroup: kueue.x-k8s.io
kind: ProvisioningRequestConfig
name: prov-test-config3、通過ProvisioningRequestConfig自訂檢查參數
provisioningRequestConfig是專用於provisioningRequestAdmissionCheck的參數類型。您可以通過provisioningRequestConfig自訂檢查參數。其樣本以及可用欄位如下。
apiVersion: kueue.x-k8s.io/v1beta1
kind: ProvisioningRequestConfig
metadata:
name: prov-test-config
spec:
provisioningClassName: atomic-scale-up.kubernetes.io
parameters:
managedResources:
- nvidia.com/gpu參數 | 類型 | 描述 |
| string | 建立 |
| map[string]string | 在建立 |
| []string | 只有當QueueUnit包含該欄位時,才會為QueueUnit建立 |
4、在隊列中添加AdmissionCheck配置項
您可以在隊列配置中通過admissionChecks欄位添加需要執行的檢查項。樣本如下。
apiVersion: scheduling.x-k8s.io/v1alpha1
kind: Queue
metadata:
name: example-queue # 替換為需要開啟AdmissionCheck的隊列名
namespace: kube-queue
spec:
...
admissionChecks:
- name: sample-prov # 填寫上文提交的AdmissionCheck的Name
selector: # metav1.LabelSelector類型,只有滿足該selector的QueueUnit會進行自訂檢查
matchLabels:
app: gpu