
Un ReplicaSet garantit qu’un nombre défini de Pods reste toujours actif. Si un Pod disparaît, le ReplicaSet le recrée automatiquement. En pratique, vous ne créez jamais de ReplicaSet directement — c’est le Deployment qui s’en charge.
Ce guide vous aide à comprendre ce qui se passe sous le capot quand vous créez un Deployment.
Conseil : lisez d’abord le guide Deployments pour comprendre le contexte d’usage le plus courant des ReplicaSets.
ReplicaSet ou Deployment ?
Section intitulée « ReplicaSet ou Deployment ? »Un ReplicaSet maintient un nombre donné de Pods en fonctionnement. Un Deployment ajoute par-dessus la gestion des versions, des rolling updates et des rollbacks. En pratique, on manipule surtout des Deployments, qui créent et pilotent les ReplicaSets automatiquement.
| Ressource | Rôle principal |
|---|---|
ReplicaSet | Maintenir un nombre donné de Pods |
Deployment | Gérer les versions, mises à jour et rollbacks via des ReplicaSets |
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- Comprendre le rôle du ReplicaSet dans l’architecture Kubernetes
- Observer les ReplicaSets créés automatiquement par vos Deployments
- Distinguer ce que fait le ReplicaSet de ce que fait le Deployment
- Diagnostiquer un problème au niveau du ReplicaSet
Ce qu’est un ReplicaSet
Section intitulée « Ce qu’est un ReplicaSet »Un ReplicaSet est un contrôleur Kubernetes avec une mission simple : maintenir N Pods identiques en fonctionnement.
Son rôle :
- Surveiller les Pods correspondant à son selector
- Compter combien tournent actuellement
- Créer ou supprimer des Pods pour atteindre le nombre demandé (
replicas)
Voir les ReplicaSets créés par un Deployment
Section intitulée « Voir les ReplicaSets créés par un Deployment »Quand vous créez un Deployment, Kubernetes crée automatiquement un ReplicaSet. Vérifiez-le :
kubectl get deploymentskubectl get rsExemple de sortie :
NAME READY UP-TO-DATE AVAILABLEnginx-deploy 3/3 3 3
NAME DESIRED CURRENT READY AGEnginx-deploy-7d545bdd84 3 3 3 5mLe nom nginx-deploy-7d545bdd84 combine le nom du Deployment + un hash du template Pod.
La chaîne de propriété
Section intitulée « La chaîne de propriété »Vérifiez le propriétaire d’un ReplicaSet :
kubectl get rs nginx-deploy-7d545bdd84 -o jsonpath='{.metadata.ownerReferences[0].kind}'# Résultat : DeploymentEt le propriétaire d’un Pod :
kubectl get pods -l app=nginx -o jsonpath='{.items[0].metadata.ownerReferences[0].kind}'# Résultat : ReplicaSetPourquoi un Deployment crée un nouveau ReplicaSet à chaque mise à jour
Section intitulée « Pourquoi un Deployment crée un nouveau ReplicaSet à chaque mise à jour »Quand vous changez l’image d’un Deployment, Kubernetes crée un nouveau ReplicaSet au lieu de modifier l’existant :
kubectl set image deployment/nginx-deploy nginx=nginx:1.25kubectl get rs -l app=nginxRésultat :
NAME DESIRED CURRENT READYnginx-deploy-795dcb6589 3 3 3 # nouveaunginx-deploy-7d545bdd84 0 0 0 # ancien, scale à 0Pourquoi ? Le Deployment garde l’ancien ReplicaSet (avec 0 replicas) pour permettre un rollback instantané. C’est lui qui stocke l’historique des révisions.
Anatomie d’un ReplicaSet
Section intitulée « Anatomie d’un ReplicaSet »Un ReplicaSet contient 3 éléments essentiels :
| Champ | Description | Exemple |
|---|---|---|
replicas | Nombre de Pods à maintenir | 3 |
selector | Labels pour identifier les Pods gérés | app: nginx |
template | Modèle de Pod à créer | Image, ports, etc. |
apiVersion: apps/v1kind: ReplicaSetmetadata: name: nginx-rsspec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx # DOIT correspondre au selector spec: containers: - name: nginx image: nginx:1.24Le selector : comment le ReplicaSet trouve ses Pods
Section intitulée « Le selector : comment le ReplicaSet trouve ses Pods »Le selector est la règle qui définit quels Pods appartiennent au ReplicaSet. Le ReplicaSet surveille uniquement les Pods qui ont les labels correspondants.
matchLabels (simple)
Section intitulée « matchLabels (simple) »selector: matchLabels: app: nginx environment: productionÉquivalent à : “sélectionne les Pods où app=nginx ET environment=production”.
matchExpressions (avancé)
Section intitulée « matchExpressions (avancé) »Kubernetes prend aussi en charge des sélecteurs plus complexes (In, NotIn, Exists, DoesNotExist). Pour les détails, consultez le guide Labels et Selectors.
Ce que le ReplicaSet fait (et ne fait pas)
Section intitulée « Ce que le ReplicaSet fait (et ne fait pas) »Ce qu’il fait
Section intitulée « Ce qu’il fait »| Action | Comportement |
|---|---|
| Pod supprimé ou absent | Crée un nouveau Pod pour revenir à l’état souhaité |
| Scale up demandé | Crée les Pods manquants |
| Scale down demandé | Supprime les Pods excédentaires |
Ce qu’il ne fait PAS
Section intitulée « Ce qu’il ne fait PAS »| Limitation | Conséquence |
|---|---|
| Mise à jour des Pods | Modifier le template n’affecte pas les Pods existants |
| Rolling update | Pas de mise à jour progressive |
| Rollback | Pas d’historique des versions |
Démonstration : si vous modifiez l’image dans un ReplicaSet existant :
kubectl set image rs/nginx-rs nginx=nginx:1.25kubectl get pods -o jsonpath='{.items[*].spec.containers[0].image}'# Résultat : nginx:1.24 nginx:1.24 nginx:1.24Les Pods existants gardent l’ancienne image. Seuls les nouveaux Pods (si un Pod est supprimé et recréé) utiliseront la nouvelle image.
Cas particulier : créer un ReplicaSet manuellement
Section intitulée « Cas particulier : créer un ReplicaSet manuellement »Dans la pratique, ce cas est rare. Il peut servir à des démonstrations, à des tests ou à la compréhension du fonctionnement interne des Deployments.
apiVersion: apps/v1kind: ReplicaSetmetadata: name: echo-rsspec: replicas: 3 selector: matchLabels: app: echo template: metadata: labels: app: echo spec: containers: - name: echo image: hashicorp/http-echo:1.0.0kubectl apply -f replicaset-demo.yamlkubectl get rs echo-rsObserver et inspecter un ReplicaSet
Section intitulée « Observer et inspecter un ReplicaSet »Vue d’ensemble
Section intitulée « Vue d’ensemble »kubectl get rsNAME DESIRED CURRENT READY AGEecho-rs 3 3 3 2m| Colonne | Signification |
|---|---|
| DESIRED | Nombre de Pods demandé (replicas) |
| CURRENT | Nombre de Pods créés |
| READY | Nombre de Pods prêts (passant les probes) |
Détails complets
Section intitulée « Détails complets »kubectl describe rs echo-rsInformations clés à regarder :
- Selector : labels utilisés pour identifier les Pods
- Replicas :
X current / Y desired - Events : historique des actions (SuccessfulCreate, SuccessfulDelete)
Scaler un ReplicaSet
Section intitulée « Scaler un ReplicaSet »kubectl scale rs echo-rs --replicas=5Debug : problèmes au niveau ReplicaSet
Section intitulée « Debug : problèmes au niveau ReplicaSet »-
Vérifier l’état du ReplicaSet
Fenêtre de terminal kubectl get rsSi
READY < DESIRED, des Pods ne démarrent pas. -
Lister les Pods associés
Fenêtre de terminal kubectl get pods -l app=echoIdentifiez les Pods en
Pending,CrashLoopBackOffouError. -
Inspecter les événements du ReplicaSet
Fenêtre de terminal kubectl describe rs echo-rs | grep -A 20 Events -
Diagnostiquer un Pod spécifique
Fenêtre de terminal kubectl describe pod <nom-du-pod>kubectl logs <nom-du-pod>
Problèmes courants
Section intitulée « Problèmes courants »| Symptôme | Cause probable | Solution |
|---|---|---|
| CURRENT < DESIRED | Quota de ressources atteint | Vérifier kubectl describe ns <namespace> |
| Pods en Pending | Pas de node disponible | kubectl get nodes, libérer des ressources |
| Pods en CrashLoopBackOff | Erreur applicative | Vérifier les logs du Pod |
| selector ne match pas | Labels incohérents | Comparer selector et template.labels |
À retenir
Section intitulée « À retenir »- Un ReplicaSet maintient N Pods identiques, mais ne gère pas les mises à jour
- Un Deployment crée et gère les ReplicaSets automatiquement
- À chaque mise à jour, le Deployment crée un nouveau ReplicaSet (rollback possible)
- Le selector lie le ReplicaSet à ses Pods via les labels
- En pratique, vous n’interagissez pas directement avec les ReplicaSets