Activer Kubernetes dans Docker Desktop, c'est comme ajouter une extension à un appartement que tu habites déjà : les fondations (la machine virtuelle Linux, le moteur Docker, le réseau vers localhost) sont posées, il reste à cocher une case et à laisser l'application télécharger une dizaine d'images, monter le control plane et écrire une ligne dans ton fichier ~/.kube/config. Cinq minutes plus tard, kubectl get nodes répond docker-desktop Ready. Dans cette leçon, tu déroules l'installation pas à pas pour ton système, tu vérifies chaque étape par une commande dont tu connais la sortie attendue, et tu repars avec la liste des cinq pannes qui bloquent neuf étudiants sur dix au premier jour, avec le message exact et le remède.
Docker Desktop fait tourner une machine virtuelle Linux légère : sous Windows c'est une distribution WSL 2 nommée docker-desktop, sous macOS une VM Apple Virtualization, sous Linux une VM QEMU. Le moteur Docker vit dedans, et Kubernetes aussi : quand tu l'actives, Docker Desktop télécharge les images du control plane depuis Docker Hub (docker/desktop-kubernetes, desktop-kubernetes-etcd, desktop-kubernetes-apiserver…), les lance comme des conteneurs privilégiés dans cette VM, génère les certificats, puis ajoute dans ton ~/.kube/config un contexte docker-desktop qui pointe vers https://kubernetes.docker.internal:6443. Il installe aussi kubectl (dans C:\Program Files\Docker\Docker\resources\bin sous Windows, /usr/local/bin/kubectl sous macOS) : tu n'as rien d'autre à télécharger.
Deux façons de provisionner le cluster existent depuis Docker Desktop 4.38. Kubeadm crée un seul nœud, avec la version de Kubernetes choisie par Docker Desktop (v1.34.1 dans la 4.68) ; c'est le mode par défaut et celui du cours. kind (Kubernetes in Docker) crée plusieurs nœuds, chacun étant un conteneur, et te laisse choisir la version ; il démarre plus vite mais ne partage pas le magasin d'images Docker classique (il faut le mode « containerd image store »). Tant que tu apprends, un nœud suffit : tout ce que le cours fait tient sur docker-desktop.
| Système | Ce que tu installes | Où se règle la mémoire | Kubernetes intégré ? |
|---|---|---|---|
| Windows 10 (21H2+) / 11 | Docker Desktop, moteur WSL 2 | fichier %UserProfile%\.wslconfig, puis wsl --shutdown | oui |
| macOS 13+ (Intel ou Apple Silicon) | Docker Desktop (.dmg de ta puce) | Settings → Resources → Memory, « Apply & restart » | oui |
| Linux (Ubuntu, Debian, Fedora…) | Docker Desktop pour Linux (.deb / .rpm) ou Docker Engine seul | Settings → Resources (Desktop) ; toute la RAM (Engine) | oui avec Docker Desktop ; non avec Docker Engine seul (utilise alors minikube ou kind) |
| Réglage Kubernetes (Settings → Kubernetes) | Ce qu'il fait | Notre choix |
|---|---|---|
| Enable Kubernetes | Installe et démarre le cluster ; le décocher stoppe et supprime les conteneurs du cluster et retire kubectl | coché |
| Cluster provisioning method | Kubeadm (1 nœud, version imposée) ou kind (multi-nœuds, version au choix) | Kubeadm |
| Show system containers (advanced) | Montre les conteneurs k8s_… du cluster dans docker ps | coché (utile pour comprendre, leçon 01 étape 7) |
| Reset Kubernetes cluster | Supprime tout le cluster (namespaces, Deployments, volumes) et le recrée vierge ; seul moyen de changer de version de Kubernetes | seulement en dépannage |
Le réglage est stocké dans un fichier JSON : sous Windows %APPDATA%\Docker\settings-store.json, clé KubernetesEnabled (true/false) et KubernetesMode (kubeadm/kind). Le connaître sert quand l'interface refuse de s'ouvrir.
Windows : installer WSL 2, puis Docker Desktop. Ouvre PowerShell en administrateur et installe WSL si ce n'est pas déjà fait (la commande ne fait rien si WSL est présent) :
wsl --install
wsl --statusRedémarre si on te le demande. Télécharge ensuite « Docker Desktop for Windows » sur docs.docker.com/desktop, lance l'installeur, laisse coché Use WSL 2 instead of Hyper-V, puis démarre Docker Desktop et attends que l'icône de la baleine dans la barre des tâches cesse de clignoter. Ce qu'il faut voir :
wsl --list --verbose NAME STATE VERSION
* docker-desktop Running 2
…La distribution docker-desktop est la VM dans laquelle tourneront Docker et Kubernetes. Si VERSION affiche 1, convertis-la : wsl --set-version docker-desktop 2.
Windows : donner de la mémoire à WSL 2. Par défaut WSL prend la moitié de ta RAM ; c'est souvent suffisant, mais pour ne pas dépendre du hasard, fixe-le. Crée le fichier %UserProfile%\.wslconfig :
notepad $env:UserProfile\.wslconfigColle, enregistre, puis relance la VM WSL (Docker Desktop redémarre tout seul derrière) :
[wsl2]
memory=8GB
processors=4wsl --shutdownCe qu'il faut voir, une fois Docker Desktop revenu : docker info --format '{{.MemTotal}}' renvoie un nombre proche de 8 000 000 000 (sur la machine du cours, sans limite, il renvoie 33480151040, soit 31 Go). Le cours fonctionne à partir de 4 Go ; 8 Go te mettent à l'aise jusqu'au module 8.
macOS : installer et régler la mémoire. Télécharge le .dmg correspondant à ta puce (Apple Silicon ou Intel), glisse Docker dans Applications, lance-le. Puis Settings (roue dentée) → Resources → Advanced : pousse Memory à 8 Go (4 Go minimum) et CPUs à 4, puis Apply & restart. Ce qu'il faut voir : docker info --format '{{.MemTotal}}' reflète ta valeur. kubectl sera installé dans /usr/local/bin/kubectl à l'activation de Kubernetes ; si tu en avais un via Homebrew et que les deux se disputent, supprime celui de Docker ou de Homebrew, pas les deux (leçon 03).
Linux : Docker Desktop, ou pas. Deux chemins. Docker Desktop pour Linux (paquet .deb ou .rpm sur docs.docker.com/desktop/setup/install/linux) donne exactement le même Kubernetes intégré que sous Windows et macOS ; il exige KVM (lsmod | grep kvm doit lister le module) et une session graphique. Docker Engine seul (docker-ce via apt/dnf) n'inclut pas Kubernetes : si tu es sur un serveur ou que tu préfères Engine, installe kind ou minikube ; toutes les commandes kubectl du cours resteront identiques, seul l'accès aux Services changera (leçon 04). Sur Docker Desktop pour Linux, kubectl n'est pas fourni : installe-le depuis kubernetes.io/docs/tasks/tools dans /usr/local/bin/kubectl.
Activer Kubernetes. Ouvre Docker Desktop → Settings → Kubernetes → coche Enable Kubernetes. Laisse Cluster provisioning method sur Kubeadm (un nœud), coche Show system containers (advanced), puis Apply & restart. Dans les versions 4.51 et plus, tu peux aussi passer par la vue Kubernetes du tableau de bord (icône dans la barre latérale) → Create cluster → même choix Kubeadm / kind → Create. Docker Desktop télécharge alors les images du control plane ; tu peux les lister pendant qu'il travaille :
docker desktop kubernetes images listSortie réelle (Docker Desktop 4.68.0) :
Mode Repo Name Tag
kind docker desktop-containerd-registry-mirror v0.0.3
kind docker desktop-cloud-provider-kind v0.5.0
kind envoyproxy envoy v1.36.4
kind kindest node
kubeadm docker desktop-kubernetes kubernetes-v1.34.1-cni-v1.7.1-critools-v1.33.0-cri-dockerd-v0.3.20-1-debian
kubeadm docker desktop-storage-provisioner v3.0
kubeadm docker desktop-vpnkit-controller v4.0
kubeadm docker desktop-kubernetes-etcd 3.6.4-0
kubeadm docker desktop-kubernetes-coredns v1.12.1
kubeadm docker desktop-kubernetes-pause 3.10
kubeadm docker desktop-kubernetes-apiserver v1.34.1
kubeadm docker desktop-kubernetes-controller-manager v1.34.1
kubeadm docker desktop-kubernetes-scheduler v1.34.1
kubeadm docker desktop-kubernetes-proxy v1.34.1Ce qu'il faut voir : dix images pour le mode kubeadm, toutes taguées v1.34.1 pour les composants du control plane. Tu reconnais etcd, apiserver, controller-manager, scheduler, proxy et coredns de la leçon 01. Le téléchargement prend de deux à quinze minutes ; l'icône Kubernetes en bas à gauche de la fenêtre passe d'orange (starting) à vert.
Regarde bien ce qui va se passer : interroger Docker Desktop lui-même. La commande docker desktop (sous-commandes kubernetes disponibles depuis la version 4.44) parle à l'application, pas au démon. C'est la vérification la plus fiable, avant même kubectl.
docker desktop status
docker desktop kubernetes statusSortie réelle :
Name Value
Status running
SessionID 5bc01282-499f-4434-b135-f8ecf0a79886
Field Value
ID: 1758e244
State: running
Mode: kubeadm
Node Count: 1
Version: v1.34.1
Started At: 2026-09-10 21:27:23.469 -0400 EDT
Progress Message: Kubernetes is up and running
Error: NoneCe qu'il faut voir : Status running pour l'application, puis State: running, Mode: kubeadm, Node Count: 1, Version: v1.34.1, Progress Message: Kubernetes is up and running, Error: None. Pendant le démarrage, State vaut starting et Progress Message décrit l'étape en cours (Pulling images…, Starting control plane…). Si ta version de Docker Desktop est antérieure à 4.44, la commande n'existe pas : passe directement à l'étape suivante.
Vérifier le nœud avec kubectl. Ferme et rouvre ton terminal (le PATH a changé), puis :
kubectl get nodes -o wideSortie réelle :
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
docker-desktop Ready control-plane 18d v1.34.1 192.168.65.3 <none> Docker Desktop 6.6.87.2-microsoft-standard-WSL2 docker://29.3.1Ce qu'il faut voir : Ready, v1.34.1, l'IP interne 192.168.65.3 (celle de la VM, pas de ta machine), le noyau WSL 2 (sous macOS tu liras un noyau linuxkit), et le runtime docker://29.3.1 : Kubernetes lance ses conteneurs avec le même Docker que toi. Chez toi AGE se compte en secondes ou minutes.
Voir le contexte que Docker Desktop a écrit. Tout ce que kubectl sait de ton cluster tient dans ~/.kube/config (C:\Users\<toi>\.kube\config sous Windows).
kubectl config get-contexts
kubectl config view --minifySortie réelle (la machine du cours garde un ancien contexte minikube, éteint ; chez toi il n'y aura que docker-desktop) :
CURRENT NAME CLUSTER AUTHINFO NAMESPACE
* docker-desktop docker-desktop docker-desktop
minikube minikube minikube default
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: DATA+OMITTED
server: https://kubernetes.docker.internal:6443
name: docker-desktop
contexts:
- context:
cluster: docker-desktop
user: docker-desktop
name: docker-desktop
current-context: docker-desktop
kind: Config
users:
- name: docker-desktop
user:
client-certificate-data: DATA+OMITTED
client-key-data: DATA+OMITTEDCe qu'il faut voir : l'étoile sur docker-desktop, le serveur https://kubernetes.docker.internal:6443, et une authentification par certificat client (client-certificate-data) générée à l'activation. La leçon 03 revient sur les contextes.
Windows : lire le réglage dans son fichier. Utile le jour où l'interface refuse de s'ouvrir, ou pour vérifier ce qu'a fait un collègue.
(Get-Content "$env:APPDATA\Docker\settings-store.json" -Raw | ConvertFrom-Json) | Select-Object KubernetesEnabled, KubernetesMode, ShowKubernetesSystemContainers | Format-ListSortie réelle :
KubernetesEnabled : True
KubernetesMode : kubeadm
ShowKubernetesSystemContainers : TrueCe qu'il faut voir : les trois valeurs cochées à l'étape 5. Ne modifie pas ce fichier à la main pendant que Docker Desktop tourne ; passe par l'interface. Rien à nettoyer dans cette leçon : tu n'as rien créé dans le cluster.
docker desktop kubernetes status affiche State: starting depuis plus de quinze minutes → les images de l'étape 5 ne se téléchargent pas. Trois causes dans l'ordre : pas d'accès à Docker Hub (réseau d'entreprise avec proxy : Settings → Resources → Proxies, ou demande à ton administrateur le réglage KubernetesImagesRepository), disque plein (docker system df), ou un état corrompu après une mise à jour. Dans ce dernier cas : Settings → Kubernetes → Reset Kubernetes cluster, puis Apply & restart.Unable to connect to the server: dial tcp 127.0.0.1:6443: connectex: No connection could be made because the target machine actively refused it. (macOS/Linux : connect: connection refused) → personne n'écoute sur le port 6443 : Docker Desktop est arrêté, ou Kubernetes n'est pas (ou plus) activé. Lance Docker Desktop, vérifie docker desktop kubernetes status → State: running, réessaie. Si c'est Error: … au lieu de None, lis le message : c'est le plus souvent la mémoire.docker desktop kubernetes status répond State: running mais kubectl get nodes échoue, ou répond pour un autre cluster → ton kubectl regarde ailleurs (contexte minikube, kind-…, un cluster d'entreprise). kubectl config current-context doit dire docker-desktop ; sinon kubectl config use-context docker-desktop. Détail en leçon 03.WSL 2 installation is incomplete ou wsl --status échoue → le sous-système Windows pour Linux n'est pas installé ou le noyau WSL 2 manque. wsl --install en PowerShell administrateur, redémarrage, puis relance Docker Desktop. Si la fenêtre parle de Virtual Machine Platform ou de virtualisation, active Virtualization Technology (VT-x / AMD-V) dans le BIOS/UEFI : sans ça ni WSL 2 ni Docker Desktop ne démarrent.Error: mentionne OOM ou les conteneurs k8s_… redémarrent en boucle → pas assez de mémoire pour la VM. Retour à l'étape 2 (Windows : .wslconfig, wsl --shutdown) ou 3 (macOS : Resources → Memory), puis Reset Kubernetes cluster si l'état reste incohérent.kubectl de Docker Desktop n'est pas trouvé alors que Kubernetes tourne → sous Windows, l'installation « par utilisateur » le place dans %LOCALAPPDATA%\Programs\DockerDesktop\resources\bin\kubectl.exe au lieu de C:\Program Files\Docker\Docker\resources\bin ; ajoute le bon dossier au PATH (leçon 03) et rouvre le terminal.docker-desktop sous WSL 2) ; l'activer = Settings → Kubernetes → Enable Kubernetes → Apply & restart, ou vue Kubernetes → Create cluster (4.51+).%UserProfile%\.wslconfig (memory=8GB, processors=4) puis wsl --shutdown.docker desktop kubernetes status doit afficher State: running, Node Count: 1, Version: v1.34.1, Progress Message: Kubernetes is up and running ; kubectl get nodes -o wide doit afficher docker-desktop Ready control-plane.dial tcp 127.0.0.1:6443 … refused = Docker Desktop arrêté ou Kubernetes désactivé, jamais un problème de ton YAML.kubectl, la télécommande — versions, contextes, anatomie d'une commande, et ton premier namespace premiers-pas.Docker Desktop ne met pas à jour le cluster Kubernetes quand l'application se met à jour : ton nœud restera en v1.34.1 jusqu'à ce que tu fasses Reset Kubernetes cluster, qui recrée un cluster vierge avec la version embarquée par la nouvelle Docker Desktop. C'est une différence de fond avec un cluster managé (EKS, GKE, AKS), où l'on migre le control plane puis les nœuds sans perdre les objets. La page officielle Deploy on Kubernetes with Docker Desktop décrit les deux provisionneurs, la vue Kubernetes du tableau de bord et le réglage KubernetesImagesRepository pour les réseaux sans accès à Docker Hub ; côté Kubernetes, Install Tools explique comment installer kubectl séparément si tu en as besoin sur une autre machine.