iducationducation
IndexArticlesFormationsProfilOutilsBibliothech
N°014 — 2026
Navigation
01Index02Articles03Formations04Profil05Outils06Bibliothech
N°014 — 2026
iducationducation
IndexArticlesFormationsProfilOutilsBibliothech
N°014 — 2026
Navigation
01Index02Articles03Formations04Profil05Outils06Bibliothech
N°014 — 2026
Formations
YAML / Bash · Intermédiaire

Kubernetes

De Docker Compose à Kubernetes : architecture complète, distributions (K8s, K3s, K0s, MicroK8s), objets fondamentaux, networking, Ingress, scaling automatique et déploiement en production.

KubernetesK3skubectlHelmDocker
01Pourquoi Kubernetes — le problème Docker seul ne résout pas02K8s, K3s, K0s, MicroK8s — quelle distribution choisir03Architecture interne — Control Plane et Worker Nodes04Installation — K3s en production et kubectl05Objets fondamentaux — Pod, Deployment, Service, Namespace06Configuration et stockage — ConfigMap, Secret, PVC07Networking et Ingress — exposer vos services08Scaling, RBAC, Helm et production
Chapitre 4·30 min

Installation — K3s en production et kubectl

Ce chapitre installe un cluster K3s fonctionnel — un nœud master et deux workers — et configure kubectl pour le piloter depuis votre machine locale. À la fin, vous avez un cluster prêt pour les chapitres suivants.

Prérequis serveurs

3 VPS minimum (ou 1 pour un single-node) :

  • OS : Ubuntu 22.04 LTS ou Debian 12
  • Master : 2 vCPU, 2 GB RAM minimum (4 GB recommandé)
  • Workers : 1 vCPU, 1 GB RAM minimum par nœud
  • Réseau : les nœuds se voient entre eux sur un réseau privé
# Sur chaque nœud — désactiver le swap (requis par K8s)
swapoff -a
sed -i '/swap/d' /etc/fstab
 
# Vérifier
free -h
# Swap: 0B

Installer K3s sur le master

# Installation avec options de production
curl -sfL https://get.k3s.io | sh -s - \
  --write-kubeconfig-mode 644 \
  --disable traefik \
  --node-name master-01

Options utilisées :

  • --write-kubeconfig-mode 644 : rend le kubeconfig lisible sans sudo
  • --disable traefik : on installera Ingress NGINX à la place (plus répandu)
  • --node-name : nom lisible du nœud dans le cluster

Vérifier que K3s tourne :

systemctl status k3s
kubectl get nodes
# NAME        STATUS   ROLES                  AGE   VERSION
# master-01   Ready    control-plane,master   30s   v1.28.5+k3s1

Récupérer le token pour joindre les workers :

cat /var/lib/rancher/k3s/server/node-token
# K10abc123...

Joindre les workers

Sur chaque nœud worker :

curl -sfL https://get.k3s.io | K3S_URL=https://MASTER_IP:6443 \
  K3S_TOKEN=TOKEN_DU_MASTER \
  sh -s - --node-name worker-01

Vérifier depuis le master :

kubectl get nodes
# NAME        STATUS   ROLES                  AGE   VERSION
# master-01   Ready    control-plane,master   5m    v1.28.5+k3s1
# worker-01   Ready    <none>                 30s   v1.28.5+k3s1
# worker-02   Ready    <none>                 25s   v1.28.5+k3s1

Configurer kubectl en local

Copier le kubeconfig depuis le master vers votre machine locale :

# Depuis votre machine locale
scp root@MASTER_IP:/etc/rancher/k3s/k3s.yaml ~/.kube/config-k3s
 
# Éditer l'IP dans le fichier (127.0.0.1 → IP publique du master)
sed -i 's/127.0.0.1/MASTER_IP/g' ~/.kube/config-k3s
 
# Fusionner avec votre kubeconfig existant (si vous avez d'autres clusters)
export KUBECONFIG=~/.kube/config:~/.kube/config-k3s
kubectl config view --flatten > ~/.kube/config-merged
mv ~/.kube/config-merged ~/.kube/config

Commandes kubectl fondamentales

Contextes — switcher entre clusters

# Lister les contextes disponibles
kubectl config get-contexts
# CURRENT   NAME       CLUSTER    AUTHINFO   NAMESPACE
# *         k3s        k3s        k3s        default
 
# Switcher de contexte
kubectl config use-context k3s
 
# kubectx (outil tiers, plus pratique)
brew install kubectx
kubectx k3s        # switcher
kubens staging     # changer de namespace

Explorer le cluster

# Nœuds
kubectl get nodes
kubectl get nodes -o wide          # avec IP et runtime
kubectl describe node worker-01    # détails complets
 
# Pods
kubectl get pods                   # namespace courant
kubectl get pods -A                # tous les namespaces
kubectl get pods -n kube-system    # namespace spécifique
kubectl get pods -o wide           # avec nœud et IP
 
# Ressources d'un namespace
kubectl get all -n mon-namespace
 
# Ressources personnalisées
kubectl get crd                    # Custom Resource Definitions

Inspecter et déboguer

# Détails d'une ressource
kubectl describe pod mon-pod
kubectl describe deployment mon-app
 
# Logs
kubectl logs mon-pod
kubectl logs mon-pod -f            # suivre en temps réel
kubectl logs mon-pod -c mon-container  # multi-container pod
kubectl logs mon-pod --previous    # logs du conteneur précédent (après crash)
 
# Ouvrir un shell dans un pod
kubectl exec -it mon-pod -- /bin/sh
kubectl exec -it mon-pod -c mon-container -- bash
 
# Port-forward pour accéder à un service localement
kubectl port-forward pod/mon-pod 8080:3000
kubectl port-forward service/mon-service 8080:80

Appliquer et supprimer des manifestes

# Appliquer (créer ou mettre à jour)
kubectl apply -f deployment.yaml
kubectl apply -f ./manifests/          # dossier entier
 
# Supprimer
kubectl delete -f deployment.yaml
kubectl delete pod mon-pod             # par nom
kubectl delete pod mon-pod --grace-period=0  # force (éviter en prod)
 
# Dry run — voir ce qui serait fait sans appliquer
kubectl apply -f deployment.yaml --dry-run=client
kubectl apply -f deployment.yaml --dry-run=server

Namespace courant par défaut

Répéter -n mon-namespace à chaque commande est fastidieux. Changer le namespace par défaut du contexte :

kubectl config set-context --current --namespace=mon-namespace
# Toutes les commandes s'exécutent maintenant dans mon-namespace

Installation de Kind pour le développement local

Si vous voulez pratiquer localement sans VPS :

# macOS/Linux
brew install kind
 
# Cluster minimal
kind create cluster
 
# Charger une image locale dans Kind (pas besoin de registry)
docker build -t mon-app:latest .
kind load docker-image mon-app:latest
 
# Utiliser le contexte Kind
kubectl config use-context kind-kind

Le cluster tourne, kubectl est configuré. Le chapitre suivant couvre les objets fondamentaux : Pod, Deployment, ReplicaSet, Service et Namespace — et écrit les premiers manifestes YAML.

Précédent
Architecture interne — Control Plane et Worker Nodes
Suivant
Objets fondamentaux — Pod, Deployment, Service, Namespace

Développeur fullstack passionné. J'apprends en construisant et je documente tout — front, back, outils. Le code s'apprend mieux en public.

Naviguer

IndexTous les articlesFormationsProfilOutilsBibliothech

Ailleurs

GitHub RSS

Newsletter

Les articles, libs et découvertes. Une fois par semaine, pas plus.

© 2026 William LoreeConçu & codé à la main