
Un StatefulSet gère des Pods avec une identité stable, un stockage persistant dédié et un ordre de déploiement garanti. Contrairement à un Deployment où les Pods sont interchangeables, chaque Pod d'un StatefulSet conserve son nom, son réseau et son stockage même après un redémarrage.
Ce guide couvre la création, le headless Service, les
volumeClaimTemplates, les stratégies de mise à jour et la montée en
charge : tout ce qu'exige la certification CKAD.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- Créer un StatefulSet avec un headless Service
- Configurer le stockage persistant avec
volumeClaimTemplates - Comprendre le DNS stable des Pods StatefulSet
- Mettre à jour un StatefulSet avec RollingUpdate et partitions
- Choisir entre Deployment, StatefulSet et DaemonSet
Quand utiliser un StatefulSet ?
Section intitulée « Quand utiliser un StatefulSet ? »Un StatefulSet est conçu pour les applications qui nécessitent :
| Besoin | Exemple |
|---|---|
| Identité réseau stable | Chaque Pod garde son nom (app-0, app-1) |
| Stockage persistant dédié | Chaque Pod a son propre PVC |
| Ordre de déploiement | app-0 démarre avant app-1 |
| Scaling ordonné | Scale down en ordre inverse |
Cas d'usage typiques
Section intitulée « Cas d'usage typiques »Le point commun de ces quatre familles : un Pod n'y est pas interchangeable avec un autre. Une réplique de base de données détient des données que ses pairs n'ont pas ; un nœud etcd participe à une élection de leader qui suppose une identité fixe. C'est précisément ce que le Deployment ne sait pas garantir, et ce qui justifie le StatefulSet. Si votre application ne figure pas dans ce tableau et que ses instances sont parfaitement équivalentes, le comparatif en fin de guide vous orientera vers un Deployment, plus simple.
| Application | Pourquoi StatefulSet |
|---|---|
| Bases de données | PostgreSQL, MySQL, MongoDB, chaque instance a ses données |
| Clusters distribués | etcd, Zookeeper, Kafka, identité stable pour l'élection |
| Caches répliqués | Redis Cluster, nœuds avec rôles spécifiques |
| Queues de messages | RabbitMQ, identité stable pour le clustering |
Prérequis : le headless Service
Section intitulée « Prérequis : le headless Service »Cette leçon s'appuie sur deux modules déjà parcourus. Côté réseau, elle suppose acquis le fonctionnement des Services et la résolution de noms par CoreDNS. Côté stockage, elle réclame les PersistentVolumeClaims et le provisionnement dynamique par StorageClass. Si l'un des deux vous semble flou, revenez-y d'abord : un StatefulSet ne fait que combiner ces briques.
Un StatefulSet nécessite un headless Service pour fournir le DNS stable de chaque Pod.
Un headless Service se distingue d'un Service classique par
clusterIP: None. Au lieu de répartir la charge entre les Pods, il crée une
entrée DNS pour chacun d'eux, ce qui rend chaque réplique joignable
nommément.
apiVersion: v1kind: Servicemetadata: name: nginx labels: app: nginxspec: clusterIP: None # Headless Service selector: app: nginx ports: - port: 80 name: webAppliquer :
kubectl apply -f headless-service.yamlDNS stable des Pods
Section intitulée « DNS stable des Pods »Chaque Pod d'un StatefulSet obtient un nom DNS prévisible :
<nom-pod>.<service-headless>.<namespace>.svc.cluster.localExemple avec un StatefulSet web et un Service nginx dans le namespace
default :
| Pod | DNS complet |
|---|---|
web-0 | web-0.nginx.default.svc.cluster.local |
web-1 | web-1.nginx.default.svc.cluster.local |
web-2 | web-2.nginx.default.svc.cluster.local |
Ce DNS stable permet aux applications distribuées de joindre un pair précis, même après un redémarrage du Pod.
Créer un StatefulSet minimal
Section intitulée « Créer un StatefulSet minimal »Voici un StatefulSet simple avec 3 réplicas Nginx et un volume persistant de 1 Go par Pod :
apiVersion: apps/v1kind: StatefulSetmetadata: name: webspec: serviceName: nginx # Référence au headless Service replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.30@sha256:d5792f71a9496b833bc08ea834a758c46e2b6a6306c10f4be926f38a656cdc1c ports: - containerPort: 80 name: web volumeMounts: - name: www mountPath: /usr/share/nginx/html volumeClaimTemplates: - metadata: name: www spec: accessModes: ["ReadWriteOnce"] resources: requests: storage: 1GiPoints clés :
| Champ | Rôle |
|---|---|
serviceName: nginx | Lie le StatefulSet au headless Service |
replicas: 3 | Crée 3 Pods : web-0, web-1, web-2 |
volumeClaimTemplates | Crée un PVC dédié par Pod (www-web-0, www-web-1, etc.) |
Appliquer :
kubectl apply -f statefulset-nginx.yamlObserver le déploiement ordonné :
kubectl get pods -l app=nginx -w# NAME READY STATUS RESTARTS AGE# web-0 0/1 Pending 0 0s# web-0 1/1 Running 0 3s# web-1 0/1 Pending 0 0s # Démarre après web-0 Ready# web-1 1/1 Running 0 3s# web-2 0/1 Pending 0 0s # Démarre après web-1 Ready# web-2 1/1 Running 0 3sVérifier les PVC créés :
kubectl get pvc# NAME STATUS VOLUME CAPACITY ACCESS MODES# www-web-0 Bound pvc-xxx 1Gi RWO# www-web-1 Bound pvc-yyy 1Gi RWO# www-web-2 Bound pvc-zzz 1Gi RWOLa création est ordonnée, et cela se voit
Section intitulée « La création est ordonnée, et cela se voit »C'est la différence la plus visible avec un Deployment, qui démarrerait ses
trois Pods en même temps. Ici, web-1 n'est même pas créé tant que
web-0 n'est pas prêt.
kubectl get pods -l app=nginx -wt+2s web-0 Pendingt+6s web-0 ContainerCreatingt+8s web-0 Running web-1 Pendingt+10s web-0 Running web-1 Running web-2 Pendingt+14s web-0 Running web-1 Running web-2 RunningChaque Pod obtient au passage son volume, nommé d'après le
volumeClaimTemplates et l'ordinal du Pod :
kubectl get pvcNAME STATUS VOLUME CAPACITY STORAGECLASSwww-web-0 Bound pvc-5fcd8b67-ea3c-4df8-88b4-0b1abc6277a0 1Gi standardwww-web-1 Bound pvc-f8e36aa0-2ef6-40cd-bf14-7cbc08bd1da9 1Gi standardwww-web-2 Bound pvc-f3b52c18-eae6-41a8-a9ae-fc67306aed0e 1Gi standardLa règle de nommage est <nom-du-template>-<nom-du-statefulset>-<ordinal>,
et c'est elle qui permet au même Pod de retrouver le même volume.
Les valeurs par défaut, relevées sur l'objet créé
Section intitulée « Les valeurs par défaut, relevées sur l'objet créé »| Champ | Défaut |
|---|---|
updateStrategy.type | RollingUpdate |
updateStrategy.rollingUpdate.partition | 0 |
podManagementPolicy | OrderedReady |
persistentVolumeClaimRetentionPolicy.whenDeleted | Retain |
persistentVolumeClaimRetentionPolicy.whenScaled | Retain |
revisionHistoryLimit | 10 |
Les deux Retain sont la raison pour laquelle vos volumes survivent à tout, y
compris à ce que vous ne vouliez pas conserver.
Observer et diagnostiquer un StatefulSet
Section intitulée « Observer et diagnostiquer un StatefulSet »Observer un StatefulSet demande de regarder trois objets, pas un. Le StatefulSet lui-même dit combien de répliques sont prêtes ; les Pods portent les identités numérotées et disent laquelle bloque ; les PVC révèlent l'état du stockage, qui est la cause la plus fréquente d'un Pod qui ne démarre pas. Les commandes ci-dessous suivent cet ordre, et elles sont aussi celles attendues à l'examen CKAD.
Commandes principales
Section intitulée « Commandes principales »Ces commandes se lisent du survol au détail. Retenez l'abréviation
sts, le nom court de statefulset accepté partout, qui fait gagner un
temps précieux à l'examen. La plus révélatrice est kubectl rollout status sts/web : elle bloque jusqu'à la fin d'une mise à jour et affiche sa
progression Pod par Pod, de quoi savoir si un déploiement avance ou
reste coincé sur un ordinal donné.
# Vue d'ensemble des StatefulSetskubectl get sts
# Détails complets (événements, stratégie, réplicas)kubectl describe sts web
# Pods du StatefulSet avec leurs nœudskubectl get pods -l app=nginx -o wide
# PVC associéskubectl get pvc -l app=nginx
# État du rollout en courskubectl rollout status sts/web
# Historique des révisionskubectl rollout history sts/webVérifier le DNS stable, et le piège du nom court
Section intitulée « Vérifier le DNS stable, et le piège du nom court »Depuis un Pod du cluster, interrogez le nom pleinement qualifié. La précision a l'air pédante, elle ne l'est pas du tout : le piège décrit juste après en dépend.
kubectl run dns-test --rm -it \ --image=busybox:1.37@sha256:9db7b59979c38555a39def84a31fb98b5296952f9e3afd4f6f11f05b07adfab0 \ -- nslookup web-0.nginx.default.svc.cluster.localServer: 10.96.0.10Address: 10.96.0.10:53
Name: web-0.nginx.default.svc.cluster.localAddress: 10.244.1.199nslookup échoue sur le nom court, et pourtant l'application se connecte
Section intitulée « nslookup échoue sur le nom court, et pourtant l'application se connecte »Tentez la même chose sur web-0.nginx, sans le suffixe, et vous n'obtenez
aucune adresse. La conclusion naturelle, « mon DNS de StatefulSet est
cassé », est pourtant fausse : au même instant, depuis le même
conteneur, curl http://web-0.nginx répond HTTP 200.
La raison tient en une phrase. nslookup et dig interrogent le nom tel
quel, alors que la liste search de /etc/resolv.conf, celle qui complète
web-0.nginx en web-0.nginx.<namespace>.svc.cluster.local, est appliquée par
le résolveur de la libc : donc par vos applications, et pas par ces
deux outils. Mesuré :
| Commande | Résultat |
|---|---|
dig +short web-0.nginx | rien |
dig +search +short web-0.nginx | 10.244.1.199 |
getent hosts web-0.nginx | 10.244.1.199 |
curl http://web-0.nginx | HTTP 200 |
Diagnostiquez donc avec le FQDN, ou avec getent hosts, qui passe par la
libc comme votre application.
Un dernier piège si votre Service s'appelle web : le nom court ne rend
pas « rien » mais 127.0.53.53, l'adresse réservée aux collisions de
noms, car .web est un vrai domaine de premier niveau et la requête part
donc vers l'extérieur. Une réponse fausse est plus dangereuse qu'une
absence de réponse.
Prouver l'identité stable en une manipulation
Section intitulée « Prouver l'identité stable en une manipulation »L'affirmation « le Pod retrouve son nom et son volume » se vérifie en trois commandes : on écrit une marque dans le volume, on supprime le Pod, on relit.
kubectl exec web-1 -- sh -c 'echo marque-web-1 > /usr/share/nginx/html/index.html'kubectl delete pod web-1kubectl exec web-1 -- cat /usr/share/nginx/html/index.htmlmarque-web-1Le Pod revient sous le même nom, avec un UID différent (c'est bien un
nouveau Pod), et remonte le même PVC, www-web-1. Un Deployment aurait
rendu un nom aléatoire et, sans volume nommé, une page vide.
Stratégies de mise à jour
Section intitulée « Stratégies de mise à jour »Kubernetes supporte deux stratégies de mise à jour pour les StatefulSets.
RollingUpdate (par défaut)
Section intitulée « RollingUpdate (par défaut) »C'est la stratégie par défaut. Kubernetes met à jour les Pods un par un, en ordre inverse, du plus grand ordinal vers le plus petit, et n'entame le suivant qu'une fois le précédent Ready.
spec: updateStrategy: type: RollingUpdateComportement :
web-2est mis à jour et doit devenir Ready- Puis
web-1est mis à jour - Puis
web-0
Appliquer une mise à jour, ici le passage de nginx:1.30 à
nginx:1.31.3. Le digest accompagne le tag, comme partout ailleurs dans
cette formation : c'est lui qui garantit que les trois Pods redémarrent sur
exactement la même image :
kubectl set image sts/web \ nginx=nginx:1.31.3@sha256:8541484afbc9c8a5a8a99b379568ebbc957f658583ec9448fc43104229c03cf8Suivre la progression :
kubectl rollout status sts/web# Waiting for partitioned roll out to finish: 0 out of 3 new pods have been updated...# statefulset rolling update complete 3 pods...Rolling update partitionné (canary)
Section intitulée « Rolling update partitionné (canary) »Vous pouvez limiter la mise à jour aux Pods d'ordinal supérieur ou égal à
une valeur avec partition. C'est utile pour les déploiements progressifs.
spec: updateStrategy: type: RollingUpdate rollingUpdate: partition: 2 # Seul web-2 sera mis à jourExemple : avec partition: 2 et 3 réplicas :
web-2: reçoit la nouvelle specweb-1: garde l'ancienne specweb-0: garde l'ancienne spec
C'est une forme de canary deployment pour StatefulSet.
OnDelete (contrôle manuel)
Section intitulée « OnDelete (contrôle manuel) »Avec OnDelete, Kubernetes ne met pas à jour automatiquement les Pods. Vous
devez les supprimer manuellement pour qu'ils soient recréés avec la nouvelle
spec.
spec: updateStrategy: type: OnDeleteWorkflow :
# 1. Modifier la spec du StatefulSetkubectl apply -f statefulset-updated.yaml
# 2. Les Pods existants ne changent pas
# 3. Supprimer manuellement un Pod pour déclencher sa recréationkubectl delete pod web-0
# 4. Le nouveau Pod est créé avec la nouvelle specAnnuler une mise à jour
Section intitulée « Annuler une mise à jour »Si une nouvelle version se comporte mal, kubectl rollout undo ramène le
StatefulSet à la révision précédente enregistrée dans son historique. Le retour
suit la même mécanique ordonnée qu'une mise à jour normale : les Pods reviennent
à l'ancienne spec un par un, du plus grand ordinal vers le plus petit. Une
limite à connaître pour la CKAD : le rollback restaure la spec des Pods, il
ne restaure pas les données déjà écrites sur les volumes persistants, qui
survivent au changement de version.
kubectl rollout undo sts/webPolitique de gestion des Pods
Section intitulée « Politique de gestion des Pods »Par défaut, les Pods sont créés et supprimés de manière ordonnée. Vous
pouvez changer ce comportement avec podManagementPolicy.
OrderedReady (par défaut)
Section intitulée « OrderedReady (par défaut) »Les Pods sont créés un par un, chacun devant être Ready avant que le suivant soit tenté. À la réduction du nombre de répliques, ils sont supprimés en ordre inverse, du plus grand ordinal au plus petit.
spec: podManagementPolicy: OrderedReady # Par défautCas d'usage : applications où l'ordre de démarrage est critique (bases de données distribuées, clusters avec élection de leader).
Parallel
Section intitulée « Parallel »Les Pods peuvent être créés ou supprimés simultanément. Kubernetes n'attend pas que chaque Pod soit Ready avant de passer au suivant.
spec: podManagementPolicy: ParallelCas d'usage : applications tolérantes au démarrage simultané, où la vitesse de scaling est prioritaire sur l'ordre.
Scaling d'un StatefulSet
Section intitulée « Scaling d'un StatefulSet »La montée en charge d'un StatefulSet n'a rien de symétrique, et c'est ce
qu'il faut retenir. La montée crée les Pods dans l'ordre croissant, la
descente les supprime dans l'ordre décroissant, du plus grand indice au
plus petit. Un web-0 n'est donc jamais supprimé tant qu'il reste un
web-1, ce qui protège le Pod qui sert souvent de référence dans les
applications à réplication.
Deuxième asymétrie, moins visible : les PVC ne suivent pas les Pods. Réduire à une réplique supprime deux Pods mais laisse deux PVC en place, avec le stockage qu'ils réservent. La section suivante explique comment en décider.
Scale up
Section intitulée « Scale up »kubectl scale sts web --replicas=5Avec OrderedReady, les nouveaux Pods sont créés dans l'ordre : web-3, puis
web-4.
Scale down
Section intitulée « Scale down »kubectl scale sts web --replicas=2Les Pods sont supprimés en ordre inverse : web-4, web-3, web-2.
Le comportement par défaut est de tout conserver, et il se vérifie sur le StatefulSet lui-même :
kubectl get statefulset web -o jsonpath='{.spec.persistentVolumeClaimRetentionPolicy}'{"whenDeleted":"Retain","whenScaled":"Retain"}Concrètement, réduire de trois répliques à une supprime web-1 et web-2
mais laisse www-web-1 et www-web-2 en état Bound. Une
remontée en charge ultérieure les retrouve intacts, et c'est exactement
l'intention. La contrepartie est double : un coût de stockage qui ne
baisse pas quand vous réduisez, et des volumes oubliés qui
s'accumulent.
Suppression d'un StatefulSet
Section intitulée « Suppression d'un StatefulSet »Supprimer un StatefulSet pose une question que les Deployments ne posent pas : que faire des données. Trois portées sont possibles et se combinent mal si on ne les distingue pas. Vous pouvez supprimer le contrôleur en laissant les Pods vivre, supprimer contrôleur et Pods en laissant les PVC, ce qui est le comportement par défaut, ou tout supprimer, ce qui exige un geste explicite et reste irréversible.
Conserver les Pods (orphan)
Section intitulée « Conserver les Pods (orphan) »Pour supprimer le StatefulSet sans toucher aux Pods :
kubectl delete sts web --cascade=orphanLes Pods continuent de tourner, mais ne sont plus gérés par un contrôleur. Utile pour recréer un StatefulSet avec une configuration différente.
Suppression complète
Section intitulée « Suppression complète »kubectl delete sts webCela supprime le StatefulSet et ses Pods, mais pas les PVC.
Supprimer aussi les PVC
Section intitulée « Supprimer aussi les PVC »kubectl delete sts webkubectl delete pvc -l app=nginxPolitique de rétention des PVC
Section intitulée « Politique de rétention des PVC »Le champ persistentVolumeClaimRetentionPolicy décide du sort des PVC à la
suppression du StatefulSet et à la réduction du nombre de répliques. Il
est stable depuis Kubernetes 1.32 et ne demande donc aucun feature gate à
activer :
spec: persistentVolumeClaimRetentionPolicy: whenDeleted: Retain # Garde les PVC quand le StatefulSet est supprimé whenScaled: Delete # Supprime les PVC quand le Pod est supprimé par scaling| Valeur | Comportement |
|---|---|
Retain | Les PVC sont conservés (comportement par défaut actuel) |
Delete | Les PVC sont supprimés avec le Pod/StatefulSet |
Dépannage des StatefulSets
Section intitulée « Dépannage des StatefulSets »Un StatefulSet en panne se diagnostique autrement qu'un Deployment, pour
une raison unique : l'ordre est bloquant. Si web-1 ne démarre pas, web-2
ne sera même pas tenté, et vous verrez un StatefulSet arrêté à deux
répliques sans aucun événement sur le troisième Pod, qui n'existe pas
encore. Cherchez donc toujours le Pod au plus petit indice non prêt : c'est
lui qui bloque toute la série, le reste n'en est que la conséquence.
Problèmes courants
Section intitulée « Problèmes courants »La particularité du dépannage d'un StatefulSet tient à son ordre strict :
un Pod n'est créé que si son prédécesseur est Ready. La deuxième ligne du
tableau en découle, et c'est la cause la plus déroutante pour un débutant :
si web-1 reste bloqué, la vraie panne est souvent sur web-0. Le second
foyer de problèmes est le stockage : un Pod ou un PVC coincé en Pending
désigne presque toujours une StorageClass absente ou un provisionneur
muet, à confirmer avec kubectl describe pvc.
| Symptôme | Cause probable | Solution |
|---|---|---|
Pod Pending | Pas de PV disponible ou StorageClass manquante | kubectl describe pod + vérifier StorageClass |
| Pod ne démarre pas | Pod précédent pas Ready | Vérifier l'état du Pod d'ordinal inférieur |
PVC Pending | Provisioner défaillant ou quota atteint | kubectl describe pvc |
| DNS non résolu | Headless Service manquant ou mal configuré | Vérifier clusterIP: None |
| Mise à jour bloquée | Pod en erreur | kubectl describe pod + logs |
Commandes de diagnostic
Section intitulée « Commandes de diagnostic »Suivez ces commandes du plus large au plus ciblé. Commencez toujours par la
section Events de kubectl describe sts web : le contrôleur y consigne
pourquoi il n'avance pas, attente d'un PVC ou échec de placement.
Descendez ensuite au Pod bloquant, celui dont l'ordinal est le plus petit
parmi ceux qui ne sont pas Ready, puis à son PVC. Le --timeout=60s sur
rollout status évite d'attendre indéfiniment un déploiement qui ne se
terminera jamais.
# Voir les événements du StatefulSetkubectl describe sts web
# Vérifier un Pod spécifiquekubectl describe pod web-0kubectl logs web-0
# Vérifier les PVCkubectl describe pvc www-web-0
# État du rolloutkubectl rollout status sts/web --timeout=60sComparatif : Deployment vs StatefulSet vs DaemonSet
Section intitulée « Comparatif : Deployment vs StatefulSet vs DaemonSet »Choisir la bonne ressource est essentiel pour la CKAD.
| Critère | Deployment | StatefulSet | DaemonSet |
|---|---|---|---|
| Identité des Pods | Anonyme | Stable (app-0, app-1) | Anonyme |
| Nommage | Hash aléatoire | Ordinal incrémental | Hash aléatoire |
| Stockage | PVC partagé ou sans état | PVC dédié par Pod | Généralement hostPath |
| Ordre de déploiement | Non garanti | Ordonné (par défaut) | Non garanti |
| DNS stable | Non | Oui (headless Service) | Non |
| Scaling | Horizontal libre | Ordonné | Suit les nœuds |
| Cas d'usage | APIs, web stateless | Bases de données, clusters | Agents système |
Arbre de décision
Section intitulée « Arbre de décision »Cet arbre reprend le tableau sous forme de questions à se poser dans l'ordre. La première tranche le cas le plus net : une charge qui doit tourner sur chaque nœud, agent de journaux ou exportateur de métriques, relève du DaemonSet, sans discussion. Ne descendez vers le StatefulSet que si vous répondez oui à la combinaison identité stable ET stockage dédié par instance : l'un sans l'autre ne le justifie pas, et un Deployment avec un volume partagé suffit souvent.
Exemple avancé : cluster distribué
Section intitulée « Exemple avancé : cluster distribué »Cet exemple rassemble ce qu'un cluster distribué demande en production :
anti-affinité, sondes, ressources bornées et arrêt propre. Deux
points conditionnent son fonctionnement. L'anti-affinité est required,
donc il faut au moins trois nœuds : sur un cluster à un seul nœud, deux Pods
resteront Pending. Et la commande du conteneur crée elle-même les fichiers
/tmp/healthy et /tmp/ready que lisent les sondes, sans quoi aucun Pod ne
deviendrait jamais Ready et le StatefulSet n'irait pas au-delà du premier.
apiVersion: apps/v1kind: StatefulSetmetadata: name: distributed-appspec: serviceName: distributed-app replicas: 3 podManagementPolicy: OrderedReady updateStrategy: type: RollingUpdate rollingUpdate: partition: 0 selector: matchLabels: app: distributed-app template: metadata: labels: app: distributed-app spec: affinity: podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchLabels: app: distributed-app topologyKey: kubernetes.io/hostname terminationGracePeriodSeconds: 30 containers: - name: app image: busybox:1.37@sha256:9db7b59979c38555a39def84a31fb98b5296952f9e3afd4f6f11f05b07adfab0 command: - sh - -c - touch /tmp/healthy /tmp/ready && echo "Pod $(hostname) démarré" && sleep infinity ports: - containerPort: 8080 name: http volumeMounts: - name: data mountPath: /data resources: requests: cpu: 100m memory: 128Mi limits: cpu: 200m memory: 256Mi livenessProbe: exec: command: ["cat", "/tmp/healthy"] initialDelaySeconds: 5 periodSeconds: 10 readinessProbe: exec: command: ["cat", "/tmp/ready"] initialDelaySeconds: 5 periodSeconds: 5 volumeClaimTemplates: - metadata: name: data spec: accessModes: ["ReadWriteOnce"] resources: requests: storage: 5GiPoints clés :
podAntiAffinity: empêche deux Pods d'être sur le même nœudterminationGracePeriodSeconds: 30: laisse le temps à l'application de se terminer proprementlivenessProbeetreadinessProbe: indispensables aux mises à jour ordonnées, puisque c'est l'état Ready qui autorise le passage au Pod suivant. Une sonde qui ne peut pas réussir fige donc tout le StatefulSet
À retenir
Section intitulée « À retenir »- Un StatefulSet fournit une identité stable (
app-0,app-1) et un stockage persistant dédié par Pod - Il nécessite un headless Service (
clusterIP: None) pour le DNS stable - La stratégie de mise à jour par défaut est RollingUpdate, pas OnDelete
volumeClaimTemplatescrée automatiquement un PVC par Pod- Les mises à jour se font en ordre inverse (du plus grand ordinal vers le plus petit)
podManagementPolicy: Parallelaccélère le scaling mais pas les updates- Les PVC ne sont pas supprimés automatiquement lors d'un scale down ou
d'une suppression du StatefulSet (sauf avec
persistentVolumeClaimRetentionPolicy) - Le DNS d'un Pod est
<pod>.<service>.<namespace>.svc.cluster.local
Contrôle de connaissances
Section intitulée « Contrôle de connaissances »Sept questions sur ce qui distingue vraiment un StatefulSet d'un Deployment : l'ordre, l'identité stable, et le sort des volumes quand on réduit le nombre de répliques.
Contrôle de connaissances
Validez vos connaissances avec ce quiz interactif
Informations
- Le chronomètre démarre au clic sur Démarrer
- Questions à choix multiples, vrai/faux et réponses courtes
- Vous pouvez naviguer entre les questions
- Les résultats détaillés sont affichés à la fin
Lance le quiz et démarre le chronomètre
Vérification
(0/0)Profil de compétences
Quoi faire maintenant
Ressources pour progresser
Des indices pour retenter votre chance ?
Nouveau quiz complet avec des questions aléatoires
Retravailler uniquement les questions ratées
Retour à la liste des certifications
Pour aller plus loin
Section intitulée « Pour aller plus loin »- Les Opérateurs : Ce qui prend le relais quand un StatefulSet ne suffit plus à piloter une base de données.
- Opérateurs et CRD : Étendre l'API avec ses propres objets, la suite naturelle du modèle StatefulSet.
- Scheduling avancé : La répartition des réplicas sur des nœuds et des zones distincts.