Kubernetes
1. Base
Conteneur
Un conteneur est un paquet applicatif qui contient :
- l’application
- ses dépendances
- son environnement d’exécution
Exemple : une image Docker + un conteneur lancé à partir de cette image.
Kubernetes
Kubernetes sert à déployer, exécuter et gérer des conteneurs sur un cluster.
Il aide à :
- lancer plusieurs instances
- redémarrer ce qui tombe
- exposer l’application sur le réseau
- faire des mises à jour
- gérer config, secrets et stockage
2. Architecture
Control Plane
C’est la partie qui décide :
- planification
- orchestration
- gestion de l’état désiré
Worker Nodes
Ce sont les machines qui exécutent réellement les Pods.
À retenir :
- Control Plane = cerveau
- Worker Nodes = machines de travail
3. Objets principaux
Pod
Le plus petit objet déployable dans Kubernetes.
Un Pod contient :
- un ou plusieurs conteneurs
- une IP
- éventuellement des volumes
En pratique :
- souvent 1 Pod = 1 conteneur principal
ReplicaSet
Garantit qu’un certain nombre de Pods identiques tournent.
Exemple :
- je veux 3 Pods nginx
- si un tombe, Kubernetes en recrée un
Deployment
Objet le plus courant pour déployer une application.
Il permet :
- gérer les ReplicaSets
- faire des mises à jour
- faire un rollback
À retenir :
- en général on crée un Deployment, pas un ReplicaSet à la main
Service
Donne un accès réseau stable à un ou plusieurs Pods.
Pourquoi :
- les Pods changent d’IP
- le Service fournit un point d’entrée stable
4. Types de Services
ClusterIP
Service accessible à l’intérieur du cluster seulement.
Usage :
- communication entre applications internes
NodePort
Expose le service sur un port du nœud.
Usage :
- test simple depuis l’extérieur
LoadBalancer
Expose le service via un équilibreur de charge.
Usage :
- accès externe plus propre, souvent en cloud
À retenir :
- ClusterIP = interne
- NodePort = externe simple
- LoadBalancer = externe plus standard
5. Déploiement et mise à jour
Déployer
On doit souvent créer un Deployment avec une image de conteneur.
Mettre à jour
On change souvent :
- la version de l’image
- ou le YAML
Puis on applique la nouvelle config.
Rollback
Permet de revenir à la version précédente du déploiement.
6. Réseau Kubernetes
Chaque Pod a sa propre IP.
Mais :
- cette IP peut changer
- on ne s’appuie pas dessus directement
On utilise plutôt :
- un Service
- parfois plus tard un Ingress
7. Probes
Les probes servent à vérifier la santé et la disponibilité.
LivenessProbe
Répond à :
- “est-ce que l’application est vivante ?”
Si la probe échoue, Kubernetes peut redémarrer le conteneur.
ReadinessProbe
Répond à :
- “est-ce que l’application est prête à recevoir du trafic ?”
Si elle échoue :
- le Pod tourne peut-être encore
- mais il ne reçoit pas de trafic via le Service
À retenir :
- Liveness = faut-il redémarrer ?
- Readiness = peut-il recevoir du trafic ?
8. Volumes et persistance
Volume
Un volume est quelque chose monté dans le Pod.
Tous les volumes ne sont pas persistants.
PersistentVolume (PV)
C’est le stockage disponible côté cluster.
PersistentVolumeClaim (PVC)
C’est la demande de stockage faite par l’application.
Chaîne à retenir :
- Pod -> PVC -> PV
ConfigMap
Permet de stocker de la configuration non sensible.
Exemples :
- variables d’environnement
- fichiers de config
- paramètres applicatifs
Secret
Permet de stocker des données sensibles.
Exemples :
- mots de passe
- tokens
- clés API
À retenir :
- ConfigMap = config
- Secret = données sensibles
9. YAML
Kubernetes utilise beaucoup de fichiers YAML pour décrire l’état voulu.
On définit souvent :
-
apiVersion -
kind -
metadata -
spec
Exemple minimal d’un Pod :
apiVersion: v1
kind: Pod
metadata:
name: mon-pod
spec:
containers:
- name: nginx
image: nginx
Exemple minimal d’un Deployment :
apiVersion: apps/v1
kind: Deployment
metadata:
name: mon-app
spec:
replicas: 2
selector:
matchLabels:
app: mon-app
template:
metadata:
labels:
app: mon-app
spec:
containers:
- name: mon-app
image: nginx
Exemple minimal d’un Service :
apiVersion: v1
kind: Service
metadata:
name: mon-service
spec:
selector:
app: mon-app
ports:
- port: 80
targetPort: 80
type: ClusterIP
10. Commandes essentielles
Voir les objets
kubectl get pods
kubectl get deployments
kubectl get replicasets
kubectl get services
kubectl get pv
kubectl get pvc
Voir le détail
kubectl describe pod <nom>
kubectl describe deployment <nom>
kubectl describe service <nom>
Créer / appliquer
kubectl apply -f fichier.yaml
Supprimer
kubectl delete -f fichier.yaml
kubectl delete pod <nom>
Logs
kubectl logs <pod>
Entrer dans un conteneur
kubectl exec -it <pod> -- sh
Voir les changements de rollout
kubectl rollout status deployment/<nom>
kubectl rollout history deployment/<nom>
kubectl rollout undo deployment/<nom>
11. Minikube
Minikube sert à avoir un petit cluster Kubernetes local pour apprendre et tester.
Commandes utiles :
minikube start
minikube stop
minikube status
kubectl get nodes
12. Ce qu’il faut retenir en priorité
- Pod = unité de base qui exécute le conteneur
- Deployment = gère les Pods et leurs mises à jour
- Service = accès réseau stable aux Pods
- LivenessProbe = santé
- ReadinessProbe = prêt à recevoir du trafic
- PVC = demande de stockage
- PV = stockage fourni
- ConfigMap = config
- Secret = données sensibles
- Worker Node = machine qui exécute les Pods
- Control Plane = partie qui orchestre