Déploiements et Scaling¶
Table des Matières¶
- Déploiements (Deployments)
- Définition et Structure
- Cas d'Usage
- Scaling des Applications
- ReplicaSets
- Horizontal Pod Autoscaling (HPA)
- Stratégies de Déploiement
- Rolling Update
- Canary
- Blue-Green
- Commandes Utiles
Déploiements¶
Définition et Structure¶
Un Deployment Kubernetes permet de gérer des Pods et ReplicaSets en déclarant un état désiré. Kubernetes maintient automatiquement cet état.
Exemple de Deployment :
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.23.3
Points clés :
- Les labels (metadata, selector, template) doivent être cohérents
- replicas définit le nombre de pods souhaités
- template décrit les pods à créer
Cas d'Usage¶
- Mise à l'échelle : Augmenter/diminuer le nombre de pods
- Historique : Gestion des versions et rollback
- Mises à jour : Déploiement sans interruption
- Auto-réparation : Redémarrage automatique des pods défaillants
Scaling¶
ReplicaSets¶
Un ReplicaSet maintient un nombre stable de pods identiques.
Exemple :
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: frontend
labels:
app: guestbook
tier: frontend
spec:
replicas: 3
selector:
matchLabels:
tier: frontend
template:
metadata:
labels:
tier: frontend
spec:
containers:
- name: php-redis
image: gcr.io/google_samples/gb-frontend:v3
Préférer les Deployments qui offrent plus de fonctionnalités
Horizontal Pod Autoscaling¶
L'HPA ajuste automatiquement le nombre de pods basé sur l'utilisation des ressources.
Exemple HPA :
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
name: frontend-scaler
spec:
scaleTargetRef:
kind: ReplicaSet
name: frontend
minReplicas: 3
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 50
Prérequis : - Serveur de métriques installé (Metrics Server) - Demandes de ressources définies dans les pods
Stratégies de Déploiement¶
Rolling Update (Par Défaut)¶
Mise à jour progressive pod par pod pour éviter les interruptions.
Commande :
kubectl set image deployment/nginx-deployment nginx=nginx:1.23.3
Canary¶
Déploie la nouvelle version sur un sous-ensemble de pods (ex: 20%) pour tester avant déploiement complet.
Blue-Green¶
- Deux environnements complets (blue = actuel, green = nouveau)
- Basculement instantané du trafic une fois la nouvelle version validée
Commandes Utiles¶
| Commande | Description |
|---|---|
kubectl apply -f deployment.yml |
Créer/mettre à jour un déploiement |
kubectl set image deployment/<name> <container>=<image> |
Mettre à jour l'image d'un conteneur |
kubectl scale deployment/<name> --replicas=<n> |
Modifier le nombre de réplicas |
kubectl rollout status deployment/<name> |
Suivre l'état du déploiement |
kubectl rollout history deployment/<name> |
Voir l'historique des versions |
kubectl rollout undo deployment/<name> --to-revision=<n> |
Revenir à une version antérieure |
kubectl rollout restart deployment/<name> |
Redémarrer tous les pods |
Bonnes Pratiques : - Toujours utiliser des Deployments plutôt que des ReplicaSets directement - Définir des probes (liveness/readiness) pour une meilleure gestion des pods - Utiliser des stratégies de déploiement adaptées à votre application