Garden of KnowledgeApplied Sciences › Computer Science › Software › DevSecOps › Kubernetes
May 4, 2025

Kubernetes — Fonctionnement

Kubernetes (K8s) est un orchestrateur de conteneurs : il automatise le déploiement, la montée en charge et la gestion des applications conteneurisées (Docker, etc.).

En résumé : là où Docker gère un conteneur sur une machine, Kubernetes gère des dizaines de conteneurs sur des dizaines de machines.

Architecture§

Kubernetes fonctionne avec un cluster composé de deux types de machines :

Control Plane (cerveau)§

Le cerveau du cluster, qui prend toutes les décisions.

ComposantRôle
API ServerPoint d’entrée unique — toutes les commandes passent par lui
etcdBase de données clé-valeur — stocke l’état du cluster
SchedulerDécide sur quel nœud placer chaque Pod
Controller ManagerSurveille l’état et corrige les écarts (ex: relance un pod mort)

Worker Nodes (bras)§

Les machines qui font tourner les applications.

ComposantRôle
kubeletAgent sur chaque nœud, dialogue avec le Control Plane
kube-proxyGère le réseau entre Pods
Container RuntimeLance les conteneurs (Docker, containerd, CRI-O)

Les objets principaux§

Pod§

L’unité de base. Un Pod = un ou plusieurs conteneurs qui partagent réseau et stockage.

apiVersion: v1
kind: Pod
metadata:
  name: mon-pod
spec:
  containers:
  - name: nginx
    image: nginx:latest
    ports:
    - containerPort: 80

Deployment§

Gère les Pods : assure qu’il y en a toujours le bon nombre, gère les mises à jour.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: mon-app
spec:
  replicas: 3          # 3 copies du Pod
  selector:
    matchLabels:
      app: mon-app
  template:
    metadata:
      labels:
        app: mon-app
    spec:
      containers:
      - name: mon-app
        image: mon-image:v1

Service§

Expose les Pods sur le réseau (ils ont des IPs changeantes — le Service donne une IP stable).

TypeUsage
ClusterIPAccessible seulement dans le cluster
NodePortAccessible depuis l’extérieur via un port du nœud
LoadBalancerCrée un load balancer cloud

ConfigMap & Secret§

Namespace§

Isolation logique dans le cluster (comme des dossiers pour organiser les ressources).

Cycle de vie d’un déploiement§

kubectl apply -f deployment.yaml

API Server reçoit la demande

Scheduler choisit les nœuds

kubelet lance les conteneurs sur les nœuds

Controller Manager surveille — relance si crash

Service route le trafic vers les Pods sains

Commandes essentielles§

# Voir l'état du cluster
kubectl get nodes
kubectl get pods
kubectl get pods -A              # Tous les namespaces
kubectl get services

# Déployer
kubectl apply -f fichier.yaml

# Voir les logs
kubectl logs nom-du-pod
kubectl logs -f nom-du-pod       # En temps réel

# Entrer dans un pod
kubectl exec -it nom-du-pod -- /bin/bash

# Supprimer
kubectl delete pod nom-du-pod
kubectl delete -f fichier.yaml

# Scaler un déploiement
kubectl scale deployment mon-app --replicas=5
—The Gardener