Comprendre la gestion des états dans Kubernetes

Effectué

Lorsqu’il est question d’applications en général, vous entendrez souvent le terme état de l’application. Dans cette unité, nous examinons la définition de l’état et les différents types d’états afin de mieux préparer votre application à la gestion de ces états.

State

L’état de l’application est tout ce qui est stocké en mémoire au moment de l’exécution de cette application. L’état peut impliquer différentes choses, mais nous nous concentrons principalement sur les données utilisateur.

Pour donner un exemple d’état d’application, imaginez que votre lecteur de musique est ouvert. Cette application a un état. Elle sait qui vous êtes, ce que vous aimez écouter et quels morceaux de musique vous avez téléchargés. Toutes ces informations constituent une partie de l’état de l’application.

L’état en mémoire est constitué des informations que l’application n’a pas besoin de rechercher ailleurs. L’état du disque contient les informations dont l’application ne dispose pas : elle doit donc les récupérer auprès d’une autre source de données.

Types d’états

Il existe deux types d’état d’application. Le premier est l’état éphémère, qui n’est pas persistant et disparaît dès que l’application est fermée.

Les conteneurs ont un état éphémère. Toutes les données qui y sont stockées sont perdues instantanément lorsque le conteneur est supprimé. Certaines applications peuvent fonctionner avec ce seul état, car elles peuvent le regénérer à partir d’autres sources : elles n’ont donc pas besoin que l’état soit stocké localement. Ces applications sont connues sous le nom d’applications stateless.

Tous les états restants non éphémères sont qualifiés d’état persistant. L’état persistant continue d’exister au-delà du cycle de vie d’un conteneur. La plupart des technologies de conteneur que nous utilisons s’appuient sur le concept de volume, qui est l’emplacement sur disque où se trouve l’état. Même si vous retirez le conteneur et le réactivez par la suite, l’état reste stocké en lieu sûr et peut être utilisé.

Les applications qui reposent sur un état externe à récupérer sont connues sous le nom d’applications stateful.

États et Kubernetes

Kubernetes peut gérer les applications sans état et avec état. Les applications sans état sont plus faciles à gérer, car nous pouvons nous concentrer uniquement sur l’application proprement dite, et non sur son état (puisqu’il n’existe pas).

Pour la plupart des applications sans état, une charge de travail de déploiement simple avec un pod suffit pour disposer d’un système entièrement fonctionnel et pour tirer le meilleur parti possible d’un cluster.

La gestion des applications avec état est tout l’inverse. Dans ce cas, vous devez tenir compte de l’application et de son état, de l’endroit où l’état est stocké, et de la façon dont vous pouvez stocker l’état de manière sécurisée et fiable.

C’est pour cette raison que Kubernetes s’appuie également sur le concept de PersistentVolumes (PV) et de PersistentVolumeClaims (PVC).

Conseil

Ce module ne traite pas davantage des concepts de stockage, mais vous pouvez vous référer aux ressources Azure Kubernetes Service mentionnées dans le résumé pour en savoir plus.

PersistentVolumes sont des disques alloués dans des nœuds pour stocker les états du conteneur d’un pod. Comme Kubernetes est idéal pour les applications distribuées, tous les volumes créés se trouvent dans un pool de volumes disponibles. Les conteneurs revendiquent ensuite cet espace pour eux-mêmes. Vous pouvez utiliser PersistentVolumeClaims pour lier un PersistentVolume à un pod et utiliser son espace pour stocker les données nécessaires.

Tous les fournisseurs de base de données sont des applications avec état. Si vous déployez un fournisseur de base de données dans votre cluster, vous avez besoin d’un volume persistant et d’une revendication de volume persistant pour stocker les données de la base de données en lieu sûr et pour autoriser le fournisseur à récupérer ces données même si ses conteneurs ont été supprimés.

Bonnes pratiques pour la gestion des états

L’état est présent dans la plupart des applications. Cependant, une bonne pratique pour gérer l’état est de ne pas le traiter du tout.

Vous concevez une application efficace dans le but de la rendre hautement disponible et scalable. Pour l’état, c’est tout l’inverse. Malgré les options fournies par les fournisseurs de stockage et la facilité de déploiement et d’utilisation, l’état ne s’adapte pas facilement. Il n’est pas non plus hautement disponible.

État hautement disponible

Pour être hautement disponible, une application doit être en ligne tout le temps. Ceci s’obtient via la réplication de zone et de région. Kubernetes prend en charge les zones dans la plupart de ses charges de travail. Cela signifie que vous pouvez avoir plusieurs instances d’une application qui sont déployées dans différentes zones. Les disques ne prennent cependant pas en charge les zones.

Quand vous déployez un nouvel objet PersistentVolume sur Kubernetes, il est lié à un disque sur un nœud. Ce disque est également lié à une zone particulière dans une région particulière. L’utilisation de la réplication de zone ou de région avec des volumes persistants s’avère complexe et nécessite beaucoup de maintenance, aussi bien pour la réplication des données que pour leur synchronisation.

État hautement scalable

Pour être hautement évolutive, une application doit accroître son débit à mesure que le nombre d’utilisateurs qui s’y connectent augmente. Cette opération est compliquée du point de vue de la gestion des états, car un état externe correspond généralement à un disque, et un disque a un débit limité en entrée et en sortie. La gestion du débit aide à résoudre ce problème.

Les solutions de base de données ont eu l’idée de faire appels à des ReplicaSets, qui répliquent l’ensemble de la base de données dans plusieurs instances. La réplication augmente le nombre de disques et les E/S pour l’état.

À chaque modification de la base de données, l’état doit être synchronisé afin que tous les disques contiennent les mêmes données. Cette synchronisation est également complexe.

Externalisation de l’état

Azure dispose de solutions PaaS (platform as a service), telles qu’Azure Cosmos DB, qui sont hautement disponibles et évolutives et résolvent la plupart des problèmes de gestion de l’état pour vous.

Le fait de stocker l’état en externe et de supprimer la nécessité d’une maintenance vous permet de vous concentrer sur l’application et de réduire le surcroît de travail que représente la gestion de l’intégrité des données dans votre infrastructure.

Vérifiez vos connaissances

1.

Qu’est-ce que l’état persistant d’une application ?

2.

Comment Kubernetes gère les états ?

3.

Parmi les affirmations suivantes, laquelle est une bonne pratique pour gérer l’état dans les applications Kubernetes ?