Ce guide vous permet de créer un cluster Kubernetes local en 5 minutes. Vous apprendrez à démarrer un cluster single-node, multi-nœuds (avec workers), et même un cluster HA (haute disponibilité) avec 3 control-planes. Toutes les commandes ont été testées avec Minikube v1.37.0 et Kubernetes v1.34.0.
Ce que vous saurez faire à la fin :
- Installer Minikube et choisir le bon driver
- Créer et gérer plusieurs clusters avec les profils
- Déployer un cluster multi-nœuds avec workers
- Configurer un cluster HA avec kube-vip et etcd distribué
- Activer les add-ons utiles (metrics-server, ingress, dashboard)
Quand choisir Minikube
Section intitulée « Quand choisir Minikube »Minikube n'est pas le seul outil pour créer un cluster Kubernetes local. Voici un comparatif pour vous aider à choisir :
| Critère | Minikube | Kind | K3s |
|---|---|---|---|
| Cas d'usage | Dev local, apprentissage | CI/CD, tests, clusters jetables | Edge / IoT / homelab, prod légère |
| Datastore | etcd (kubeadm), HA stacked | etcd (kubeadm) dans les control-planes | SQLite (défaut) ; embedded etcd (HA) |
| Multi-nœuds | ✅ --nodes | ✅ via config YAML | ✅ Natif (server/agent) |
| HA control plane | ✅ --ha (min. 3 CP) + kube-vip | ✅ multi control-planes (HAProxy) | ✅ embedded etcd (min. 3 serveurs) |
| Ressources | 2 CPU, 20 GB disque (défaut) | ≥6 GB RAM Docker (8 GB conseillé) | Agent ~275 MiB, Server ~1.6 GiB |
| GPU | ✅ --gpus (driver Docker) | ⚠️ Pas clé en main | ⚠️ À configurer (toolkit + plugin) |
| Persistance | ✅ Profils persistants | ⚠️ Plutôt jetable | ✅ Cluster système (systemd) |
| Installation | VM ou conteneur selon driver | Conteneurs Docker "nodes" | Binaire + service (Linux) |
Choisissez Minikube si :
- Vous débutez avec Kubernetes et voulez un environnement proche de la production
- Vous avez besoin de tester la haute disponibilité (HA)
- Vous voulez des add-ons prêts à l'emploi (dashboard, metrics, ingress)
Comment fonctionne Minikube
Section intitulée « Comment fonctionne Minikube »Comprendre l'architecture de Minikube vous aidera à diagnostiquer les problèmes et à choisir le bon driver.
Contrairement à Kind qui utilise des conteneurs Docker comme nœuds, Minikube peut créer des vraies VMs ou des conteneurs selon le driver choisi. C'est ce qui lui permet de supporter des fonctionnalités impossibles avec Kind (GPU, isolation complète).
Architecture avec le driver Docker
Section intitulée « Architecture avec le driver Docker »Avec le driver docker (le plus courant), chaque nœud est un conteneur Docker qui simule une machine complète :
Points clés :
- Chaque nœud est un conteneur Docker avec systemd, kubelet, et un runtime conteneur (Docker ou containerd) à l'intérieur
- Les pods tournent dans des conteneurs à l'intérieur des conteneurs nœuds
- Le réseau entre nœuds passe par le réseau bridge Docker
Architecture avec un driver VM (KVM, VirtualBox)
Section intitulée « Architecture avec un driver VM (KVM, VirtualBox) »Avec les drivers VM, chaque nœud est une vraie machine virtuelle :
Avantages des VMs :
- Isolation complète (noyau séparé)
- Support GPU possible
- Plus proche d'un vrai cluster de production
Inconvénients :
- Démarrage plus lent (~60s vs ~20s pour Docker)
- Consommation mémoire plus élevée
Deux daemons Docker distincts
Section intitulée « Deux daemons Docker distincts »C'est une source fréquente de confusion : avec le driver Docker, il y a deux daemons Docker :
- Docker de l'hôte : celui que vous utilisez avec
docker build - Docker du nœud Minikube : celui qui exécute vos pods
Quand vous buildez une image sur l'hôte, elle n'est pas visible dans Minikube.
C'est pourquoi vous devez utiliser minikube image load ou configurer votre
shell pour utiliser le daemon Minikube :
eval $(minikube docker-env) # Bascule vers le daemon Minikubedocker build -t mon-app:v1 . # Build directement dans Minikubeeval $(minikube docker-env -u) # Revient au daemon localPrérequis
Section intitulée « Prérequis »Avant de commencer, vérifiez que vous avez :
- CPU : 2 cœurs minimum (4 recommandés pour HA)
- RAM : 2 Go par nœud (6 Go minimum pour un cluster HA de 3 nœuds)
- Disque : 20 Go d'espace libre
- Docker installé et fonctionnel, Guide d'installation Docker
- kubectl installé, Guide kubectl
Vérifier la virtualisation
Section intitulée « Vérifier la virtualisation »Les drivers de type VM (kvm2, hyperv, virtualbox) exigent les extensions matérielles VT-x ou AMD-V activées dans le BIOS. Le driver Docker s'en passe, mais la vérification prend deux secondes et évite un échec au premier démarrage.
egrep -q 'vmx|svm' /proc/cpuinfo && echo "Virtualisation OK" || echo "Activez VT-x/AMD-V dans le BIOS"sysctl -a | grep machdep.cpu.features | grep -i vmx && echo "Virtualisation OK"Ouvrez PowerShell en administrateur :
systeminfo | findstr /i "virtualization"Vérifier les limites inotify (Linux)
Section intitulée « Vérifier les limites inotify (Linux) »Pour les clusters multi-nœuds, augmentez les limites inotify si vous rencontrez l'erreur "Too many open files" :
# Vérifier la valeur actuellecat /proc/sys/fs/inotify/max_user_instances
# Augmenter si < 256sudo sysctl -w fs.inotify.max_user_instances=512sudo sysctl -w fs.inotify.max_user_watches=524288Installer Minikube
Section intitulée « Installer Minikube »Minikube tient dans un binaire unique : pas de service à activer, pas de dépendance système à gérer. Choisissez l'onglet correspondant à votre poste, le binaire installé pilotera ensuite le driver que vous lui indiquerez.
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64sudo install minikube-linux-amd64 /usr/local/bin/minikuberm minikube-linux-amd64brew install minikubechoco install minikubeOu téléchargez depuis le site officiel.
Vérification :
minikube versionminikube version: v1.37.0commit: ad9b7f9756e14c8a15088a1899398d41a96d77d8Démarrer un cluster single-node
Section intitulée « Démarrer un cluster single-node »Le cas le plus simple : un seul nœud qui fait office de control-plane et de worker.
minikube start --driver=docker --cpus=2 --memory=2048 --profile=demo| Option | Description |
|---|---|
--driver=docker | Utilise Docker comme hyperviseur (recommandé) |
--cpus=2 | Alloue 2 CPU au cluster |
--memory=2048 | Alloue 2 Go de RAM |
--profile=demo | Nom du cluster (permet d'en avoir plusieurs) |
Vérification :
kubectl get nodes -o wideNAME STATUS ROLES AGE VERSION INTERNAL-IP OS-IMAGEdemo Ready control-plane 30s v1.34.0 192.168.49.2 Ubuntu 22.04.5 LTSminikube profile list|---------|--------|---------|--------------|---------|--------|-------|| Profile | Driver | Runtime | IP | Version | Status | Nodes ||---------|--------|---------|--------------|---------|--------|-------|| demo | docker | docker | 192.168.49.2 | v1.34.0 | OK | 1 ||---------|--------|---------|--------------|---------|--------|-------|Choisir le bon driver
Section intitulée « Choisir le bon driver »Le driver détermine comment Minikube crée les nœuds du cluster.
| Driver | OS | Performance | Cas d'usage |
|---|---|---|---|
| docker | Tous | ⭐⭐⭐ | Recommandé par défaut |
| kvm2 | Linux | ⭐⭐⭐⭐ | Meilleure isolation |
| hyperkit | macOS | ⭐⭐⭐ | Alternative à Docker Desktop |
| hyperv | Windows | ⭐⭐⭐ | Hyper-V natif |
| virtualbox | Tous | ⭐⭐ | Compatibilité maximale |
| podman | Linux | ⭐⭐⭐ | Alternative à Docker |
Définir un driver par défaut
Section intitulée « Définir un driver par défaut »Cette valeur est enregistrée dans la configuration de Minikube et s'applique
à tous les minikube start suivants, ce qui évite de répéter --driver à
chaque commande.
minikube config set driver dockerVérifier le driver utilisé
Section intitulée « Vérifier le driver utilisé »Le driver est figé au moment de la création du profil : en changer impose de supprimer puis de recréer le cluster.
minikube profile listLa colonne Driver indique le driver de chaque cluster.
Gérer plusieurs clusters avec les profils
Section intitulée « Gérer plusieurs clusters avec les profils »Un profil Minikube = un cluster Kubernetes indépendant. Chaque profil a ses propres ressources, son driver et sa configuration.
Créer plusieurs profils
Section intitulée « Créer plusieurs profils »Chaque --profile produit un cluster entièrement séparé, avec son propre
réseau, ses propres nœuds et ses propres ressources. Les deux clusters ci-dessous
peuvent tourner simultanément si votre machine le supporte.
# Cluster de développementminikube start --profile=dev --cpus=2 --memory=2048 --driver=docker
# Cluster de test avec plus de ressourcesminikube start --profile=test --cpus=4 --memory=4096 --driver=dockerLister les profils
Section intitulée « Lister les profils »La sortie donne l'essentiel en une ligne par cluster : le driver utilisé, l'adresse IP à contacter, la version de Kubernetes déployée et le nombre de nœuds actifs.
minikube profile list|---------|--------|---------|--------------|---------|--------|-------|| Profile | Driver | Runtime | IP | Version | Status | Nodes ||---------|--------|---------|--------------|---------|--------|-------|| dev | docker | docker | 192.168.49.2 | v1.34.0 | OK | 1 || test | docker | docker | 192.168.58.2 | v1.34.0 | OK | 1 ||---------|--------|---------|--------------|---------|--------|-------|Basculer entre profils
Section intitulée « Basculer entre profils »Basculer de profil ne redémarre aucun cluster : cela change simplement celui
que les prochaines commandes minikube viseront par défaut.
minikube profile devCette commande configure aussi kubectl pour utiliser le bon contexte.
Vérification :
kubectl config current-contextdevSupprimer un profil
Section intitulée « Supprimer un profil »La suppression est définitive et ne demande aucune confirmation : le cluster, ses images en cache et ses volumes disparaissent en une commande.
minikube delete --profile=testCluster multi-nœuds (workers)
Section intitulée « Cluster multi-nœuds (workers) »Pour simuler un environnement plus réaliste avec des workers dédiés :
minikube start --nodes=3 --driver=docker --cpus=2 --memory=2048 --profile=multinodeCette commande crée :
- 1 control-plane (multinode)
- 2 workers (multinode-m02, multinode-m03)
Vérification :
kubectl get nodes -o wideNAME STATUS ROLES AGE VERSION INTERNAL-IPmultinode Ready control-plane 60s v1.34.0 192.168.49.2multinode-m02 Ready <none> 30s v1.34.0 192.168.49.3multinode-m03 Ready <none> 15s v1.34.0 192.168.49.4Ajouter un worker à un cluster existant
Section intitulée « Ajouter un worker à un cluster existant »Le nœud ajouté est un worker par défaut. Il rejoint le cluster en
quelques secondes et apparaît avec le rôle <none> dans kubectl get nodes.
minikube node add -p multinodeSupprimer un worker
Section intitulée « Supprimer un worker »L'argument attendu est le suffixe du nœud (m03), pas son nom complet.
Les pods qui y tournaient sont replanifiés sur les nœuds restants.
minikube node delete m03 -p multinodeCluster HA (haute disponibilité)
Section intitulée « Cluster HA (haute disponibilité) »Le mode HA (High Availability) crée un cluster avec 3 control-planes, chacun exécutant son propre etcd. Cette topologie est identique à celle recommandée pour la production (stacked etcd).
Fonctionnement
Section intitulée « Fonctionnement »Trois mécanismes se combinent dans ce mode. Le point à retenir est que la
VIP (l'adresse IP virtuelle) devient le point d'entrée unique du cluster, à
la place de l'adresse d'un nœud particulier : c'est ce qui rend la panne d'un
control-plane transparente pour kubectl.
- kube-vip gère une IP virtuelle (VIP) partagée entre les 3 control-planes
- En mode ARP, kube-vip redirige le trafic vers le leader actuel
- Si le leader tombe, un autre control-plane prend le relais automatiquement
- Les 3 instances etcd se synchronisent entre elles
Créer un cluster HA
Section intitulée « Créer un cluster HA »L'option --ha impose un minimum de trois control-planes. Attention aux
valeurs de CPU et de mémoire : elles s'appliquent à chaque nœud, pas au
cluster entier.
minikube start --ha --driver=docker --cpus=2 --memory=2048 --profile=ha-demoLe démarrage prend quelques minutes (3 nœuds à provisionner).
Vérification :
kubectl get nodes -o wideNAME STATUS ROLES AGE VERSION INTERNAL-IPha-demo Ready control-plane 60s v1.34.0 192.168.49.2ha-demo-m02 Ready control-plane 40s v1.34.0 192.168.49.3ha-demo-m03 Ready control-plane 20s v1.34.0 192.168.49.4minikube profile list|---------|--------|---------|----------------|---------|--------|-------|| Profile | Driver | Runtime | IP | Version | Status | Nodes ||---------|--------|---------|----------------|---------|--------|-------|| ha-demo | docker | docker | 192.168.49.254 | v1.34.0 | HAppy | 3 ||---------|--------|---------|----------------|---------|--------|-------|Vérifier kube-vip et etcd
Section intitulée « Vérifier kube-vip et etcd »Deux séries de pods doivent apparaître, avec une instance de chaque par control-plane. Un pod manquant signale un nœud qui n'a pas terminé de rejoindre le cluster.
# Pods kube-vip (un par control-plane)kubectl get pods -n kube-system | grep kube-vipkube-vip-ha-demo 1/1 Running 0 2mkube-vip-ha-demo-m02 1/1 Running 0 90skube-vip-ha-demo-m03 1/1 Running 0 60s# Pods etcd (un par control-plane)kubectl get pods -n kube-system | grep etcdetcd-ha-demo 1/1 Running 0 2metcd-ha-demo-m02 1/1 Running 0 90setcd-ha-demo-m03 1/1 Running 0 60sVérifier la VIP dans kubeconfig
Section intitulée « Vérifier la VIP dans kubeconfig »C'est le contrôle qui prouve que la haute disponibilité est réellement
active : kubectl doit viser la VIP et non l'adresse d'un nœud précis.
kubectl config view --minify | grep serverserver: https://192.168.49.254:8443L'IP 192.168.49.254 est la VIP gérée par kube-vip, pas l'IP d'un nœud spécifique.
Ajouter un worker au cluster HA
Section intitulée « Ajouter un worker au cluster HA »Sans l'option --control-plane, le nœud rejoint le cluster comme simple
worker : les trois control-planes restent inchangés.
minikube node add -p ha-demokubectl get nodesNAME STATUS ROLES AGE VERSIONha-demo Ready control-plane 5m v1.34.0ha-demo-m02 Ready control-plane 4m v1.34.0ha-demo-m03 Ready control-plane 3m v1.34.0ha-demo-m05 Ready <none> 30s v1.34.0Simuler une panne de control-plane
Section intitulée « Simuler une panne de control-plane »Supprimer un control-plane sur trois laisse le quorum etcd intact, deux membres sur trois restant disponibles. Le cluster continue donc de répondre, c'est exactement ce que la topologie HA cherche à démontrer.
# Supprimer un control-planeminikube node delete m02 -p ha-demominikube profile list|---------|--------|---------|----------------|---------|----------|-------|| Profile | Driver | Runtime | IP | Version | Status | Nodes ||---------|--------|---------|----------------|---------|----------|-------|| ha-demo | docker | docker | 192.168.49.254 | v1.34.0 | Degraded | 2 ||---------|--------|---------|----------------|---------|----------|-------|Le cluster passe en Degraded mais reste fonctionnel.
Restaurer un control-plane
Section intitulée « Restaurer un control-plane »L'option --control-plane est indispensable ici : sans elle, Minikube
ajoute un worker et le cluster reste affiché en Degraded.
minikube node add --control-plane -p ha-demoLe status revient à HAppy une fois le nœud synchronisé.
Utiliser kubectl avec Minikube
Section intitulée « Utiliser kubectl avec Minikube »Minikube et kubectl restent deux outils distincts : le premier fabrique le
cluster, le second lui parle. Au démarrage, Minikube écrit un contexte dans
votre fichier ~/.kube/config et le sélectionne, ce qui explique que kubectl
fonctionne immédiatement après un minikube start.
kubectl intégré
Section intitulée « kubectl intégré »Si kubectl n'est pas installé, Minikube fournit une version intégrée :
minikube kubectl -- get nodesConfigurer kubectl
Section intitulée « Configurer kubectl »Minikube configure automatiquement le contexte kubectl lors du minikube start.
Pour basculer manuellement :
kubectl config use-context ha-demoVérifier l'état du cluster
Section intitulée « Vérifier l'état du cluster »cluster-info interroge réellement l'API du cluster. Une réponse confirme
donc d'un coup que le certificat, le réseau et le contexte kubectl sont
cohérents.
kubectl cluster-infoKubernetes control plane is running at https://192.168.49.254:8443CoreDNS is running at https://192.168.49.254:8443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxyAdd-ons utiles
Section intitulée « Add-ons utiles »Les add-ons sont des extensions prêtes à l'emploi. Minikube en propose plus de 40.
Lister les add-ons
Section intitulée « Lister les add-ons »La liste est propre à chaque profil, d'où l'option -p. Un add-on activé
sur un cluster ne l'est pas sur les autres.
minikube addons list -p ha-demo | grep -E "enabled|dashboard|ingress|metrics"| dashboard | ha-demo | disabled | Kubernetes || ingress | ha-demo | disabled | Kubernetes || metrics-server | ha-demo | disabled | Kubernetes |Add-ons recommandés
Section intitulée « Add-ons recommandés »Ces trois extensions couvrent la majorité des besoins en apprentissage.
metrics-server conditionne la commande kubectl top, qui ne renvoie rien tant
qu'il n'est pas activé.
| Add-on | Description | Commande |
|---|---|---|
| metrics-server | Métriques CPU/RAM pour kubectl top | minikube addons enable metrics-server |
| dashboard | Interface web Kubernetes | minikube addons enable dashboard |
| ingress | Contrôleur Ingress NGINX | minikube addons enable ingress |
Activer metrics-server
Section intitulée « Activer metrics-server »L'activation déploie le composant et rend la main immédiatement, mais les premières métriques n'apparaissent qu'après une à deux minutes de collecte.
minikube addons enable metrics-server -p ha-demoVérification (après 1-2 minutes) :
kubectl top nodesNAME CPU(cores) CPU% MEMORY(bytes) MEMORY%ha-demo 150m 7% 1200Mi 60%ha-demo-m02 120m 6% 1100Mi 55%ha-demo-m03 110m 5% 1050Mi 52%Ouvrir le dashboard
Section intitulée « Ouvrir le dashboard »La commande active l'add-on si nécessaire, ouvre un proxy local puis lance le navigateur. Le proxy vit le temps de la commande : l'interrompre coupe l'accès au tableau de bord.
minikube dashboard -p ha-demoCette commande ouvre automatiquement le navigateur.
Charger des images locales
Section intitulée « Charger des images locales »Le problème : Vous avez buildé une image Docker sur votre machine, mais quand vous la déployez dans Minikube, Kubernetes ne la trouve pas.
Pourquoi ? Minikube utilise son propre daemon Docker (ou containerd) à l'intérieur du nœud. Votre image existe dans Docker sur l'hôte, pas dans le nœud Minikube. Ce sont deux environnements séparés.
Minikube propose plusieurs solutions, bien plus pratiques que Kind.
Méthode 1 : minikube image load (copier une image existante)
Section intitulée « Méthode 1 : minikube image load (copier une image existante) »Copie une image depuis Docker local vers le cache d'images Minikube :
# Builder votre image (dans Docker local)docker build -t mon-app:v1 .
# Copier vers Minikubeminikube image load mon-app:v1 -p demoVérifiez que l'image est disponible dans le cluster :
minikube image ls -p demo | grep mon-appdocker.io/library/mon-app:v1Déployer l'image :
apiVersion: v1kind: Podmetadata: name: testspec: containers: - name: app image: mon-app:v1 imagePullPolicy: Never # IMPORTANT : ne pas tenter de pullMéthode 2 : minikube image build (builder directement dans Minikube)
Section intitulée « Méthode 2 : minikube image build (builder directement dans Minikube) »Avantage majeur : Pas besoin de copier l'image, elle est buildée directement dans le nœud Minikube.
# Créer un Dockerfile de testcat > /tmp/Dockerfile << 'EOF'FROM nginx:1.31.3-alpine@sha256:4a73073bd557c65b759505da037898b61f1be6cbcc3c2c3aeac22d2a470c1752RUN echo "<h1>Built in Minikube!</h1>" > /usr/share/nginx/html/index.htmlEOF
# Builder directement dans Minikubeminikube image build -t my-nginx:v1 /tmp -p demo...Successfully built abc123def456Successfully tagged my-nginx:v1Vérifiez :
minikube image ls -p demo | grep my-nginxdocker.io/library/my-nginx:v1Quand utiliser image build vs image load ?
| Méthode | Cas d'usage |
|---|---|
image load | Vous avez déjà buildé l'image avec Docker |
image build | Vous voulez builder dans le contexte Minikube directement |
Exposer des services
Section intitulée « Exposer des services »Un cluster local n'a ni adresse publique ni équilibreur de charge fourni par un cloud. Minikube comble ce manque de deux manières selon le type de Service : une URL directe pour un NodePort, et un tunnel réseau pour un LoadBalancer.
Services NodePort
Section intitulée « Services NodePort »Minikube simplifie l'accès aux services NodePort :
# Déployer une appkubectl create deployment nginx --image=nginx:alpinekubectl expose deployment nginx --type=NodePort --port=80
# Obtenir l'URL d'accèsminikube service nginx --url -p demohttp://192.168.49.2:31234Pour ouvrir directement dans le navigateur :
minikube service nginx -p demoServices LoadBalancer avec minikube tunnel
Section intitulée « Services LoadBalancer avec minikube tunnel »Le problème : En production, un service de type LoadBalancer obtient une
IP externe du cloud provider. En local, Minikube ne peut pas attribuer d'IP,
votre service reste en EXTERNAL-IP: <pending> indéfiniment.
La solution : minikube tunnel crée un tunnel réseau qui attribue des IPs
externes aux services LoadBalancer.
-
Créer un service LoadBalancer :
Fenêtre de terminal kubectl create deployment echo --image=hashicorp/http-echo:0.2.3 \-- -text="Hello from Minikube"kubectl expose deployment echo --type=LoadBalancer --port=80 --target-port=5678Sans tunnel, le service reste en pending :
Fenêtre de terminal kubectl get svc echoNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEecho LoadBalancer 10.96.7.228 <pending> 80:31234/TCP 10s -
Lancer le tunnel (dans un terminal séparé) :
Fenêtre de terminal minikube tunnel -p demoLe tunnel demande le mot de passe sudo car il modifie les routes réseau.
-
Vérifier l'IP externe :
Fenêtre de terminal kubectl get svc echoNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEecho LoadBalancer 10.96.7.228 10.96.7.228 80:31234/TCP 30s -
Tester l'accès :
Fenêtre de terminal curl http://10.96.7.228Hello from Minikube
Partager des fichiers avec minikube mount
Section intitulée « Partager des fichiers avec minikube mount »Cas d'usage : Vous développez une application et voulez voir les modifications en temps réel sans rebuilder l'image à chaque changement.
minikube mount crée un montage réseau entre un dossier de votre machine et
le nœud Minikube.
-
Créer un dossier de test :
Fenêtre de terminal mkdir -p /tmp/minikube-shareecho "<h1>Hello from host!</h1>" > /tmp/minikube-share/index.html -
Monter le dossier (dans un terminal séparé) :
Fenêtre de terminal minikube mount /tmp/minikube-share:/mnt/share -p demo📁 Montage hôte /tmp/minikube-share dans VM en tant que /mnt/share...▪ Identifiant de montage: minikube-share▪ Options de montage: map[] -
Utiliser le montage dans un Pod :
pod-with-mount.yaml apiVersion: v1kind: Podmetadata:name: nginx-mountedspec:containers:- name: nginximage: nginx:1.31.3-alpinevolumeMounts:- name: host-filesmountPath: /usr/share/nginx/htmlvolumes:- name: host-fileshostPath:path: /mnt/share # Chemin DANS le nœud Minikubetype: DirectoryFenêtre de terminal kubectl apply -f pod-with-mount.yamlkubectl port-forward pod/nginx-mounted 8080:80 &curl http://localhost:8080<h1>Hello from host!</h1> -
Modifier le fichier sur l'hôte :
Fenêtre de terminal echo "<h1>Modified!</h1>" > /tmp/minikube-share/index.htmlcurl http://localhost:8080<h1>Modified!</h1>
Attention : Le montage utilise 9p sur réseau. C'est fonctionnel pour le développement mais pas pour des workloads intensifs en I/O.
Commandes essentielles
Section intitulée « Commandes essentielles »Ce tableau rassemble les commandes utilisées tout au long du guide. Notez la
présence systématique de l'option -p : sans elle, Minikube agit sur le profil
actif, qui n'est pas toujours celui que vous avez en tête.
| Action | Commande |
|---|---|
| Démarrer un cluster | minikube start -p <profil> |
| Arrêter un cluster | minikube stop -p <profil> |
| Supprimer un cluster | minikube delete -p <profil> |
| Status d'un cluster | minikube status -p <profil> |
| SSH dans un nœud | minikube ssh -p <profil> |
| Logs Minikube | minikube logs -p <profil> |
| IP du cluster | minikube ip -p <profil> |
| Exposer un service | minikube service <nom> -p <profil> |
| Tunnel LoadBalancer | minikube tunnel -p <profil> |
| Charger une image | minikube image load <image> -p <profil> |
| Builder une image | minikube image build -t <tag> <path> -p <profil> |
| Lister les images | minikube image ls -p <profil> |
| Monter un dossier | minikube mount <local>:<distant> -p <profil> |
| Utiliser Docker Minikube | eval $(minikube docker-env -p <profil>) |
Dépannage
Section intitulée « Dépannage »Les pannes rencontrées avec Minikube sont peu nombreuses et très reproductibles. Trois causes dominent : le manque de mémoire allouée, les limites inotify du noyau Linux sur les clusters multi-nœuds, et la confusion entre le stock d'images de l'hôte et celui du nœud.
Problèmes courants
Section intitulée « Problèmes courants »Le tableau donne la correspondance directe entre le symptôme affiché et le geste correctif. Les cas les plus fréquents sont détaillés juste après, avec le diagnostic complet.
| Symptôme | Cause probable | Solution |
|---|---|---|
| "Too many open files" | Limites inotify | sysctl fs.inotify.max_user_instances=512 |
| Nœud "NotReady" longtemps | Manque de RAM | Augmentez --memory, libérez de la RAM |
ImagePullBackOff image locale | imagePullPolicy: Always | Utilisez imagePullPolicy: Never |
LoadBalancer en <pending> | Pas de tunnel | Lancez minikube tunnel |
| Service inaccessible | Mauvaise IP | Utilisez minikube service --url |
minikube mount échoue | Firewall bloque 9p | Autorisez le port 37453 |
| Addon registry cassé | Bug v1.37.0 | Utilisez minikube image load à la place |
Erreur "Too many open files"
Section intitulée « Erreur "Too many open files" »Symptôme : Le nœud ne démarre pas avec l'erreur "Failed to create control group inotify object".
Solution :
sudo sysctl -w fs.inotify.max_user_instances=512sudo sysctl -w fs.inotify.max_user_watches=524288Pour rendre permanent, ajoutez dans /etc/sysctl.conf :
fs.inotify.max_user_instances=512fs.inotify.max_user_watches=524288Erreur "kubelet is not healthy"
Section intitulée « Erreur "kubelet is not healthy" »Symptôme : Un nœud reste en "NotReady" pendant plusieurs minutes.
Diagnostic :
# Vérifier les ressources Dockerdocker stats --no-stream
# Voir les logs du nœudminikube logs -p <profil> | tail -50
# SSH et vérifier systemdminikube ssh -p <profil>systemctl status kubeletSolutions :
-
Augmentez la mémoire :
Fenêtre de terminal minikube delete -p <profil>minikube start --memory=4096 -p <profil> -
Vérifiez que Docker a assez de ressources (Docker Desktop → Preferences)
Image locale non trouvée (ImagePullBackOff)
Section intitulée « Image locale non trouvée (ImagePullBackOff) »Symptôme : Votre Pod reste en ImagePullBackOff alors que l'image existe.
Causes possibles :
- L'image est dans Docker local mais pas dans Minikube
imagePullPolicyn'est pas configuré
Solution :
# Vérifier que l'image est dans Minikubeminikube image ls -p demo | grep mon-app
# Si absente, la chargerminikube image load mon-app:v1 -p demo
# Vérifier le manifest# Doit avoir : imagePullPolicy: Never ou IfNotPresentCluster HA bloqué en "Starting"
Section intitulée « Cluster HA bloqué en "Starting" »Symptôme : Le 3ème control-plane ne démarre pas.
Solutions :
-
Augmentez les limites inotify (voir ci-dessus)
-
Libérez de la RAM (6 Go minimum pour 3 nœuds)
-
Supprimez et recréez :
Fenêtre de terminal minikube delete -p ha-demominikube start --ha -p ha-demo
minikube tunnel ne fonctionne pas
Section intitulée « minikube tunnel ne fonctionne pas »Symptôme : L'IP externe reste <pending> malgré le tunnel.
Diagnostic :
# Vérifier que le tunnel tourneps aux | grep "minikube tunnel"
# Vérifier les routesip route | grep 10.96Solutions :
-
Relancez le tunnel avec
--cleanup:Fenêtre de terminal minikube tunnel --cleanup -p demo -
Vérifiez qu'aucun autre tunnel ne tourne
Réinitialiser complètement Minikube
Section intitulée « Réinitialiser complètement Minikube »À réserver au dernier recours. L'option --purge efface aussi les images
mises en cache, que le prochain démarrage devra retélécharger intégralement.
minikube delete --all --purgeCette commande supprime tous les clusters et le répertoire ~/.minikube.
À retenir
Section intitulée « À retenir »- Minikube crée des clusters Kubernetes locaux pour l'apprentissage et le dev
- Le driver docker est recommandé (léger), kvm2 pour l'isolation complète
- Les profils permettent de gérer plusieurs clusters indépendants
- Le mode multi-nœuds (
--nodes=N) simule un cluster avec workers - Le mode HA (
--ha) crée 3 control-planes avec kube-vip et etcd distribué minikube image loadcopie une image locale vers le clusterminikube image buildbuilde directement dans le nœud (plus simple)minikube tunnelattribue des IPs externes aux services LoadBalancerminikube mountpartage des fichiers entre l'hôte et le cluster- Les add-ons ajoutent des fonctionnalités (metrics, dashboard, ingress)
- Augmentez inotify pour les clusters multi-nœuds sur Linux