L'essor du cloud et, plus récemment, de Kubernetes a propulsé les architectures de microservices sur le devant de la scène. Dans ce contexte, la maîtrise des concepts de stateful et stateless devient cruciale pour les DevOps. Cet article vise à démystifier ces termes, à explorer leurs implications pratiques et à examiner leur lien avec Kubernetes et les pratiques associées.
Stateful vs Stateless
Les applications stateless opèrent sans stocker de données persistantes. Prenons l'exemple d'une application de cryptage de données embarquée dans un conteneur. Elle traite les données entrantes et fournit un résultat sans avoir à les stocker durablement. Cette conception simplifie le déploiement et la scalabilité de l'application.
En revanche, les applications stateful incluent des composants qui nécessitent une sauvegarde d'état, comme le stockage des logs ou la gestion des sessions utilisateur. Gérer ce type d'applications dans Kubernetes était initialement complexe en raison de l'absence native de systèmes de persistance.

Le débat Legacy vs Cloud-Native
Avant Kubernetes, la persistance était gérée localement par les serveurs et leurs systèmes de fichiers attachés. L'avènement de Kubernetes a nécessité une réflexion sur l'adaptation des pratiques de persistance pour s'aligner avec l'orchestration de conteneurs et les besoins de scalabilité.
Kubernetes et le défi de la persistance
Pour pallier les limitations initiales de Kubernetes, des solutions comme le Network File System "NFS" ont été adoptées par les hébergeurs, s'appuyant sur du matériel propriétaire comme les baies de stockage Dell EMC.
Cependant, de nombreuses solutions logicielles de "sharing storage" existent, dont les plus connues sont Portworx, Rakuten Cloud (anciennement Robin.io) et des solutions open source comme Rook de Ceph, Gluster (Kadalu), OpenEBS ou Longhorn. Elles facilitent le travail des administrateurs en permettant le montage de volumes persistants (PV) et de revendications de volumes persistants (PVC) pour gérer les données des applications stateful.
Les fournisseurs de cloud public proposent également leur propre classe de stockage via le standard Container Storage Interface (CSI).
Choisir le bon storage pour Kubernetes
L'harmonie entre application, matériel et infrastructure est essentielle pour des solutions robustes sous Kubernetes. En tant qu'experts en architecture, administration et automatisation des systèmes, nous savons que le choix du matériel est crucial. Des erreurs de dimensionnement peuvent impacter négativement les performances des applications. Une approche collaborative dès le début du projet est primordiale pour un équilibre optimal.
À cette fin, nous développons et peaufinons en continu une méthodologie en cinq étapes, conçue pour garantir que chaque projet que nous entreprenons soit non seulement exécuté avec maestria mais également parfaitement aligné avec les objectifs à long terme de nos clients. Voici comment nous procédons :
- Compréhension précise des besoins des applications : Une analyse minutieuse permet d'identifier les solutions matérielles les plus adaptées.
- Évaluation meticuleuse des solutions matérielles : Nous scrutons le marché pour sélectionner les composants les plus efficientes.
- Validation rigoureuse par des tests : Des benchmarks précis assurent l'adéquation entre performance attendue et matériel choisi.
- Collaboration continue : Une synergie étroite avec les clients et fournisseurs enrichit le processus de déploiement.
- Monitoring et amélioration continue : Un suivi attentif et des ajustements réguliers garantissent une performance accrue.
Conclusion
Comprendre les applications stateful et stateless est essentiel pour les DevOps dans l'ère de Kubernetes. En choisissant la bonne approche de stockage et en concevant une infrastructure robuste, les organisations peuvent garantir des performances et une scalabilité optimales pour leurs applications.
