Kubernetes s'est imposé comme le standard incontesté de l'orchestration de conteneurs. En 2026, avec la version 1.35 (décembre 2025) et une adoption dépassant 90% des organisations engagées dans le cloud-native selon les rapports CNCF, comprendre Kubernetes n'est plus optionnel pour tout professionnel DevOps ou administrateur système. Ce guide vous accompagne dans la découverte des concepts fondamentaux, de l'architecture, et surtout vous aide à déterminer si Kubernetes est vraiment adapté à votre projet.
Qu'est-ce que Kubernetes ?
L'orchestrateur qui a changé l'infrastructure
Kubernetes (souvent abrégé K8s) est une plateforme open-source d'orchestration de conteneurs, initialement développée par Google et maintenant maintenue par la Cloud Native Computing Foundation (CNCF). Son rôle principal est d'automatiser le déploiement, la mise à l'échelle et la gestion des applications conteneurisées.
Mais qu'est-ce que cela signifie concrètement ? Imaginez que vous devez gérer des dizaines, voire des centaines de conteneurs Docker répartis sur plusieurs serveurs. Manuellement, cela devient un cauchemar : quel conteneur tourne sur quel serveur ? Que se passe-t-il si un serveur tombe ? Comment répartir la charge équitablement ? Kubernetes répond à toutes ces questions automatiquement.
Le nom "Kubernetes" vient du grec ancien κυβερνήτης (kubernētēs), signifiant "pilote" ou "timonier". Cette métaphore maritime est parfaite : Kubernetes pilote votre flotte de conteneurs à travers les tempêtes de la production.
Kubernetes vs Docker : clarifier la confusion
Une confusion fréquente persiste entre Docker et Kubernetes. Ce sont deux outils complémentaires, pas concurrents :
- Docker crée et exécute des conteneurs individuels (runtime)
- Kubernetes orchestre et gère des groupes de conteneurs (orchestrateur)
Docker est comparable à un camion qui transporte des marchandises. Kubernetes est le système logistique qui décide quel camion va où, gère les pannes de véhicules, et s'assure que toutes les livraisons sont effectuées même si un camion tombe en panne.
En pratique, Kubernetes peut utiliser différents runtimes de conteneurs compatibles OCI (Open Container Initiative) : containerd, CRI-O, ou d'autres. Depuis Kubernetes 1.24 (2022), containerd a remplacé Docker comme runtime par défaut. Cette transition, maintenant stabilisée avec K8s 1.35, offre de meilleures performances et une architecture plus légère.
Les concepts fondamentaux de Kubernetes
Le cluster : fondation de tout
Un cluster Kubernetes est l'ensemble des machines (physiques ou virtuelles) qui exécutent vos applications. Il se compose de deux types de nœuds :
Le Control Plane (anciennement "master") :
- kube-apiserver : Point d'entrée de toutes les commandes Kubernetes
- etcd : Base de données clé-valeur stockant l'état du cluster
- kube-scheduler : Décide sur quel nœud placer les nouveaux pods
- kube-controller-manager : Maintient l'état désiré du cluster
Les Worker Nodes :
- kubelet : Agent exécutant les pods sur chaque nœud
- kube-proxy : Gère le réseau et le load balancing
- Container runtime : Exécute les conteneurs (containerd, CRI-O)
👉 Cette architecture séparée permet une haute disponibilité : même si un worker node tombe, le Control Plane redistribue automatiquement la charge sur les nœuds restants. Pour une résilience maximale, découvrez comment configurer un cluster hautement disponible.
Le Pod : unité de base
Le Pod est l'unité atomique de Kubernetes. Un pod contient un ou plusieurs conteneurs qui partagent le même espace réseau et stockage. Contrairement à Docker où chaque conteneur est isolé, les conteneurs d'un même pod communiquent via localhost.
# Exemple de Pod simple
apiVersion: v1
kind: Pod
metadata:
name: mon-application
spec:
containers:
- name: app
image: nginx:alpine
ports:
- containerPort: 80
Pourquoi utiliser plusieurs conteneurs par pod ? Pour le pattern sidecar : un conteneur principal (votre application) accompagné de conteneurs auxiliaires (logging, monitoring, proxy). Ils partagent leur cycle de vie et leurs ressources.
Deployment : gérer les réplicas
Un Deployment définit l'état désiré de votre application : combien de réplicas (copies) vous voulez, quelle image utiliser, et comment les mettre à jour.
# Déploiement avec 3 réplicas
apiVersion: apps/v1
kind: Deployment
metadata:
name: webapp
spec:
replicas: 3
selector:
matchLabels:
app: webapp
template:
metadata:
labels:
app: webapp
spec:
containers:
- name: webapp
image: monapp:v1.0.0
ports:
- containerPort: 8080
resources:
requests:
memory: '128Mi'
cpu: '100m'
limits:
memory: '256Mi'
cpu: '500m'
Kubernetes maintient automatiquement ces 3 réplicas. Si un pod meurt, un nouveau est créé. Si un nœud tombe, les pods sont recréés ailleurs. C'est le self-healing en action.
Service : exposer vos applications
Un Service fournit une adresse réseau stable pour accéder à un groupe de pods. Les pods ayant des IPs éphémères, le Service agit comme un load balancer interne permanent.
# Service exposant le Deployment
apiVersion: v1
kind: Service
metadata:
name: webapp-service
spec:
selector:
app: webapp
ports:
- port: 80
targetPort: 8080
type: ClusterIP
Types de Services :
- ClusterIP (défaut) : Accessible uniquement dans le cluster
- NodePort : Expose sur un port de chaque nœud
- LoadBalancer : Provisionne un load balancer cloud externe
Ingress : routage HTTP/HTTPS
L'Ingress gère l'accès externe HTTP/HTTPS vers vos Services, avec routage par nom de domaine ou chemin URL :
# Ingress avec Traefik
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: webapp-ingress
spec:
rules:
- host: app.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: webapp-service
port:
number: 80
La gestion automatique des certificats TLS est assurée par cert-manager, un opérateur Kubernetes standard.
Namespaces : isolation logique
Les Namespaces permettent de diviser un cluster en environnements virtuels isolés. Idéal pour séparer dev/staging/prod ou différentes équipes :
# Créer un namespace
kubectl create namespace production
# Déployer dans un namespace spécifique
kubectl apply -f deployment.yaml -n production
# Lister pods d'un namespace
kubectl get pods -n production
ConfigMaps et Secrets : configuration externalisée
ConfigMaps stockent la configuration non-sensible, Secrets stockent les données sensibles (encodées en base64 par défaut — considérez l'encryption at-rest et External Secrets Operator pour une gestion sécurisée avec rotation automatique) :
# ConfigMap
apiVersion: v1
kind: ConfigMap
metadata:
name: app-config
data:
DATABASE_HOST: 'postgres.production.svc'
LOG_LEVEL: 'info'
---
# Secret
apiVersion: v1
kind: Secret
metadata:
name: app-secrets
type: Opaque
stringData:
DATABASE_PASSWORD: 'mon-mot-de-passe'
👉 Pour une gestion avancée des secrets avec HashiCorp Vault ou AWS Secrets Manager, consultez notre article sur External Secrets Operator.
Sécurité et scanning des images
Pour maintenir une posture de sécurité robuste, vous pouvez scanner vos images Docker avec Trivy avant le déploiement en production.
Pourquoi utiliser Kubernetes ?
Haute disponibilité sans effort
Kubernetes surveille en permanence l'état de vos applications. Si un conteneur crash, il est redémarré. Si un nœud tombe, les pods sont recréés sur d'autres nœuds. Cette résilience est automatique et configurable :
# Liveness probe : redémarre si l'app ne répond plus
livenessProbe:
httpGet:
path: /health
port: 8080
initialDelaySeconds: 30
periodSeconds: 10
# Readiness probe : retire du load balancer si pas prêt
readinessProbe:
httpGet:
path: /ready
port: 8080
initialDelaySeconds: 5
periodSeconds: 5
Scaling automatique
Le Horizontal Pod Autoscaler (HPA) ajuste automatiquement le nombre de réplicas selon la charge :
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: webapp-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: webapp
minReplicas: 2
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70
Avec Kubernetes 1.35, la fonctionnalité In-Place Pod Resource Updates (GA) permet même d'ajuster CPU/mémoire sans redémarrer les pods, évitant toute interruption. Pour mettre en place une supervision complète et des alertes sur ces métriques, consultez notre guide monitoring avec Prometheus et Grafana.
Déploiements sans interruption
Kubernetes supporte nativement les stratégies de déploiement avancées :
Rolling Update (défaut) : Remplace progressivement les anciens pods par les nouveaux Recreate : Arrête tous les pods avant d'en créer de nouveaux Canary : Déploie sur un pourcentage du trafic avant généralisation
spec:
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 1
maxSurge: 1
Les déploiements canary avancés peuvent être orchestrés avec des service meshes comme Istio ou Linkerd. Pour une supervision avancée des déploiements progressifs, consultez notre guide sur l'orchestration Canary avec Istio.
Infrastructure as Code
Tout dans Kubernetes est déclaratif : vous décrivez l'état souhaité en YAML, Kubernetes s'occupe d'atteindre cet état. Cette approche GitOps permet de versionner toute votre infrastructure :
# Appliquer configuration
kubectl apply -f infrastructure/
# Voir différences avant application
kubectl diff -f infrastructure/
# Rollback rapide
kubectl rollout undo deployment/webapp
👉 Pour une approche GitOps complète, découvrez Argo CD pour gérer vos déploiements Kubernetes.
Écosystème riche
La vraie puissance de Kubernetes réside dans son écosystème. Des milliers d'outils et d'opérateurs étendent ses fonctionnalités :
- Helm : Gestionnaire de packages Kubernetes (comme apt/yum pour K8s)
- Prometheus/Grafana : Monitoring et alerting
- Cert-manager : Gestion automatique des certificats TLS
- External Secrets Operator : Intégration avec Vault, AWS Secrets Manager
- Velero : Sauvegarde et restauration du cluster
Évaluer vos besoins : Kubernetes ou alternative légère ?
Le coût de la complexité
Kubernetes est un outil puissant, mais cette puissance a un prix. Avant de l'adopter, posez-vous ces questions :
Compétences requises : Votre équipe maîtrise-t-elle les concepts de conteneurisation, de réseau, de stockage distribué ? Kubernetes a une courbe d'apprentissage significative.
Overhead opérationnel : Un cluster Kubernetes nécessite maintenance, mises à jour, monitoring. Même les services managés (EKS, GKE, AKS) demandent une expertise.
Coût financier : Le Control Plane consomme des ressources. Pour de petites applications, cette surcharge peut représenter 30-50% des ressources totales.
Kubernetes vs Docker Swarm : choisir selon votre contexte
Docker Swarm reste une option pertinente pour démarrer rapidement avant de scaler vers Kubernetes :
| Critère | Docker Swarm | Kubernetes |
| Complexité | Simple, intégré à Docker | Plus complexe, apprentissage requis |
| Setup | 5 commandes | K3s : 2 min, cluster complet : heures |
| Scaling | Manuel ou basique | Auto-scaling avancé (HPA, VPA) |
| Résilience | Correcte | Excellente, self-healing natif |
| Écosystème | Limité | Immense (Helm, operators, etc.) |
| Évolution | Plafond rapide | Scalabilité entreprise |
Notre approche : Pour les petits projets (< 20 conteneurs, équipe réduite), Docker Swarm permet de démarrer rapidement. Mais planifiez dès le départ une architecture conteneurisée propre qui facilitera la migration vers Kubernetes quand vos besoins évolueront. Avec K3s, cette transition est désormais beaucoup plus accessible qu'auparavant.
Quand Kubernetes devient incontournable
Kubernetes devient pertinent quand :
- Vous gérez plus de 50 conteneurs en production
- Vous avez besoin d'auto-scaling réactif à la charge
- Plusieurs équipes partagent l'infrastructure
- Vous déployez plusieurs fois par jour
- La haute disponibilité est critique (SLA 99.9%+)
- Vous ciblez une stratégie multi-cloud ou hybrid cloud
Par où commencer avec Kubernetes
K3s : Kubernetes léger pour débuter
Pour apprendre Kubernetes sans la complexité d'un cluster complet, K3s est idéal. Cette distribution légère de Rancher Labs installe un cluster complet en moins de 2 minutes :
# Installation K3s (single node)
curl -sfL https://get.k3s.io | sh -
# Vérifier cluster
sudo k3s kubectl get nodes
# Créer alias kubectl
echo "alias kubectl='k3s kubectl'" >> ~/.bashrc
K3s inclut Traefik comme Ingress Controller et utilise SQLite au lieu d'etcd, réduisant drastiquement la consommation de ressources.
Pour un déploiement K3s production-ready avec Longhorn, Traefik et cert-manager, consultez notre guide K3s en production.
Outils de développement local
Pour développer localement avant de déployer sur un vrai cluster :
- Minikube : Cluster single-node dans une VM
- Kind (Kubernetes in Docker) : Cluster dans des conteneurs Docker
- Docker Desktop : Kubernetes intégré (Windows/macOS)
# Installation Minikube
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube
# Démarrer cluster
minikube start
# Dashboard web
minikube dashboard
Services Kubernetes managés
Pour la production, les services managés éliminent la gestion du Control Plane :
| Provider | Service | Particularité |
| AWS | EKS | Intégration IAM, Fargate serverless |
| Google Cloud | GKE | Autopilot mode, optimisé pour performance |
| Azure | AKS | Intégration Azure AD, pricing avantageux |
| Scaleway | Kapsule | Souveraineté française, tarifs compétitifs |
Ces services managés supportent actuellement les versions Kubernetes 1.31 à 1.35 avec des options de support étendu.
Vous préférez déléguer ? Chez SHPV France, nous concevons et gérons des clusters Kubernetes sur mesure adaptés à vos besoins : architecture, sécurité, monitoring et maintenance inclus. Contactez-nous pour un accompagnement personnalisé.
Les commandes kubectl essentielles
# Configuration et contexte
kubectl config get-contexts # Lister clusters configurés
kubectl config use-context prod # Changer de cluster
# Exploration du cluster
kubectl get nodes # Lister nœuds
kubectl get pods -A # Tous les pods, tous namespaces
kubectl get services # Lister services
kubectl describe pod mon-pod # Détails d'un pod
# Déploiement
kubectl apply -f manifest.yaml # Appliquer configuration
kubectl delete -f manifest.yaml # Supprimer ressources
kubectl rollout status deployment/X # Suivre déploiement
kubectl rollout undo deployment/X # Rollback
# Debug
kubectl logs mon-pod # Voir logs
kubectl logs -f mon-pod # Suivre logs en temps réel
kubectl exec -it mon-pod -- bash # Shell dans le pod
kubectl port-forward svc/X 8080:80 # Accès local temporaire
# Scaling
kubectl scale deployment/X --replicas=5 # Scaling manuel
kubectl top pods # Consommation ressources
Conclusion
Kubernetes a révolutionné la gestion des infrastructures conteneurisées. Avec une adoption atteignant 93% des organisations et des fonctionnalités toujours plus matures (In-Place Pod Resource Updates en GA depuis la version 1.35), il est devenu le standard de facto pour l'orchestration de conteneurs.
Points clés à retenir :
- Architecture déclarative : Décrivez l'état souhaité, Kubernetes s'occupe du reste
- Self-healing : Résilience automatique aux pannes de pods et de nœuds
- Scaling natif : Horizontal Pod Autoscaler pour adapter la charge automatiquement
- Écosystème riche : Helm, Prometheus, Argo CD, et des milliers d'opérateurs
- Pas pour tout le monde : Docker Swarm reste pertinent pour les petits projets
Prochaines étapes recommandées :
- Installer K3s localement pour expérimenter
- Déployer une application simple avec Deployment + Service
- Explorer les Ingress et la gestion TLS
- Mettre en place le monitoring avec Prometheus/Grafana
Pour aller plus loin, consultez nos guides avancés : monitoring avec Prometheus et Grafana et gestion GitOps avec Argo CD.
Kubernetes n'est pas qu'un outil technique, c'est une nouvelle façon de penser l'infrastructure. Prenez le temps de maîtriser les fondamentaux avant de plonger dans les fonctionnalités avancées. La route est longue, mais la destination en vaut la peine.


