>_ DevTrendsfr

Langue

Accueil

Langages

Sections

Frontend Backend Mobile DevOps AI / ML
Go

Kueue - De l'ordre dans les files d'attente Kubernetes

2 626 étoiles

Logo Kueue

Imaginez ceci : votre cluster Kubernetes fonctionne à pleine capacité. D'un côté, des modèles ML critiques sont en cours d'entraînement, de l'autre, des analystes ont lancé des processus ETL gourmands en ressources, et quelque part en arrière-plan, des dizaines de tâches CI/CD s'exécutent. Tout cela nécessite du GPU, du CPU, de la mémoire, et bien sûr, tout le monde veut des ressources « tout de suite ». Ça vous parle ? Résultat : certaines tâches sont inactives tandis que d'autres accaparent les ressources des tâches plus prioritaires, et le cluster fonctionne de manière inefficace. C'est un casse-tête pour quiconque gère des workloads par lots dans Kubernetes.

C'est exactement le problème que Kueue est conçu pour résoudre — un projet de kubernetes-sigs, qui se traduit littéralement par « file d'attente ». Ce n'est pas un simple planificateur, mais un gestionnaire de files d'attente à part entière qui s'intègre profondément à Kubernetes et vous permet de gérer véritablement le cycle de vie de vos tâches de manière efficace.

Qu'est-ce que Kueue et qui en a besoin ?

