Les applications avec état et sans état dans Kubernetes

Je suis dans un état d’incrédulité (jeu de mots) quand, en 2024, j’entends souvent les opérateurs de plateformes dire que Kubernetes est réservé aux workloads sans état, ou qu’ils n’exigent pas de protection des données, car « toutes nos applications sont sans état ». Dans cet article, j’aborderai la place des états dans nos applications, la montée du mythe « Kubernetes = sans état » et les besoins de protection des données dans l’ensemble des environnements Kubernetes.

Avec état ou sans état : les principes de base

« Sans état » fait référence à un workload qui ne nécessite pas de persistance avec état, de sorte que le redémarrage ou le redéploiement du workload signifie que toutes les données collectées ou les paramètres modifiés ont disparu. Par comparaison, les conteneurs sont intrinsèquement sans état, contrairement à leurs prédécesseurs, les machines virtuelles (VM) avec état. Lorsqu’un conteneur est redémarré, l’utilisateur sait que le workload exécuté correspond exactement à celui défini lors de la création initiale de l’image du conteneur.

En suivant cette logique, un workload avec état est celui qui conserve les données afin qu’elles puissent être accessibles, même après un redémarrage. Parmi les workloads avec état les plus courants, on trouve des bases de données comme PostgreSQL, MySQL ou MongoDB.

Alors, qu’est-ce qu’une application sans état ?

Les applications sont généralement constituées de plusieurs workloads. Même les applications monolithiques basées sur des machines virtuelles (VM) incluent en général des workloads distincts pour l’interface utilisateur, la logique métier et la base de données. Les applications natives du cloud, basées sur des microservices se composent souvent d’un plus grand nombre de workloads distincts, chacun ayant une fonction spécifique, dans le but de permettre aux entreprises de déployer de nouvelles fonctionnalités et de nouveaux services plus rapidement que jamais.

Cela signifie que, dans leur grande majorité, les applications sans état n’existent pas.

Votre application préférée de commande de repas, une application de gestion de tâches sur votre téléphone, ou encore un formulaire pour prendre rendez-vous chez le médecin, tous ces exemples seraient pratiquement inutilisables sans des workloads avec état capables de conserver les données stratégiques associées à chacun de ces cas d’usage.

Avec Kubernetes, il est essentiel de savoir où résident les données (ou états) de vos applications, à l’intérieur ou à l’extérieur du cluster.

Comment en sommes-nous arrivés là : Kubernetes = sans état ?

Alors que Docker est devenu une plate-forme de conteneurs de facto au début et au milieu des années 2010 pour l’empaquetage de logiciels, il était essentiel de disposer d’une solution pour orchestrer des groupes de conteneurs à grande échelle afin d’extraire toute la valeur opérationnelle d’un passage aux microservices – et Kubernetes l’a fait. Les déploiements déclaratifs, la haute disponibilité et la mise à l’échelle automatisée étaient des avantages majeurs pour les workloads sans état, qui pouvaient être arrêtés, redémarrés et clonés facilement. Ces workloads, souvent utilisées pour des tâches liées au front-end ou au traitement applicatif, pouvaient être connectés à des services de données fonctionnant en dehors du cluster. Ce modèle a été salué par beaucoup comme une réussite. Kubernetes était clairement une solution conçue pour les workloads sans état, n’est-ce pas ?

Pourtant, dès Kubernetes v1.0, à côté de toutes ces fonctionnalités remarquables pour les workloads sans état, figurait déjà le concept de volume persistant : un mécanisme natif de Kubernetes permettant d’attacher un stockage persistant à des pods éphémères. De toute évidence, l’intention de prendre en charge les workloads avec état a été prise en compte dès le départ, avec plusieurs améliorations notables en cours de route :

Ces avancées, soutenues par les efforts de nombreux fournisseurs et contributeurs, ont donné naissance à un écosystème riche. Les utilisateurs bénéficient ainsi de la liberté de choisir les services de données pour gérer l’état de leurs applications et de décider où exécuter ces workloads.

L’essor de GitOps

Au cours de cette période, la communauté Kubernetes a vu naître une nouvelle idée pour améliorer l’orchestration des conteneurs : GitOps. Le concept est simple : utiliser le contrôle de version comme source de vérité, en stockant tout ce qui est nécessaire pour déployer une application, y compris le code et les ressources Kubernetes. Chaque fois que le code est fusionné dans le référentiel pour apporter une modification, un contrôleur met à jour le déploiement pour refléter l’état souhaité décrit dans Git. Les implémentations GitOps peuvent fournir un mécanisme de contrôle des changements, la possibilité de redéployer un environnement entier en un seul clic et un moyen d’annuler les mauvais changements, parfois.

