
Avec k3d ou Kind, vous pouvez créer un cluster Kubernetes local en quelques commandes sur votre poste. Ces outils sont parfaits pour apprendre, tester des manifests et faire des labs sans coût cloud. Dans ce guide, vous allez installer l’outil, créer un cluster, vérifier qu’il fonctionne, puis apprendre à le supprimer ou le recréer proprement.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- Choisir entre k3d et Kind selon vos besoins
- Installer l’outil de création de clusters
- Créer un cluster Kubernetes fonctionnel
- Vérifier que le cluster est opérationnel
- Gérer le cycle de vie (stop, start, delete)
Pourquoi un cluster local ?
Section intitulée « Pourquoi un cluster local ? »Avant de déployer en production, vous avez besoin d’un environnement pour apprendre et tester. Un cluster local offre plusieurs avantages :
| Avantage | Description |
|---|---|
| Gratuit | Pas de coûts cloud |
| Rapide | Création en moins de 2 minutes |
| Jetable | Supprimez et recréez à volonté |
| Identique | Mêmes commandes qu’en production |
k3d ou Kind : lequel choisir ?
Section intitulée « k3d ou Kind : lequel choisir ? »Les deux outils créent des clusters Kubernetes dans Docker, mais avec des philosophies différentes.
k3d est un wrapper autour de k3s, une distribution Kubernetes légère. Il crée des conteneurs Docker qui exécutent k3s.
Kind (Kubernetes IN Docker) a été conçu principalement pour tester Kubernetes lui-même. Il crée des conteneurs Docker qui exécutent un Kubernetes vanilla, souvent utilisé en CI.
| Critère | k3d | Kind |
|---|---|---|
| Distribution | k3s (léger) | Kubernetes vanilla |
| Démarrage | Généralement plus rapide | Plus lent au premier lancement |
| Ressources | Plus léger en général | Plus gourmand |
| Point d’entrée réseau | Conteneur load balancer inclus | Nécessite MetalLB pour un LB |
| Cas d’usage principal | Développement local, labs | Tests de conformité, CI |
Quel outil pour quel besoin ?
Section intitulée « Quel outil pour quel besoin ? »| Vous voulez… | Outil conseillé |
|---|---|
| Démarrer vite sur un poste modeste | k3d |
| Un environnement Kubernetes standard de test | Kind |
| Un cluster multi-nœuds léger | k3d |
| Faire de la CI de validation Kubernetes | Kind ou k3d |
| Apprendre Kubernetes en local | k3d (recommandé) |
Prérequis
Section intitulée « Prérequis »Avant de commencer, vous avez besoin de :
- Docker installé et fonctionnel (
docker psdoit fonctionner) - kubectl installé (guide d’installation)
- ~2 Go de RAM disponible
Vérifiez que Docker fonctionne :
docker psSi la commande retourne une liste (même vide), Docker est prêt.
Installer k3d ou Kind
Section intitulée « Installer k3d ou Kind »Installation de k3d
Section intitulée « Installation de k3d »Méthode rapide (script officiel) :
curl -s https://raw.githubusercontent.com/k3d-io/k3d/main/install.sh | bashVérifiez l’installation :
k3d versionk3d version v5.8.3k3s version v1.31.5-k3s1 (default)Installation de Kind
Section intitulée « Installation de Kind »Téléchargement du binaire (Linux amd64) :
curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.31.0/kind-linux-amd64chmod +x ./kindsudo mv ./kind /usr/local/bin/kindAlternatives : brew install kind (macOS/Linux) ou go install sigs.k8s.io/kind@latest (Go installé).
Vérifiez l’installation :
kind versionkind v0.31.0 go1.25.5 linux/amd64Créer votre premier cluster
Section intitulée « Créer votre premier cluster »Créer un cluster k3d
Section intitulée « Créer un cluster k3d »Une seule commande suffit :
k3d cluster create monappINFO[0000] Prep: NetworkINFO[0000] Created network 'k3d-monapp'INFO[0000] Created image volume k3d-monapp-imagesINFO[0001] Creating node 'k3d-monapp-server-0'INFO[0001] Creating LoadBalancer 'k3d-monapp-serverlb'INFO[0016] Cluster 'monapp' created successfully!INFO[0016] You can now use it like this:kubectl cluster-infoEn quelques secondes (variable selon votre machine), vous avez un cluster fonctionnel.
Créer un cluster Kind
Section intitulée « Créer un cluster Kind »kind create cluster --name monappCreating cluster "monapp" ... ✓ Ensuring node image (kindest/node:v1.32.0) ✓ Preparing nodes ✓ Writing configuration ✓ Starting control-plane ✓ Installing CNI ✓ Installing StorageClassSet kubectl context to "kind-monapp"Ce que l’outil a créé
Section intitulée « Ce que l’outil a créé »Comprendre ce qui vient d’être créé aide à démystifier Kubernetes.
Avec k3d, vous avez maintenant :
Section intitulée « Avec k3d, vous avez maintenant : »| Élément créé | Description |
|---|---|
| Conteneur serveur | Un conteneur Docker (k3d-monapp-server-0) qui exécute k3s avec le rôle control plane |
| Conteneur load balancer | Un point d’entrée (k3d-monapp-serverlb) pour simplifier l’exposition des ports locaux |
| Réseau Docker | Un réseau k3d-monapp pour la communication entre conteneurs |
| Volume d’images | Un volume Docker pour stocker les images de conteneurs du cluster |
| Contexte kubectl | Configuré automatiquement pour pointer vers ce cluster |
docker ps --filter "name=k3d-monapp"Avec Kind, vous avez maintenant :
Section intitulée « Avec Kind, vous avez maintenant : »| Élément créé | Description |
|---|---|
| Conteneur nœud | Un conteneur Docker (monapp-control-plane) qui exécute Kubernetes vanilla |
| Réseau Docker | Un réseau kind pour la communication |
| Contexte kubectl | Configuré automatiquement pour pointer vers ce cluster |
docker ps --filter "name=monapp"Vérifier que le cluster fonctionne
Section intitulée « Vérifier que le cluster fonctionne »Une fois le cluster créé, vérifiez qu’il est opérationnel :
-
Vérifiez le contexte kubectl
Fenêtre de terminal kubectl config current-contextRésultat k3d k3d-monapp -
Affichez les informations du cluster
Fenêtre de terminal kubectl cluster-infoRésultat Kubernetes control plane is running at https://0.0.0.0:xxxxxCoreDNS is running at https://0.0.0.0:xxxxx/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy -
Listez les nœuds
Fenêtre de terminal kubectl get nodesRésultat NAME STATUS ROLES AGE VERSIONk3d-monapp-server-0 Ready control-plane,master 1m v1.31.5+k3s1 -
Vérifiez les pods du cluster
Voir tous les pods dans tous les namespaces kubectl get pods -ACette commande montre que Kubernetes tourne déjà avec ses propres composants (DNS, proxy réseau, etc.) répartis dans plusieurs namespaces :
Exemple de résultat NAMESPACE NAME READY STATUS RESTARTS AGEkube-system coredns-xxxxx 1/1 Running 0 2mkube-system local-path-provisioner-xxxxx 1/1 Running 0 2mkube-system metrics-server-xxxxx 1/1 Running 0 2mTous les pods doivent être en
RunningouCompleted.
Gérer le cycle de vie du cluster
Section intitulée « Gérer le cycle de vie du cluster »Lister les clusters
Section intitulée « Lister les clusters »k3d cluster listNAME SERVERS AGENTS LOADBALANCERmonapp 1/1 0/0 truekind get clustersmonappArrêter un cluster (économiser les ressources)
Section intitulée « Arrêter un cluster (économiser les ressources) »k3d cluster stop monappk3d cluster start monappKind ne supporte pas l’arrêt. Vous devez supprimer et recréer le cluster.
Supprimer un cluster
Section intitulée « Supprimer un cluster »k3d cluster delete monappINFO[0000] Deleting cluster 'monapp'INFO[0001] Successfully deleted cluster monapp!kind delete cluster --name monappLa suppression :
- Arrête tous les conteneurs Docker du cluster
- Supprime le réseau Docker associé
- Retire le contexte de kubectl
Ce que vous n’avez pas besoin de comprendre tout de suite
Section intitulée « Ce que vous n’avez pas besoin de comprendre tout de suite »Pour utiliser un cluster local, vous n’avez pas besoin de maîtriser :
| Concept | Pourquoi l’ignorer pour l’instant |
|---|---|
| etcd | La base de données interne de Kubernetes — gérée automatiquement |
| CNI | Le plugin réseau — préconfiguré par k3d/Kind |
| CSI | Le stockage — un stockage local est inclus |
| Scheduler | Le composant qui place les pods — fonctionne tout seul |
| Admission controllers | Des contrôles avancés — pas utiles pour débuter |
Pour le moment, vous avez juste besoin d’un cluster qui répond à kubectl.
Aller plus loin
Section intitulée « Aller plus loin »Cluster multi-nœuds
Section intitulée « Cluster multi-nœuds »Pour simuler un environnement plus réaliste avec plusieurs machines :
k3d cluster create demo --servers 1 --agents 2| Option | Signification |
|---|---|
--servers 1 | 1 nœud control plane |
--agents 2 | 2 nœuds workers |
kubectl get nodesPour Kind, créez un fichier de configuration :
kind: ClusterapiVersion: kind.x-k8s.io/v1alpha4nodes: - role: control-plane - role: worker - role: workerkind create cluster --name demo --config kind-config.yamlChanger de cluster (si plusieurs)
Section intitulée « Changer de cluster (si plusieurs) »Si vous avez plusieurs clusters, changez de contexte :
kubectl config get-contextskubectl config use-context k3d-monappSwitched to context "k3d-monapp".Dépannage
Section intitulée « Dépannage »Le cluster ne démarre pas
Section intitulée « Le cluster ne démarre pas »| Symptôme | Cause probable | Solution |
|---|---|---|
| ”Cannot connect to Docker” | Docker non démarré | Vérifiez que Docker Desktop ou le service Docker est démarré selon votre système |
| ”Port already in use” | Le port d’API choisi est occupé | Arrêtez l’autre service ou utilisez --api-port pour changer de port |
| ”Insufficient memory” | Pas assez de RAM | Libérez de la mémoire ou réduisez le nombre de nœuds |
kubectl ne trouve pas le cluster
Section intitulée « kubectl ne trouve pas le cluster »kubectl config get-contextsSi le contexte n’apparaît pas, la solution la plus simple est de recréer le cluster :
k3d cluster delete monappk3d cluster create monappLes pods système restent en Pending
Section intitulée « Les pods système restent en Pending »kubectl get events -A --sort-by='.lastTimestamp' | head -20Cause fréquente : ressources insuffisantes. Solution : arrêtez d’autres applications gourmandes ou réduisez le nombre de nœuds du cluster.
Récapitulatif des commandes
Section intitulée « Récapitulatif des commandes »| Action | k3d | Kind |
|---|---|---|
| Créer | k3d cluster create nom | kind create cluster --name nom |
| Lister | k3d cluster list | kind get clusters |
| Arrêter | k3d cluster stop nom | ❌ Non supporté |
| Démarrer | k3d cluster start nom | ❌ Non supporté |
| Supprimer | k3d cluster delete nom | kind delete cluster --name nom |
À retenir
Section intitulée « À retenir »- k3d et Kind créent des clusters locaux pour apprendre, tester et faire de la CI — pas pour la production
- k3d est recommandé pour débuter : plus léger, plus rapide, inclut un point d’entrée réseau
- Kind est utile pour les tests de conformité et la CI sur un Kubernetes vanilla
- Un cluster local est jetable : si vous le cassez, supprimez-le et recréez-le
kubectlest configuré automatiquement après la création du clusterkubectl get pods -Amontre tous les pods dans tous les namespaces — utile pour vérifier l’état du cluster- Arrêter vs supprimer : arrêter préserve vos déploiements (k3d seulement), supprimer libère tout
Prochaines étapes
Section intitulée « Prochaines étapes »Votre cluster est prêt. Passez au déploiement de votre première application :