
Déployer des applications avec état (StatefulSets)
Apprenez à relever les défis des applications stateful (bases de données...) sur Kubernetes en utilisant les StatefulSets pour des identités et un stockage stables.
Quand l'état compte : le défi des applications persistantes
Jusqu'à présent, nous avons largement utilisé les Deployments, idéaux pour les applications stateless où chaque instance (Pod) est interchangeable et peut être remplacée sans impact sur l'état global. Cependant, de nombreuses applications critiques, comme les bases de données, les systèmes de messagerie, les caches distribués ou les systèmes de fichiers en cluster, sont fondamentalement stateful (avec état). Elles nécessitent des garanties que les Deployments ne peuvent pas fournir.
Quelles sont ces garanties ? Les applications stateful ont souvent besoin :
- D'une identité réseau stable et unique : Chaque instance doit avoir un nom d'hôte DNS prévisible et persistant, même après redémarrage ou replanification.
- D'un stockage persistant stable : Chaque instance doit être associée à un volume de stockage spécifique et persistant qui la suit lors des redémarrages.
- D'un ordre défini pour le déploiement, la mise à l'échelle et la suppression : Il est souvent crucial de démarrer ou d'arrêter les instances dans un ordre précis (par exemple, démarrer le noeud maître avant les esclaves).
Les Deployments, avec leurs Pods anonymes, leurs IPs éphémères et leur stockage potentiellement partagé ou non persistant, ne répondent pas à ces exigences.
StatefulSet : le contrôleur dédié aux applications avec état
Pour relever ces défis spécifiques, Kubernetes propose un autre contrôleur de workload puissant : le StatefulSet. Il est conçu explicitement pour gérer le déploiement et la mise à l'échelle d'un ensemble de Pods stateful, en leur fournissant les garanties d'identité et de stockage stables dont ils ont besoin.
Dans ce chapitre, nous allons plonger dans le monde des StatefulSets. Nous commencerons par analyser plus en détail les défis spécifiques posés par les applications stateful. Ensuite, nous introduirons le StatefulSet, en expliquant comment il fournit ces identités réseau et ce stockage stables, souvent en conjonction avec les PersistentVolumeClaims (que nous venons d'étudier) et les Services Headless. Nous examinerons les garanties uniques qu'il offre concernant l'ordre des opérations et comment il se compare aux Deployments. Enfin, nous discuterons des cas d'usage typiques où les StatefulSets sont la solution privilégiée.
Maîtriser les StatefulSets est essentiel pour exécuter des applications complexes comme les bases de données ou les systèmes distribués de manière fiable sur Kubernetes.