Le fait que Kubernetes puisse exécuter des workloads avec état signifie-t-il pour autant que vous devriez le faire ?

Chargé de créer une application de démonstration de concept, un développeur choisit souvent une base de données gérée hébergée dans le cloud ou DBaaS, pour héberger ses données persistantes en dehors du cluster Kubernetes. Les solutions DBaaS fournissent des API conviviales pour les développeurs et un délai de rentabilité rapide pour les utilisateurs, quel que soit leur niveau d’expertise en matière d’administration de bases de données. Cependant, comme c’est souvent le cas, ce qui est le plus facile n’est pas toujours le meilleur. Explorons les raisons d’envisager d’exécuter des workloads avec état à l’intérieur ou à l’extérieur du cluster :

En optant pour la consolidation des workloads sans état et avec état sur Kubernetes, vous gagnez en flexibilité quant à l’emplacement d’exécution des applications. Elle peut également fournir un libre-service supplémentaire pour les DevOps, réduire les coûts et rationaliser les outils et les processus. Cela permet d’appliquer la méthodologie GitOps à toutes les parties d’une application. Il n’est donc pas surprenant que, selon le dernier rapport de Datadog sur l’utilisation réelle des conteneurs, les bases de données restent la catégorie de workloads conteneurisés la plus populaire.

Protéger vos données sur Kubernetes

Équipe « avec état »

Si vous êtes déjà convaincu que les workloads avec état sur Kubernetes sont la voie à suivre, vous comprenez probablement déjà que fournir la sauvegarde et la reprise après incident de ces applications nécessite un outil spécifiquement conçu. Chaque application est composée de nombreuses ressources Kubernetes différentes (ConfigMaps, Secrets, Deployments, etc.) ainsi que de données de volume persistantes. Qui plus est, tous ces éléments doivent être correctement détectés, pris par snapshots et exportés vers un emplacement sécurisé hors cluster.

C’est là qu’intervient Veeam Kasten for Kubernetes, une solution native Kubernetes de protection des données et de mobilité des applications. Avec Kasten, les entreprises disposent d’un moyen simple à utiliser, évolutif et sécurisé de créer des sauvegardes inaltérables et de restaurer des applications entières de manière fiable et rapide.

Comme Kasten fournit une API déclarative native Kubernetes pour définir des stratégies, exécuter des actions, etc., la protection des données peut être étroitement intégrée à n’importe quelle implémentation GitOps. C’est le cas dans tous les scénarios d’utilisation, du déploiement et de la configuration de Kasten sur un nouveau cluster à l’amélioration de GitOps grâce à l’automatisation des sauvegardes avant le déploiement des mises à jour de code. À lui seul, GitOps offre la possibilité d’annuler les modifications de configuration d’une ressource Kubernetes ; toutefois, si l’une de ces mauvaises modifications altère les données d’un volume persistant (changement de schéma incorrect ou suppression d’une table, par exemple), il vous faudra une sauvegarde récente pouvant être rapidement restaurée.

Équipe « sans état »

Pas encore prêt à abandonner votre DBaaS préféré pour une nouvelle base de données hébergée sur Kubernetes et gérée par un opérateur ? Kasten est toujours là pour vous. Voyons pourquoi la protection des données natives Kubernetes est toujours nécessaire :

L’équipe Protection des données Kubernetes

Kubernetes a évolué pour prendre en charge tous les types de workloads, en dépit de la croyance persistante selon laquelle Kubernetes ne convient qu’aux workloads sans état. Alors que les entreprises s’efforcent de rentabiliser au mieux leurs investissements cloud natif, la transition vers l’exécution de workloads avec état devient inévitable. Performances et mobilité accrues, administration simplifiée des copies de données, persistance polyglotte et économies de coûts sont autant d’avantages qui attendent d’être réalisés.

Que l’on exécute des workloads avec ou sans état, la protection des données reste cruciale. Veeam Kasten for Kubernetes est une solution native Kubernetes pour la sauvegarde des applications et des données, la reprise après incident, la mobilité applicative et la protection contre les ransomwares. De plus, les méthodologies GitOps peuvent être améliorées en intégrant la protection des données dans les déploiements d’applications. Adopter les workloads avec état sur Kubernetes peut non seulement ouvrir de nouvelles opportunités de revenus, mais aussi offrir aux entreprises une plus grande flexibilité, des options en libre-service, une meilleure rentabilité et des opérations simplifiées.

Lancez-vous et essayez dès aujourd’hui notre solution gratuite Veeam Kasten Free ou la version d’essai Enterprise.

 

Exit mobile version