Kueue est un ensemble d'API et un contrôleur qui agit comme un dispatcher intelligent pour vos tâches Kubernetes. Son rôle principal est de décider quand une tâche peut être admise à l'exécution (c'est-à-dire quand les pods peuvent être créés pour elle) et quand il pourrait être utile de l'arrêter (supprimer les pods actifs) pour libérer des ressources pour des tâches plus prioritaires.

Qui bénéficiera de cela ? Avant tout, les équipes qui utilisent activement Kubernetes pour :

  • Machine learning et traitement de données : Les ingénieurs ML et les data scientists lancent souvent de nombreux jobs d'entraînement nécessitant de grandes quantités de GPU et de CPU. Kueue aide à distribuer équitablement ces ressources coûteuses.
  • Processus ETL : Les tâches d'extraction, de transformation et de chargement de données peuvent être très gourmandes en ressources et nécessitent une planification minutieuse.
  • Pipelines CI/CD : Les builds et tests automatisés, surtout dans les grands projets, peuvent générer des pics de charge sur le cluster.
  • Toute autre tâche par lots : Si vous avez des processus en arrière-plan qui s'exécutent périodiquement et se disputent les ressources, Kueue est votre sauveur.

En essence, Kueue vous permet de transformer un flux chaotique de tâches en une file d'attente ordonnée et efficacement gérée où les ressources sont distribuées selon vos règles et priorités.

Fonctionnalités clés de Kueue qui changent la donne

Kueue ne se contente pas de mettre les tâches dans une file d'attente — il offre tout un arsenal d'outils pour l'ajustement fin et l'optimisation. Examinons les plus intéressants.

1. Gestion intelligente des tâches et des priorités

Oubliez l'allocation manuelle des ressources ou les scripts qui essaient de simuler une file d'attente. Kueue fournit des mécanismes flexibles de gestion des tâches :

  • Priorités : Vous pouvez attribuer des priorités à différentes tâches. Par exemple, une tâche d'entraînement d'un modèle critique peut avoir une priorité plus élevée qu'un rapport nocturne.
  • Stratégies de file d'attente : Kueue prend en charge deux stratégies principales :
    • StrictFIFO : File d'attente classique « premier arrivé, premier servi ». Simple et direct.
    • BestEffortFIFO : Une approche plus flexible qui essaie de démarrer les tâches le plus tôt possible, même si elles ne sont pas en tête de file d'attente, à condition qu'il y ait des ressources libres. Cela évite les temps d'inactivité du cluster lorsque des ressources sont disponibles mais que la « tête » de la file d'attente attend quelque chose de très spécifique.

Imaginez que vous ayez plusieurs équipes, chacune lançant ses propres tâches. Kueue vous permet de définir qui a accès au cluster et quand, en fonction de règles prédéfinies.

2. Gestion avancée des ressources et distribution équitable

C'est sans doute l'un des aspects les plus puissants de Kueue. Cela va bien au-delà de la planification de base de Kubernetes, offrant :

  • Interchangeabilité des flavors de ressources : Disons que vous avez des GPU de différents modèles (par exemple, NVIDIA A100 et V100). Kueue peut être configuré pour qu'une tâche nécessitant un GPU puisse utiliser n'importe lequel d'entre eux s'il est libre, au lieu d'attendre un modèle spécifique. Cela maximise l'utilisation du matériel.
  • Partage équitable et cohortes : Si vous avez plusieurs équipes ou départements utilisant un même cluster, Kueue peut garantir qu'aucun d'entre eux ne monopolisera les ressources. Vous pouvez combiner des files d'attente en « cohortes » et définir des quotas pour que les ressources soient distribuées équitablement entre elles. Par exemple, l'équipe ML pourrait obtenir 60 % des ressources, et l'équipe analytique — 40 %.
  • Préemption : Dans des situations critiques, Kueue peut préempter (arrêter) les tâches de moindre priorité pour libérer des ressources pour les plus importantes. C'est particulièrement précieux lorsque des tâches urgentes ou une récupération après des pannes sont impliquées.

3. Large intégration avec les types de tâches populaires

Kueue n'est lié à aucun type de tâche particulier. Il dispose d'un support intégré pour de nombreux workloads populaires, ce qui en fait un outil polyvalent :

  • BatchJob Kubernetes standard : Bien sûr, on ne peut pas s'en passer.
  • Jobs d'entraînement Kubeflow : Parfait pour les ingénieurs ML utilisant Kubeflow pour l'entraînement de modèles.
  • RayJob et RayCluster : Support pour le calcul distribué basé sur Ray.
  • JobSet : Pour gérer des groupes de jobs liés.
  • Pod et groupes de Pods simples : Même pour les pods simples et leurs groupes.
  • Deployments et StatefulSets : Étonnamment, Kueue peut même gérer des workloads de service, vous permettant de mixer entraînement et inférence, en allouant dynamiquement les ressources.

Cela signifie que vous n'aurez pas à réinventer la roue pour chaque type de tâche — Kueue est prêt à travailler avec votre stack dès le départ.

4. Autoscaling et multi-cluster

Dans le monde moderne, les clusters sont rarement statiques, et parfois ne se limitent pas à un seul emplacement géographique. Kueue prend en compte ces réalités :

  • Support avancé de l'autoscaling : Kueue peut s'intégrer avec Cluster Autoscaler, en utilisant provisioningRequest pour un scaling de cluster plus intelligent, en demandant de nouveaux nœuds uniquement lorsque c'est vraiment nécessaire pour les tâches dans la file d'attente.
  • MultiKueue pour le dispatching multi-cluster : C'est fantastique ! Si vous avez plusieurs clusters (par exemple, dans différentes régions ou clouds), MultiKueue vous permet de rechercher de la capacité libre et de migrer des tâches entre eux. Cela offre une flexibilité et une résilience incroyables, permettant une utilisation efficace des ressources globales.
  • Planification consciente de la topologie : Optimisation de la bande passante de communication entre les pods grâce à une planification qui prend en compte la topologie du centre de données. C'est critique pour le calcul haute performance.

Détails techniques : sous le capot de Kueue

Kueue est construit comme un contrôleur Kubernetes natif, ce qui signifie une intégration profonde avec l'écosystème. Il étend Kubernetes avec ses propres définitions de ressources personnalisées (CRD) pour définir les files d'attente, les quotas et les workloads. Cela vous permet de le gérer avec les commandes kubectl standard, ce qui est très pratique.

Le projet est en développement actif sous kubernetes-sigs (Special Interest Group), ce qui garantit la conformité avec les standards Kubernetes et le support à long terme. Actuellement, l'API est à la version v1beta2, indiquant sa maturité et sa stabilité. L'équipe travaille activement à la transition vers v1.

J'ai été agréablement surpris par le niveau de test du projet : des tests unitaires, d'intégration et E2E extensifs pour différentes versions de Kubernetes (jusqu'à 1.35) et des cas d'utilisation, incluant MultiKueue et la planification consciente de la topologie. Cela instille confiance en la fiabilité de la solution.

De plus, Kueue fournit des métriques Prometheus, facilitant la surveillance des états des files d'attente et des ressources, et dispose d'une documentation détaillée pour vous aider à vous familiariser rapidement.

Application pratique : à quoi cela ressemble dans la vraie vie

Voyons comment Kueue peut changer votre flux de travail :

  1. Plateforme ML : Un data scientist soumet une tâche d'entraînement de modèle. Au lieu d'attendre qu'un GPU spécifique se libère, Kueue place la tâche dans une file d'attente. Lorsqu'un GPU adapté devient disponible (possiblement après qu'une tâche de moindre priorité se termine ou même après une préemption), Kueue démarre l'entraînement. Si le cluster est surchargé, MultiKueue peut automatiquement rediriger la tâche vers un autre cluster moins chargé.
  2. Traitement de big data : Un processus ETL nocturne démarre mais constate que les ressources sont limitées en raison des requêtes analytiques de la journée. Kueue le place dans une file d'attente, et lorsque les ressources sont libérées (ou que les tâches de moindre priorité sont préemptées), le processus démarre. Dans ce cas, Kueue peut garantir qu'aucune équipe ne « dévorera » toutes les ressources, assurant une distribution équitable.
  3. CI/CD pour les microservices : Une équipe de développement commite activement du code, lançant des dizaines de builds et de tests. Kueue gère ces tâches, garantissant que les builds critiques (par exemple, pour la production) obtiennent la priorité sur les branches de test, et que les ressources du cluster sont utilisées de manière aussi efficace que possible, sans temps d'inactivité.

Installer Kueue est assez simple et nécessite Kubernetes 1.29 ou plus récent. Juste une commande kubectl apply :

kubectl apply --server-side -f https://github.com/kubernetes-sigs/kueue/releases/download/v0.15.2/manifests.yaml

Après cela, vous pouvez configurer les files d'attente et lancer vos tâches en utilisant les exemples de la documentation.

Faut-il essayer Kueue ?

Definitely yes, si vous êtes confronté à des problèmes de gestion de tâches par lots dans Kubernetes. Kueue n'est pas qu'un simple outil — c'est toute une philosophie d'utilisation efficace des ressources et de distribution équitable de la charge.

C'est particulièrement adapté pour :

  • Administrateurs de cluster et ingénieurs SRE : Pour mettre de l'ordre, optimiser l'utilisation des ressources et assurer la stabilité.
  • Ingénieurs MLOps et Data Scientists : Pour gérer efficacement les tâches d'entraînement, d'inférence et les expériences.
  • Développeurs utilisant Kubernetes pour CI/CD ou des tâches en arrière-plan : Pour accélérer les processus et réduire les coûts d'infrastructure.

Kueue est un projet mature, bien testé et en développement actif avec une communauté solide. Il est déjà utilisé en production par de nombreuses entreprises, ce qui est la meilleure preuve de sa fiabilité et de sa valeur pratique. Si vous voulez tirer le meilleur parti de votre cluster Kubernetes et oublier le chaos des tâches, donnez une chance à Kueue — il ne vous décevra pas !

Consultez la documentation Kueue et rejoignez la communauté sur Slack pour en savoir plus et commencer à utiliser cet outil puissant dès aujourd'hui.

Projets similaires