ReplicaSets - ii02735/learn-k8 GitHub Wiki
Les ReplicaSets
Qu'est-ce qu'un ReplicaSet ?
Un ReplicaSet (littéralement « ensemble de réplicas ») est un contrôleur dont le rôle est de garantir qu'un nombre précis de Pods identiques tourne à tout moment dans le cluster.
On lui décrit :
- le nombre de réplicas souhaité (
spec.replicas) - un sélecteur (
spec.selector) qui identifie les Pods qu'il gère, via leurs labels - un modèle de Pod (
spec.template) servant à créer les Pods manquants
Une boucle de contrôle
Le ReplicaSet fonctionne en boucle : il observe en permanence les Pods correspondant à son sélecteur, puis les compare au nombre désiré.
- pas assez de Pods → il en crée de nouveaux à partir du
template - trop de Pods → il en supprime pour revenir au nombre voulu
C'est ce mécanisme qui assure la haute disponibilité : si un Pod tombe, il est automatiquement remplacé.
:warning: Un ReplicaSet ne sait ni mettre à jour ni faire de rollback : modifier l'image dans son template ne met pas à jour les Pods existants. C'est le rôle du Deployment.
Sélecteur et modèle de Pod
- Le sélecteur (
spec.selector.matchLabelsoumatchExpressions) doit correspondre aux labels duspec.template. - Le ReplicaSet adopte tout Pod existant dont les labels correspondent au sélecteur et qui n'a pas déjà de propriétaire. Il vaut donc mieux éviter de créer des Pods « orphelins » avec les mêmes labels.
- Les Pods créés portent une
ownerReferencevers le ReplicaSet : supprimer le ReplicaSet supprime ses Pods (par défaut).
[!NOTE]
spec.selectorest immuable après la création : pour le modifier, il faut recréer le ReplicaSet.
Un manifeste ReplicaSet
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: web
labels:
app: web
spec:
replicas: 3
selector:
matchLabels:
app: web
template:
metadata:
labels:
app: web
spec:
containers:
- name: app
image: nginx:1.27
ports:
- containerPort: 80
ReplicaSet ou Deployment ?
En pratique, on ne crée presque jamais un ReplicaSet directement : on passe par un Deployment, qui se charge de créer et de gérer les ReplicaSets.
- Deployment : gère les mises à jour (rolling update), les rollbacks et l'historique des versions ; chaque version correspond à un ReplicaSet.
- ReplicaSet : garantit simplement le nombre de réplicas ; c'est lui qui crée réellement les Pods.
:warning: Utiliser un ReplicaSet nu pour une application qu'on devra un jour mettre à jour revient à gérer les remplacements à la main. Préférer un Deployment.
Mettre à l'échelle
Le nombre de réplicas peut être ajusté :
- manuellement, en modifiant
spec.replicasou viakubectl scale - automatiquement, via un HorizontalPodAutoscaler (HPA) qui ajuste
replicasselon la charge (CPU, mémoire, métriques personnalisées…)
→ Le détail (manuel vs HPA, fonctionnement, VPA, Cluster Autoscaler) est sur La mise à l'échelle.
Les commandes principales
- Lister les ReplicaSets :
kubectl get replicasets(oukubectl get rs) - Obtenir les détails d'un ReplicaSet :
kubectl describe rs web - Lister les Pods gérés :
kubectl get pods -l app=web - Mettre à l'échelle :
kubectl scale rs web --replicas=5 - Supprimer un ReplicaSet et ses Pods :
kubectl delete rs web