Deployments et ReplicaSets
Le Deployment est l'abstraction standard pour déployer des applications stateless. Il gère un ReplicaSet sous-jacent, qui lui-même maintient le nombre de pods demandé. La valeur ajoutée du Deployment sur le ReplicaSet brut : la gestion des mises à jour rolling et les rollbacks.
Deployment basique
apiVersion: apps/v1
kind: Deployment
metadata:
name: web
namespace: default
spec:
replicas: 3
selector:
matchLabels:
app: web # Doit correspondre aux labels des pods
template:
metadata:
labels:
app: web
spec:
containers:
- name: nginx
image: nginx:1.27-alpine
ports:
- containerPort: 80
resources:
requests:
cpu: "100m"
memory: "128Mi"
limits:
cpu: "500m"
memory: "256Mi"kubectl apply -f deployment.yaml
kubectl get deployment web
kubectl get replicaset # Le RS créé par le Deployment
kubectl get pods -l app=web # Les pods via leur labelStratégie de mise à jour
Par défaut : RollingUpdate. Kubernetes remplace les pods progressivement, en maintenant la disponibilité.
spec:
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1 # Pods supplémentaires autorisés pendant la MAJ
maxUnavailable: 0 # Zéro pod indisponible à tout moment (déploiement safe)# Mettre à jour l'image
kubectl set image deployment/web nginx=nginx:1.28-alpine
# Suivre le rollout
kubectl rollout status deployment/web
# Historique des révisions
kubectl rollout history deployment/web
# Rollback à la révision précédente
kubectl rollout undo deployment/web
# Rollback à une révision spécifique
kubectl rollout undo deployment/web --to-revision=2Stratégie Recreate
Arrête tous les pods existants avant d'en démarrer de nouveaux. Provoque une coupure brève mais garantit qu'une seule version tourne à la fois. Utile pour les applications qui ne supportent pas plusieurs versions concurrentes (migrations de schéma incompatibles, etc.).
spec:
strategy:
type: RecreateScaling
# Scaling manuel
kubectl scale deployment web --replicas=5
# Scaling automatique (HPA — couvert dans Workloads)
kubectl autoscale deployment web --min=2 --max=10 --cpu-percent=70Pause et reprise
On peut mettre un Deployment en pause pour appliquer plusieurs changements sans déclencher autant de rollouts :
kubectl rollout pause deployment/web
kubectl set image deployment/web nginx=nginx:1.28-alpine
kubectl set resources deployment/web -c nginx --limits=cpu=1,memory=512Mi
kubectl rollout resume deployment/web # Un seul rollout pour les deux changementsReplicaSet en direct
Le ReplicaSet est rarement manipulé directement — le Deployment le gère. Mais comprendre que chaque révision d'un Deployment crée un nouveau ReplicaSet (l'ancien est conservé avec 0 replicas pour permettre le rollback) aide à interpréter ce qu'on voit avec kubectl get rs.