Kubernetes est aujourd’hui l’outil de référence pour orchestrer et gérer des applications conteneurisées à grande échelle. Il offre de nombreux composants puissants, et parmi eux, le déploiement (Deployment) joue un rôle central dans la gestion du cycle de vie des applications. Il permet d’automatiser la création, la mise à jour, la montée en charge, ainsi que le retour à un état stable après une défaillance.
Dans cet article, nous allons explorer en profondeur le fonctionnement des déploiements dans Kubernetes : comment les configurer, les gérer, les surveiller, et quelles sont les bonnes pratiques à adopter pour garantir disponibilité, fiabilité et flexibilité.
Qu’est-ce qu’un Déploiement Kubernetes ?
Définition
Un Deployment dans Kubernetes est une ressource déclarative qui gère un ensemble de Pods via un ReplicaSet. Il assure qu’un nombre défini de pods identiques soient toujours actifs, et permet d’appliquer des changements de manière contrôlée (mises à jour progressives, retour en arrière, scaling).
Pourquoi utiliser des Déploiements ?
Les déploiements facilitent :
- La mise à l’échelle horizontale (ajouter ou retirer des pods)
- La mise à jour continue sans interruption de service (Rolling Update)
- Le rollback automatique en cas de problème
- La gestion déclarative de l’état de l’application (Kubernetes se charge de converger vers cet état)
Ils sont donc essentiels pour assurer une haute disponibilité et une résilience maximale dans vos environnements de production.
Structure d’un Manifeste de Déploiement Kubernetes
Un manifeste YAML est utilisé pour décrire l’état souhaité du déploiement. Voici les principales sections :
- metadata : contient le nom du déploiement, les étiquettes (labels) utilisées pour le ciblage et la sélection des pods.
- spec : définit les spécifications du déploiement : nombre de réplicas, politique de mise à jour, sélecteur d’étiquettes.
- template : décrit le modèle des pods à déployer, avec les conteneurs, les images, les ports exposés, les variables d’environnement, les probes, etc.
Exemple de Manifest YAML
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-app-deployment
spec:
replicas: 3
selector:
matchLabels:
app: web-app
template:
metadata:
labels:
app: web-app
spec:
containers:
- name: web-container
image: myrepo/webapp:1.0.0
ports:
- containerPort: 80
readinessProbe:
httpGet:
path: /
port: 80
initialDelaySeconds: 5
periodSeconds: 10
Stratégies de Mise à Jour
Kubernetes propose deux principales stratégies de mise à jour :
- RollingUpdate (par défaut) : Met à jour progressivement les pods, un ou plusieurs à la fois, sans interrompre le service. On peut contrôler le nombre de pods mis à jour simultanément avec
maxSurge
etmaxUnavailable
. - Recreate : Supprime tous les pods existants avant de lancer les nouveaux. Peut entraîner une période d’indisponibilité et est donc à utiliser avec précaution.
Ces stratégies peuvent être affinées selon les besoins pour assurer un bon équilibre entre disponibilité, temps de déploiement, et risque d’erreur.
Historique et Gestion des Rollbacks
Kubernetes conserve un historique de tous les déploiements effectués, permettant un retour rapide à une version précédente en cas de régression ou d’incident.
- Afficher l’historique :
kubectl rollout history deployment/<nom>
- Faire un rollback vers la version précédente :
kubectl rollout undo deployment/<nom>
- Revenir à une version spécifique (optionnel) :
kubectl rollout undo deployment/<nom> --to-revision=2
Créer un Déploiement Kubernetes
Commande rapide
kubectl create deployment mon-app --image=myimage:v1 --replicas=2
Déploiement d’un serveur Nginx :
kubectl create deployment nginx-server --image=nginx --replicas=3
Cette commande crée un déploiement nommé nginx-server
avec 3 pods.
Gérer un Déploiement avec kubectl
- Lister tous les déploiements :
kubectl get deployments
- Afficher les détails d’un déploiement :
kubectl describe deployment <nom>
- Modifier un déploiement à la volée :
kubectl edit deployment <nom>
Cela ouvre le manifeste YAML dans votre éditeur par défaut.
Mettre à jour un Déploiement en Production
Pour appliquer une nouvelle version d’une image conteneurisée :
kubectl set image deployment/nginx-server nginx=nginx:1.19.0
Cette commande déclenche automatiquement une mise à jour contrôlée avec conservation de l’historique.
Vous pouvez suivre son avancement avec :
kubectl rollout status deployment/nginx-server
Bonnes Pratiques pour les Déploiements
- ✅ Versionnez vos images (
:v1.0.1
,:stable
) et évitez:latest
- ✅ Utilisez des probes (readiness et liveness) pour garantir la santé des pods
- ✅ Planifiez des tests de charge avant chaque mise en production
- ✅ Activez le rollback et vérifiez régulièrement les historiques
- ✅ Automatisez vos déploiements avec des pipelines CI/CD (GitLab CI, GitHub Actions, ArgoCD…)
Conclusion
Les déploiements Kubernetes sont un pilier fondamental pour garantir la stabilité, la disponibilité et la résilience de vos applications dans un environnement de production.
En maîtrisant leur fonctionnement et en appliquant les bonnes pratiques évoquées, vous renforcez votre infrastructure et optimisez vos cycles de livraison.
N’hésitez pas à expérimenter, à versionner proprement vos images, à surveiller vos ressources, et à explorer d’autres stratégies avancées comme les blue/green deployments ou le canary release.
📺 Pour des vidéos explicatives et des démonstrations pratiques, abonnez-vous à la chaine Xavki !!