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 laClusterQueue
y lasLocalQueue
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!