2 minutes pour comprendre... les opérateurs Kubernetes
Sommaire
En 2 minutes #
Kubernetes n’est pas seulement reconnu pour sa capacité à orchestrer des containers, mais également pour son API extensible et son aptitude à standardiser la façon de décrire notre infrastructure et nos applications. Un opérateur Kubernetes a pour rôle d’automatiser des opérations, souvent répétitives, lors de la gestion d’un service ou d’un ensemble de services applicatifs. Les patterns des opérateurs peuvent varier, mais ils ont souvent comme objectifs d’automatiser les tâches répétitives et/ou manuelles comme les installations, les sauvegardes/restaurations, les mises à jour ou autres types d’actions similaires.
Un opérateur est composé d’un ou plusieurs contrôleurs qui, individuellement, ont pour rôle de surveiller les objets d’un type donné disponibles dans l’API de Kubernetes. Chacun de ces types d’objet possède une spécification bien à lui qui permet de décrire l’état souhaité de celui-ci. Cette spécification est définie par des objets de type Custom Resource Definitions (CRDs).
Le cycle d’un contrôleur se résume à suivre l’état actuel d’un objet et de faire converger ce dernier vers l’état souhaité (défini par un utilisateur). Ce cycle se nomme “boucle de contrôle” (“control loop” ou “reconciliation loop”). Voici un exemple concret qui provient de la documentation officielle de Kubernetes :
Lorsque l’on règle le thermostat sur une température définie (état souhaité) dans une pièce, la température actuelle de celle-ci (état actuel) est différente. Le thermostat agit donc pour tenter de rapprocher la température actuelle vers celle désirée. On retrouve ce principe dans les contrôleurs Kubernetes et donc dans les opérateurs également.
Il existe aujourd’hui un bon nombre d’opérateurs disponibles dans l’écosystème de Kubernetes. Ils ont des rôles bien distincts allant de la gestion des secrets à la gestion de bases de données, mais leur objectif commun reste de gérer une application, son cycle de vie et d’automatiser certaines tâches liées à celle-ci.

Voici quelques exemples concrets d’utilisation des opérateurs :
- découper la configuration d’une application en plusieurs types d’objets logiques
- sauvegarder et restaurer une application
- distribuer un ensemble d’applications en microservices de manière simple
- gérer les instances applicatives de manière déclarative, via du GitOps par exemple
En savoir plus… #
Fonctionnalités principales #
Un opérateur permet en partie de :
- maintenir les applications en bonne santé
- abstraire la complexité de gestion d’une application et de son cycle de vie
- étendre les fonctionnalités de Kubernetes via son API
- construire des solutions sur-mesure pour répondre à des besoins métiers spécifiques
- augmenter la résilience d’une application grâce aux réconciliations, évitant ainsi le configuration drift
Ecosystème #
Frameworks #
Afin d’uniformiser le développement des opérateurs, il existe un certain nombre de frameworks qui ont pour objectifs de fournir des fonctions utilitaires ou bien de simplifier la gestion des CRDs, la création des contrôleurs et la génération des manifestes de déploiement (RBAC, Webhooks, Deployment…).
Voici une liste non exhaustive de certains de ces framework :
- Kubebuilder (Go)
- Operator SDK (Go, Ansible, Helm)
- Kopf (Python)
- Java Operator SDK (Java)
Hubs #
Dans le but de retrouver et installer facilement les opérateurs les plus utilisés, il existe deux sites populaires :
Exemples et structures de projets #
Pour terminer, voici quelques dépôt GitHub permettant de comprendre comment les contrôleurs sont constitués et apprendre à les développer pas à pas :
- https://github.com/gianlucam76/kubernetes-controller-tutorial
- https://github.com/kubernetes/sample-controller
- https://github.com/kubernetes-sigs/kubebuilder/tree/master/docs/book/src/cronjob-tutorial/testdata/project
Bon à savoir #
- la gestion des différentes versions d’une CRD est complexe à gérer lorsque l’on développe un opérateur
- un contrôleur est capable de recréer à l’identique d’éventuels objets supprimés de manière accidentelle
- même si ce n’est pas leur objectif principal, les contrôleurs peuvent gérer des applications et ressources présentes en dehors de Kubernetes
Liens complémentaires #
- https://kubernetes.io/docs/concepts/architecture/controller/
- https://www.groundcover.com/blog/kubernetes-operator
- https://github.com/gianlucam76/kubernetes-controller-tutorial/blob/main/docs/reconciler.md
- https://medium.com/@hirushanlk/power-of-kubernetes-operators-a-comprehensive-guide-to-crds-and-operator-frameworks-814fa4ed1672