Qu'est-ce que Kubernetes ?
Kubernetes (K8s) est une plateforme d'orchestration de containers. Ce guide explique pourquoi il existe et comment il fonctionne.
Le Problème : Gérer des Containers à Grande Échelle
Imaginons une application avec 3 containers :
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ Frontend │ │ Backend │ │ Database │
│ (React) │ │ (Node.js) │ │ (PostgreSQL)│
└─────────────┘ └─────────────┘ └─────────────┘
Sur une seule machine, Docker suffit. Mais en production :
- Que faire si le backend crash ? → Redémarrer automatiquement
- Comment gérer 100 instances ? → Répartir sur plusieurs serveurs
- Comment mettre à jour sans downtime ? → Rolling updates
- Comment répartir le trafic ? → Load balancing
Docker seul ne résout pas ces problèmes.
La Solution : Kubernetes
Kubernetes automatise le déploiement, la mise à l'échelle et la gestion des applications containerisées.
KUBERNETES CLUSTER
┌─────────────────────────────────────────────────────┐
│ │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ Node 1 │ │ Node 2 │ │ Node 3 │ │
│ │┌───────┐│ │┌───────┐│ │┌───────┐│ │
│ ││Pod ││ ││Pod ││ ││Pod ││ │
│ ││Backend││ ││Backend││ ││Backend││ │
│ │└───────┘│ │└───────┘│ │└───────┘│ │
│ │┌───────┐│ │┌───────┐│ │ │ │
│ ││Pod ││ ││Pod ││ │ │ │
│ ││Frontend│ ││Frontend│ │ │ │
│ │└───────┘│ │└───────┘│ │ │ │
│ └─────────┘ └─────────┘ └─────────┘ │
│ │
│ Kubernetes distribue et gère automatiquement │
└─────────────────────────────────────────────────────┘
Ce que Kubernetes Fait
| Fonctionnalité | Description |
|---|---|
| Self-healing | Redémarre les containers crashés |
| Scaling | Ajoute/retire des instances selon la charge |
| Load balancing | Répartit le trafic entre les instances |
| Rolling updates | Met à jour sans interruption |
| Service discovery | Les apps se trouvent automatiquement |
| Secret management | Gère mots de passe et certificats |
| Storage orchestration | Monte automatiquement les volumes |
Concepts de Base
Cluster
Un cluster Kubernetes = plusieurs machines qui travaillent ensemble.
CLUSTER
┌─────────────────────────────────────────┐
│ │
│ ┌─────────────┐ ┌─────────────┐ │
│ │ Control │ │ Worker │ │
│ │ Plane │ │ Nodes │ │
│ │ (cerveau) │ │ (muscles) │ │
│ └─────────────┘ └─────────────┘ │
│ │
└─────────────────────────────────────────┘
Node
Un serveur (physique ou VM) dans le cluster.
- Control Plane : Gère le cluster (décisions, API)
- Worker Nodes : Exécutent les containers
Pod
La plus petite unité déployable. Un pod contient un ou plusieurs containers.
┌────────────────────┐
│ POD │
│ ┌──────────────┐ │
│ │ Container │ │
│ │ (app) │ │
│ └──────────────┘ │
│ ┌──────────────┐ │
│ │ Container │ │
│ │ (sidecar) │ │
│ └──────────────┘ │
│ │
│ Même réseau │
│ Même stockage │
└────────────────────┘
Deployment
Décrit l'état souhaité de votre application.
# "Je veux 3 instances de mon backend"
apiVersion: apps/v1
kind: Deployment
metadata:
name: backend
spec:
replicas: 3 # 3 instances
selector:
matchLabels:
app: backend
template:
spec:
containers:
- name: backend
image: myapp:v1.0
Kubernetes s'assure que cet état est toujours maintenu.
Service
Expose vos pods et répartit le trafic.
SERVICE
│
┌────────────┼────────────┐
│ │ │
▼ ▼ ▼
┌───────┐ ┌───────┐ ┌───────┐
│ Pod 1 │ │ Pod 2 │ │ Pod 3 │
└───────┘ └───────┘ └───────┘
Comment Kubernetes Fonctionne
Le Cycle de Réconciliation
- Vous déclarez l'état souhaité (YAML)
- K8s observe l'état actuel
- K8s agit pour atteindre l'état souhaité
- Répète en continu
┌──────────────────────────────────────────┐
│ │
│ État Souhaité ◄─────► État Actuel │
│ (ce que vous │ (ce qui │
│ voulez) │ existe) │
│ │ │
│ Kubernetes réconcilie │
│ │ │
│ ▼ │
│ ACTIONS │
│ (créer/supprimer pods) │
│ │
└──────────────────────────────────────────┘
Exemple Concret
# Vous déclarez : "Je veux 3 replicas"
kubectl apply -f deployment.yaml
# Un pod crash
Pod 1: Running
Pod 2: Running
Pod 3: Crashed ❌
# Kubernetes détecte la différence
# État souhaité: 3 pods
# État actuel: 2 pods
# Kubernetes agit
# → Crée un nouveau Pod 4
Pod 1: Running
Pod 2: Running
Pod 4: Running ✅
Architecture Simplifiée
┌─────────────────────────────────────────────────────────────┐
│ CONTROL PLANE │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ API Server │ │ Scheduler │ │ Controller │ │
│ │ (porte │ │ (place les │ │ Manager │ │
│ │ d'entrée) │ │ pods) │ │ (maintient │ │
│ │ │ │ │ │ l'état) │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
│ │ │
│ ┌──────────────────────────────────────────────────┐ │
│ │ etcd │ │
│ │ (base de données du cluster) │ │
│ └──────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
│
┌───────────────┼───────────────┐
│ │ │
▼ ▼ ▼
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ WORKER NODE │ │ WORKER NODE │ │ WORKER NODE │
│ ┌───────────┐ │ │ ┌───────────┐ │ │ ┌───────────┐ │
│ │ kubelet │ │ │ │ kubelet │ │ │ │ kubelet │ │
│ │ (agent) │ │ │ │ (agent) │ │ │ │ (agent) │ │
│ └───────────┘ │ │ └───────────┘ │ │ └───────────┘ │
│ ┌───────────┐ │ │ ┌───────────┐ │ │ ┌───────────┐ │
│ │ Pods │ │ │ │ Pods │ │ │ │ Pods │ │
│ └───────────┘ │ │ └───────────┘ │ │ └───────────┘ │
└─────────────────┘ └─────────────────┘ └─────────────────┘
Kubectl : L'Outil de Base
kubectl est la CLI pour interagir avec Kubernetes.
# Voir les pods
kubectl get pods
# Voir les deployments
kubectl get deployments
# Appliquer une configuration
kubectl apply -f deployment.yaml
# Voir les logs d'un pod
kubectl logs my-pod
# Entrer dans un pod
kubectl exec -it my-pod -- /bin/sh
# Voir les événements
kubectl get events
Quand Utiliser Kubernetes ?
Oui, utilisez K8s si :
- Vous avez plusieurs services à gérer
- Vous avez besoin de haute disponibilité
- Vous voulez du scaling automatique
- Vous avez une équipe pour le maintenir
Non, évitez K8s si :
- Une seule application simple
- Petit projet ou prototype
- Pas de ressources pour l'opérer
Conseil : Pour débuter, utilisez un Kubernetes managé (EKS, GKE, AKS) plutôt que de l'installer vous-même.
Résumé
| Concept | Description |
|---|---|
| Cluster | Ensemble de machines |
| Node | Une machine du cluster |
| Pod | Container(s) qui tournent ensemble |
| Deployment | Déclaration de l'état souhaité |
| Service | Expose et load-balance les pods |
| kubectl | CLI pour gérer K8s |
Prochaine Étape
→ Architecture Kubernetes : Comprendre les composants en détail.