Todos los productos
Search
Centro de documentos

Container Service for Kubernetes:Add custom admission checks to ACK Kube Queue

Última actualización: Sep 04, 2026

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
image

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 admissionChecks dentro del status de un QueueUnit, identifica cuáles requieren dicha verificación. Para determinar si debe revisar una entrada específica de admissionChecks, inspeccione el valor de controllerName en el AdmissionCheck que corresponda al name listado en el campo admissionChecks del status del QueueUnit. Una vez completada la revisión, actualice el status de la entrada correspondiente en admissionChecks (dentro del status del QueueUnit) a Ready o Rejected segú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-config

      Parámetro

      Tipo

      Descripción

      controllerName

      string

      Especifica el nombre del controlador que supervisa y procesa esta verificación de admisión.

      parameters

      struct

      Estructura compuesta por tres campos de tipo string: apiGroup, kind y name. Describe los parámetros asociados al AdmissionCheck.

    • Parámetros de verificación personalizados

      Un recurso AdmissionCheck utiliza el campo parameters para 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

provisioningClassName

string

Al crear un provisioningRequest, este valor se copia en el campo ProvisioningClass del provisioningRequest.

parameters

map[string]string

Se copia en el campo Parameters del provisioningRequest cuando se crea el provisioningRequest.

managedResources

[]string

Si un QueueUnit contiene este campo, se crea un provisioningRequest para él. De lo contrario, su state se establece directamente como Ready.

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