J'ai les kro

thumbernail Kubernetes

J'ai les kro !

Si vous passez vos journées à écrire des opérateurs Kubernetes en Go juste pour orchestrer la création de trois ressources qui se battent en duel, asseyez-vous, prenez un café. J'ai quelque chose pour vous.

Laissez-moi vous parler de kro (Kube Resource Orchestrator). Initié dans le sillage des équipes AWS et désormais hébergé fièrement sous la bannière kubernetes-sigs, kro part d'un constat douloureux : créer des Custom Resource Definitions (CRD) et des contrôleurs dédiés pour faire de l'abstraction, c'est très chronophage.

Avec kro, vous définissez votre API et les ressources sous-jacentes dans un seul et même fichier YAML (le ResourceGraphDefinition). kro génère la CRD à la volée et joue le rôle de contrôleur pour vous.

La vraie magie : le DAG

Mais la vraie magie de kro, c'est son DAG (Directed Acyclic Graph).

Le concept n'est d'ailleurs pas nouveau et a déjà fait ses preuves ! Si vous avez déjà utilisé Terraform pour créer votre infrastructure, Apache Airflow pour orchestrer vos pipelines de données, ou encore défini des dépendances (needs) dans vos pipelines GitLab CI ou GitHub Actions, vous avez utilisé un DAG. C'est ce modèle mathématique efficace qui permet de cartographier l'ordre d'exécution de vos tâches sans risque de boucle infinie. kro apporte simplement cette puissance d'orchestration directement au cœur de Kubernetes, pour vos ressources.

Un exemple concret : déployer Odoo

Prenons un exemple de la vraie vie : déployer un ERP comme Odoo.

Vous avez besoin d'un PersistentVolumeClaim, d'un Secret, d'un cluster PostgreSQL (via CloudNativePG par exemple), d'un StatefulSet pour Odoo, et d'un Ingress. Dans le monde classique, vous lancez tout en même temps et vous priez pour que la base de données soit prête avant que l'application ne tombe en erreur de connexion. Ou pire, vous bricolez un script d'attente douteux dans un InitContainer.

Avec kro, l'ordonnancement est déduit automatiquement grâce à de simples expressions CEL (Common Expression Language). Pour ceux qui ne connaîtraient pas, CEL est devenu le standard natif dans l'écosystème Kubernetes pour l'évaluation de règles. Son immense avantage ? Il est conçu pour être rapide, sécurisé, et non Turing-complet : impossible de coder une boucle infinie par erreur ou d'avoir des effets de bord imprévus ! Mieux encore, vous pouvez utiliser ces expressions pour exiger qu'une ressource soit totalement opérationnelle avant de passer à la suite.

Un extrait pour les curieux :

  - id: postgresql
    readyWhen:
      - ${postgresql.status.conditions.exists(c, c.type == "Ready" && c.status == "True")}
    template:
      apiVersion: postgresql.cnpg.io/v1
      kind: Cluster
      metadata:
        name: ${schema.metadata.name}-postgresql
      spec:
        instances: 1
        bootstrap:
          initdb:
            database: odoo
            secret:
              name: ${pgSecret.metadata.name}

  - id: statefulset
    template:
      apiVersion: apps/v1
      kind: StatefulSet
      spec:
        template:
          spec:
            containers:
              - name: odoo
                env:
                  - name: ODOO_SERVER_DB_HOST
                    value: "${postgresql.metadata.name}-rw"

Ce qu'il se passe ici est redoutable d'efficacité. Parce que le StatefulSet fait référence à une propriété de la ressource postgresql, kro comprend tout seul qu'il y a une dépendance. Et grâce au readyWhen, kro va créer la base de données, la regarder dans les yeux, et attendre patiemment qu'elle affiche un statut Ready: True avant même de tenter de créer Odoo. Un graphe topologique parfait, sans une ligne de code backend.

Bien plus que l'ordonnancement

Mais kro ne s'arrête pas à l'ordonnancement ! Il regorge d'autres fonctionnalités taillées pour la production :

  • Bubble-up de statuts : Toujours grâce à CEL, vous pouvez agréger et faire remonter l'état de n'importe quelle sous-ressource directement dans le statut de votre API personnalisée. Un simple kubectl get suffit à vos utilisateurs pour vérifier la santé globale de leur instance.
  • Validation stricte OpenAPI : Les valeurs passées par vos utilisateurs sont fortement typées et validées par l'API Server de Kubernetes, bloquant les configurations invalides à la source.
  • Versioning natif : kro gère le cycle de vie de vos API (v1alpha1, v1beta1, v1) facilitant les montées de version sans casser les déploiements existants.

Le résultat final

Et le résultat final pour vos équipes ? Une fois l'API générée par kro, instancier toute cette infrastructure complexe se résume à ceci :

apiVersion: kro.run/v1alpha1
kind: OdooApp
metadata:
  name: odoo-kro-dev
  namespace: odoo-kro
spec:
  host: demo-odoo-kro.monsite.fr

kro n'est pas un remplaçant de Helm ou ArgoCD

Attention cependant à ne pas vous méprendre : kro n'est absolument pas là pour remplacer Helm ou ArgoCD. Ce n'est pas un moteur de templating, ni un outil de synchronisation GitOps. kro vit à l'intérieur de votre cluster et agit comme un orchestrateur dynamique en temps réel. Ils sont en réalité les meilleurs amis du monde : Helm package vos graphes kro, ArgoCD ou FluxCD les déploie, et kro fait le travail dans le cluster.

Et si l'on veut aller plus loin ?

C'est ici qu'intervient Knodex (https://knodex.io/).

Maintenant que kro a transformé votre infrastructure complexe en une API Kubernetes simple et abstraite, comment la mettre à disposition de vos équipes sans les forcer à écrire du YAML ?

Knodex est une solution qui permet de construire des catalogues de services et d'offrir une expérience de déploiement en libre-service. Vous connectez vos définitions, vous créez vos interfaces, et vos développeurs peuvent instancier des applications complexes d'un simple clic. Ils choisissent Odoo dans le catalogue Knodex, et en arrière-plan, l'API Kubernetes est appelée et kro orchestre la danse.

kro + Knodex : du ResourceGraphDefinition au catalogue de services

En résumé, si vous voulez arrêter de réinventer la roue de l'orchestration à chaque nouveau service Kubernetes, regardez kro. Et si vous voulez rendre cette puissance facilement consommable par le reste du monde, regardez Knodex.

Et vous, vous avez déjà eu les kro sur Kubernetes ?


Liens utiles


#Kubernetes #DevOps #GitOps #Kro #Knodex #CloudNative #CNCF #SRE #Odoo

Découvrez les technologies d'alter way