«Despliega una plataforma de colas de trabajos batch e IA con Kueue en Kubernetes»

Despliega una plataforma de colas de trabajos batch e IA con Kueue en Kubernetes

Hoy vamos a dar un salto de nivel en nuestro laboratorio de Kubernetes montando un sistema avanzado para la gestión eficiente de trabajos batch, pipelines de ML e IA en tu VPS: Kueue. Este proyecto, incubado por la CNCF, añade colas y planificación inteligente para orquestar workloads pesados, priorizando y ajustando el uso de recursos del clúster como nunca antes.

¿Para qué sirve Kueue?

  • Orquestación de colas y prioridades: Evita cuellos de botella gestionando cargas intensas (ejemplo: jobs de IA que consumen GPU, simulaciones batch o procesamientos datos).
  • Mayor aprovechamiento del clúster: Agrupa jobs en Workloads y los va lanzando cuando hay recursos, maximizando el uso de CPU, RAM o GPU.
  • Soporte para cuotas y políticas: Controla cuánto pueden consumir los equipos o proyectos, usando mecanismos tipo “quota borrowing” y cohortes para compartir recursos cuando sobra capacidad.
  • Predictibilidad: Permite saber cuándo va a empezar tu job y cuánto tardará, clave si ofreces servicios de IA a clientes internos o externos.

Manos a la obra: despliegue de Kueue

1. Desplegando Kueue en tu clúster

Primero, instala Kueue y sus CustomResourceDefinitions (CRDs). Puedes hacerlo así (ajusta la versión si hay una más moderna):

kubectl apply -f https://github.com/kubernetes-sigs/kueue/releases/download/v0.9.5/kueue-manager.yaml

2. Definiendo una ResourceFlavor y una ClusterQueue

Los ResourceFlavors definen diferentes tipos de recursos (como distintas pools de nodos, GPUs o requisitos de afinidad). La ClusterQueue decide cómo se cola cada workload y el presupuesto global.

apiVersion: kueue.x-k8s.io/v1beta1
kind: ResourceFlavor
metadata:
  name: on-demand
spec: {}

---
apiVersion: kueue.x-k8s.io/v1beta1
kind: ClusterQueue
metadata:
  name: batch-jobs
spec:
  namespaceSelector: {}
  resourceGroups:
    - coveredResources: ["cpu", "memory", "nvidia.com/gpu"]
      flavors:
        - name: on-demand
          resources:
            - name: "cpu"
              nominalQuota: 8   # tus CPUs
            - name: "memory"
              nominalQuota: 16Gi
            - name: "nvidia.com/gpu"
              nominalQuota: 2   # opcional, si tienes GPUs

3. Namespace y LocalQueue para tu equipo ML (¡multiusuario total!)

apiVersion: v1
kind: Namespace
metadata:
  name: laboratorio-ml

---
apiVersion: kueue.x-k8s.io/v1beta1
kind: LocalQueue
metadata:
  name: user-ml-queue
  namespace: laboratorio-ml
spec:
  clusterQueue: batch-jobs

4. Ejemplo de job ML: procesando lotes de imágenes

Ahora un usuario del equipo puede lanzar jobs y Kueue los irá despachando en orden y respetando prioridades/cuotas.

apiVersion: batch/v1
kind: Job
metadata:
  name: procesamiento-imagenes
  namespace: laboratorio-ml
  labels:
    kueue.x-k8s.io/queue-name: user-ml-queue
spec:
  template:
    spec:
      containers:
        - name: procesador
          image: python:3.11
          command: ["python", "-c", "print('Procesando imágenes...')"]
          resources:
            requests:
              cpu: "2"
              memory: "4Gi"
      restartPolicy: Never

¡Así de fácil, pero con mucho poder!

  • Si otros equipos quieren usar la infraestructura, solo crea más LocalQueues bajo otros namespaces.
    Puedes separar cuotas o dejarles “pedir prestado” recursos de la ClusterQueue general.
  • ¿Tienes GPUs? Añade nvidia.com/gpu en el ResourceFlavor y úsalo en los jobs, incluso mezclando workloads batch y deep learning.
  • Monitoriza el estado de las colas, jobs pendientes, y uso de recursos con:
    kubectl get workloads -A
    kubectl describe clusterqueue batch-jobs

Consejos extra y troubleshooting

  • ¿Tus pods se quedan en Pending?
    Comprueba que la ClusterQueue y las LocalQueue estén bien asociadas, que haya recursos suficientes y no superes las cuotas.
  • Ajusta prioridades usando PodPriorityClasses:
    Puedes combinar Kueue y prioridades para que ciertos jobs urgentes desplacen a otros.
  • Kueue es joven pero en evolución rápida:
    ¡Experimenta! Consulta la documentación oficial para nuevas features y pon feedback si te animas.

Kueue es ideal para montar tu propio sistema tipo “HPC light”, DataOps o AI as a Service sin depender de la nube pública. ¡Que no te asusten los YAMLs, este es puro Kubernetes de nueva generación!

Avatar

Por Mid