StatefulSets pour applications avec état
Déployez et gérez des applications avec état, comme des bases de données, avec StatefulSets, en garantissant des identifiants réseau stables et un stockage persistant.
StatefulSets pour applications avec état est une leçon DevOps Bootcamp gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage DevOps Bootcamp, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours DevOps Bootcamp comprend 4 leçons au total.
StatefulSets pour les applications à état
Bienvenue ! Dans cette leçon, vous allez découvrir les StatefulSets, un objet Kubernetes conçu pour gérer les applications à état.
Contrairement aux applications sans état (qui sont faciles à mettre à l’échelle et à remplacer), les applications à état nécessitent une identité unique et un stockage persistant pour chaque instance. Pensez aux bases de données, aux files de messages ou aux applications personnalisées qui stockent leurs données localement.
Pourquoi gérer l’état ? Le défi
Les déploiements traditionnels sont parfaitement adaptés aux applications sans état. Si un pod tombe en panne, un nouveau le remplace, et peu importe lequel traite la requête.
En revanche, pour les applications à état, chaque réplique a souvent besoin d’une identité stable et unique ainsi que de son propre stockage dédié. Si un pod de base de données redémarre, il doit se reconnecter à son volume de données spécifique.
Identité réseau et identité des pods stables
Une fonctionnalité essentielle des StatefulSets est de fournir des identifiants réseau stables et uniques à chaque pod.
- Les pods sont nommés de manière prévisible et ordonnée (par exemple :
web-0,web-1). - Ils conservent leur nom d’hôte lors des redémarrages.
- Cela permet aux autres services de se connecter de manière fiable à une réplique précise.
Stockage stable et persistant
Les StatefulSets garantissent que chaque pod dispose de son propre stockage stable et persistant. Cela est géré à l’aide de revendications de volumes persistants (PVCs).
Lorsqu’un pod d’un StatefulSet est créé, un PVC est automatiquement provisionné à partir d’une définition volumeClaimTemplates. Si le pod tombe en panne et est recréé, il se rattache au même PVC et retrouve ainsi ses données d’origine.
Anatomie d’un YAML de StatefulSet
Une définition YAML de StatefulSet ressemble à celle d’un déploiement, mais comporte quelques ajouts essentiels. Elle inclut :
apiVersion,kind,metadataspec.replicas,spec.selector,spec.template(comme pour les déploiements)spec.serviceName: établit le lien avec un service sans tête.spec.volumeClaimTemplates: définit la façon dont les PVCs sont créés pour chaque pod.
Service sans tête pour des identifiants stables
Pour fournir des identités réseau stables, les StatefulSets nécessitent un service sans tête. Un service sans tête ne possède pas d’IP de cluster. Il renvoie directement les adresses IP des pods qu’il sélectionne.
Le StatefulSet utilise ce service pour enregistrer des entrées DNS pour chacun de ses pods (par exemple : pod-0.my-service.my-namespace.svc.cluster.local).
apiVersion: v1
kind: Service
metadata:
name: my-app-headless
spec:
ports:
- port: 80
name: web
clusterIP: None # This makes it a headless service
selector:
app: my-appVolumeClaimTemplates
La section volumeClaimTemplates est propre aux StatefulSets. Il s’agit d’un modèle pour les revendications de volumes persistants (PVCs) qui seront créées pour chaque réplique.
Chaque pod du StatefulSet (par exemple : my-app-0, my-app-1) recevra son propre PVC (par exemple : data-my-app-0, data-my-app-1) à partir de ce modèle, ce qui garantit un stockage dédié.
volumeClaimTemplates:
- metadata:
name: data # This name is used in Pod's volumeMounts
spec:
accessModes: [ "ReadWriteOnce" ]
storageClassName: standard
resources:
requests:
storage: 1GiExemple complet de StatefulSet
Voici un exemple complet de StatefulSet Nginx simple. Remarquez le serviceName qui pointe vers le service sans tête, ainsi que les volumeClaimTemplates.
Pour le déployer, enregistrez-le sous le nom nginx-statefulset.yaml, puis exécutez kubectl apply -f nginx-statefulset.yaml.
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: web
spec:
serviceName: "nginx-headless" # Must match headless service name
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: k8s.gcr.io/nginx-slim:0.8
ports:
- containerPort: 80
name: web
volumeMounts:
- name: www # Mounts the volume from the PVC
mountPath: /usr/share/nginx/html
volumeClaimTemplates:
- metadata:
name: www # This name links to volumeMounts.name
spec:
accessModes: [ "ReadWriteOnce" ]
storageClassName: standard
resources:
requests:
storage: 1Gi
---
apiVersion: v1
kind: Service
metadata:
name: nginx-headless
labels:
app: nginx
spec:
ports:
- port: 80
name: web
clusterIP: None
selector:
app: nginxNommage et ordre des pods
Une fois le déploiement effectué, vous verrez des pods nommés comme web-0 et web-1. Ces indices sont stables et uniques.
Les StatefulSets imposent un ordre strict pour les opérations de mise à l’échelle. Les pods sont créés dans l’ordre (0, 1, 2...) et supprimés dans l’ordre inverse (..., 2, 1, 0).
Cette approche ordonnée est essentielle à de nombreux systèmes distribués à état pour préserver leur cohérence.
Mise à l’échelle et mises à jour progressives
Vous pouvez mettre un StatefulSet à l’échelle comme un déploiement, à l’aide de kubectl scale statefulset web --replicas=3.
Les mises à jour progressives fonctionnent également, avec les mêmes garanties d’ordre : les pods sont mis à jour un par un, dans l’ordre ordinal inverse, afin de garantir que le pod suivant n’est pas mis à jour tant que le précédent n’est pas prêt.
Cette orchestration minutieuse réduit les perturbations pour les applications à état.
Vérifiez votre compréhension
Parmi les éléments suivants, lesquels sont des caractéristiques ou des exigences essentielles des StatefulSets Kubernetes ?
Récapitulatif : les StatefulSets en action
Excellent travail ! Dans cette leçon, vous avez découvert les StatefulSets, un objet Kubernetes puissant pour gérer les applications à état.
- Ils fournissent des identités réseau stables et des opérations ordonnées.
- Ils utilisent
volumeClaimTemplatespour fournir un stockage dédié et persistant à chaque réplique. - Un service sans tête est indispensable à la stabilité de leurs identifiants réseau.
Les StatefulSets sont fondamentaux pour exécuter de manière fiable des bases de données et d’autres charges de travail critiques à état sur Kubernetes.
Questions Fréquemment Posées
La leçon « StatefulSets pour applications avec état » est-elle gratuite ?
Oui — le texte complet de « StatefulSets pour applications avec état » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours DevOps Bootcamp, passe à CoddyKit PRO. Le cours DevOps Bootcamp comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « StatefulSets pour applications avec état » ?
Déployez et gérez des applications avec état, comme des bases de données, avec StatefulSets, en garantissant des identifiants réseau stables et un stockage persistant. Tu pratiques DevOps Bootcamp avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer DevOps Bootcamp ?
Aucune expérience préalable n'est requise. DevOps Bootcamp sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.
Combien de temps prend la leçon « StatefulSets pour applications avec état » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon DevOps Bootcamp ?
Oui. Chaque leçon DevOps Bootcamp inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- StatefulSets pour applications avec état
- DaemonSets pour tâches propres aux nœuds
- Comprendre les opérateurs Kubernetes
- Définitions de ressources personnalisées (CRD)