De forma predeterminada, ACK Kube Queue solo verifica la cuota Max definida en un ElasticQuotaTree. Una vez que una carga de trabajo supera la verificación de cuota, el planificador la procesa. Si requiere una lógica de validación de extracción de la cola más compleja, utilice el mecanismo AdmissionCheck. Este mecanismo externo y conectable, proporcionado por ACK Kube Queue, realiza validaciones adicionales antes de extraer una carga de trabajo de la cola y garantiza que solo se planifiquen las cargas aptas.
Funcionamiento
Al agregar un AdmissionCheck al clúster, ACK Kube Queue no establece de inmediato la fase Dequeued en un QueueUnit después de que este supera la verificación de cuota. En su lugar, el QueueUnit pasa a la fase Reserved y se agregan entradas admissionChecks con estado Pending al campo status del QueueUnit.
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: {}
Cada AdmissionCheckController revisa sus respectivas entradas admissionChecks. Cuando una verificación se aprueba, el controlador establece el state correspondiente en admissionChecks como Ready. El QueueUnit entra en estado Dequeued únicamente cuando todos los AdmissionChecks alcanzan el estado Ready.
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: 1
Configuración de AdmissionCheck
Detalles de configuración
El administrador debe configurar los siguientes componentes en el clúster.
-
Un controlador: un AdmissionCheckController (ACController) personalizado.
Este controlador lo mantiene usted para ejecutar verificaciones personalizadas. Al monitorear el campo
admissionChecksdentro delstatusde un QueueUnit, identifica cuáles requieren dicha verificación. Para determinar si debe revisar una entrada específica deadmissionChecks, inspeccione el valor decontrollerNameen el AdmissionCheck que corresponda alnamelistado en el campoadmissionChecksdelstatusdel QueueUnit. Una vez completada la revisión, actualice elstatusde la entrada correspondiente enadmissionChecks(dentro delstatusdel QueueUnit) aReadyoRejectedsegún el resultado obtenido. -
Dos definiciones de recursos personalizados (CRD):
-
AdmissionCheck
Esta CRD se instala automáticamente junto con ACK Kube Queue. Para definir la lógica de verificación personalizada, envíe un recurso personalizado (CR) donde especifique el controlador responsable y referencie sus parámetros.
A continuación se muestra un manifiesto de AdmissionCheck con sus campos disponibles.
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-configParámetro
Tipo
Descripción
controllerNamestring
Especifica el nombre del controlador que supervisa y procesa esta verificación de admisión.
parametersstruct
Estructura compuesta por tres campos de tipo string:
apiGroup,kindyname. Describe los parámetros asociados al AdmissionCheck. -
Parámetros de verificación personalizados
Un recurso AdmissionCheck utiliza el campo
parameterspara referenciar un objeto de parámetros personalizados. El controlador lee estos valores para ejecutar la lógica específica de verificación. Al emplear parámetros distintos para cada caso, un mismo controlador admite diferentes tipos de revisiones. Instale la CRD correspondiente y envíe el CR con los parámetros personalizados.
-
-
Un elemento de configuración en la cola:
Tras desplegar el AdmissionCheckController, el AdmissionCheck y los parámetros personalizados, el clúster queda listo para realizar verificaciones personalizadas. Posteriormente, habilite esta función para una cola específica agregándola a su configuración.
Ejemplo de configuración
Este ejemplo ilustra cómo configurar un AdmissionCheck mediante el ProvisioningRequestAdmissionCheckController.
1. Habilitar el controlador ProvisioningRequestAdmissionCheck
El ProvisioningRequestAdmissionCheckController es un controlador proporcionado por ACK Kube Queue que funciona junto con ProvisioningRequest. Habilítelo estableciendo .Values.admissionCheckController.enabled como true durante la instalación del chart de Helm para ACK Kube Queue. Una vez habilitado, el sistema despliega automáticamente el ProvisioningRequestAdmissionCheckController.
# Chart Url: https://aliacs-app-catalog.oss-cn-hangzhou.aliyuncs.com/charts-incubator/ack-kube-queue-1.22.4.tgz
admissionCheckController:
enabled: true # Set to true to enable ProvisioningRequestAdmissionCheck
image:
repository: acs/prevreq-controller
tag: v1.0.0-aliyun-d31082a1
burst: 50
controller:
defaultPreemptible: true
enableBlockingMode: false
enableStrictPriority: false
image:
repository: acs/kube-queue
tag: v0.11.1-aliyun-34b259af
queueGroupPlugin: elasticquota
resources:
# ...
2. Usar el controlador en un AdmissionCheck
Para utilizar el ProvisioningRequestAdmissionCheckController, envíe un AdmissionCheck como se muestra en el siguiente ejemplo y establezca el controllerName del AdmissionCheck como 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-config
3. Definir parámetros con ProvisioningRequestConfig
El controlador ProvisioningRequestAdmissionCheck utiliza un ProvisioningRequestConfig para definir los parámetros de verificación personalizados. El siguiente manifiesto muestra sus campos disponibles.
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
|
Parámetro |
Tipo |
Descripción |
|
|
string |
Al crear un |
|
|
map[string]string |
Se copia en el campo |
|
|
[]string |
Si un QueueUnit contiene este campo, se crea un |
4. Agregar el AdmissionCheck a una cola
Agregue las verificaciones a la configuración de la cola mediante el campo admissionChecks. A continuación se presenta un ejemplo.
apiVersion: scheduling.x-k8s.io/v1alpha1
kind: Queue
metadata:
name: example-queue # Replace with the name of the queue where you want to enable the AdmissionCheck
namespace: kube-queue
spec:
...
admissionChecks:
- name: sample-prov # Specify the name of the AdmissionCheck you created earlier
selector: # A metav1.LabelSelector. Only QueueUnits that match this selector undergo the custom check.
matchLabels:
app: gpu