Aller au contenu
Conteneurs & Orchestration medium
🔐 Alerte sécurité — Incident supply chain Trivy : lire mon analyse de l'attaque

Créer votre premier cluster Kubernetes local avec k3d ou Kind

15 min de lecture

logo kubernetes

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.

  • 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)

Avant de déployer en production, vous avez besoin d’un environnement pour apprendre et tester. Un cluster local offre plusieurs avantages :

AvantageDescription
GratuitPas de coûts cloud
RapideCréation en moins de 2 minutes
JetableSupprimez et recréez à volonté
IdentiqueMêmes commandes qu’en production

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èrek3dKind
Distributionk3s (léger)Kubernetes vanilla
DémarrageGénéralement plus rapidePlus lent au premier lancement
RessourcesPlus léger en généralPlus gourmand
Point d’entrée réseauConteneur load balancer inclusNécessite MetalLB pour un LB
Cas d’usage principalDéveloppement local, labsTests de conformité, CI
Vous voulez…Outil conseillé
Démarrer vite sur un poste modestek3d
Un environnement Kubernetes standard de testKind
Un cluster multi-nœuds légerk3d
Faire de la CI de validation KubernetesKind ou k3d
Apprendre Kubernetes en localk3d (recommandé)

Avant de commencer, vous avez besoin de :

  • Docker installé et fonctionnel (docker ps doit fonctionner)
  • kubectl installé (guide d’installation)
  • ~2 Go de RAM disponible

Vérifiez que Docker fonctionne :

Vérifier Docker
docker ps

Si la commande retourne une liste (même vide), Docker est prêt.

Méthode rapide (script officiel) :

Installer k3d via script
curl -s https://raw.githubusercontent.com/k3d-io/k3d/main/install.sh | bash

Vérifiez l’installation :

Vérifier la version
k3d version
Exemple de résultat (versions testées)
k3d version v5.8.3
k3s version v1.31.5-k3s1 (default)

Une seule commande suffit :

Créer le cluster
k3d cluster create monapp
Résultat
INFO[0000] Prep: Network
INFO[0000] Created network 'k3d-monapp'
INFO[0000] Created image volume k3d-monapp-images
INFO[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-info

En quelques secondes (variable selon votre machine), vous avez un cluster fonctionnel.

Comprendre ce qui vient d’être créé aide à démystifier Kubernetes.

Élément crééDescription
Conteneur serveurUn conteneur Docker (k3d-monapp-server-0) qui exécute k3s avec le rôle control plane
Conteneur load balancerUn point d’entrée (k3d-monapp-serverlb) pour simplifier l’exposition des ports locaux
Réseau DockerUn réseau k3d-monapp pour la communication entre conteneurs
Volume d’imagesUn volume Docker pour stocker les images de conteneurs du cluster
Contexte kubectlConfiguré automatiquement pour pointer vers ce cluster
Voir les conteneurs créés
docker ps --filter "name=k3d-monapp"

Une fois le cluster créé, vérifiez qu’il est opérationnel :

  1. Vérifiez le contexte kubectl

    Fenêtre de terminal
    kubectl config current-context
    Résultat k3d
    k3d-monapp
  2. Affichez les informations du cluster

    Fenêtre de terminal
    kubectl cluster-info
    Résultat
    Kubernetes control plane is running at https://0.0.0.0:xxxxx
    CoreDNS is running at https://0.0.0.0:xxxxx/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
  3. Listez les nœuds

    Fenêtre de terminal
    kubectl get nodes
    Résultat
    NAME STATUS ROLES AGE VERSION
    k3d-monapp-server-0 Ready control-plane,master 1m v1.31.5+k3s1
  4. Vérifiez les pods du cluster

    Voir tous les pods dans tous les namespaces
    kubectl get pods -A

    Cette 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 AGE
    kube-system coredns-xxxxx 1/1 Running 0 2m
    kube-system local-path-provisioner-xxxxx 1/1 Running 0 2m
    kube-system metrics-server-xxxxx 1/1 Running 0 2m

    Tous les pods doivent être en Running ou Completed.

Fenêtre de terminal
k3d cluster list
Résultat
NAME SERVERS AGENTS LOADBALANCER
monapp 1/1 0/0 true
Arrêter
k3d cluster stop monapp
Redémarrer
k3d cluster start monapp
Fenêtre de terminal
k3d cluster delete monapp
Résultat
INFO[0000] Deleting cluster 'monapp'
INFO[0001] Successfully deleted cluster monapp!

La 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 :

ConceptPourquoi l’ignorer pour l’instant
etcdLa base de données interne de Kubernetes — gérée automatiquement
CNILe plugin réseau — préconfiguré par k3d/Kind
CSILe stockage — un stockage local est inclus
SchedulerLe composant qui place les pods — fonctionne tout seul
Admission controllersDes contrôles avancés — pas utiles pour débuter

Pour le moment, vous avez juste besoin d’un cluster qui répond à kubectl.

Pour simuler un environnement plus réaliste avec plusieurs machines :

Cluster avec 1 server et 2 agents
k3d cluster create demo --servers 1 --agents 2
OptionSignification
--servers 11 nœud control plane
--agents 22 nœuds workers
Vérifier
kubectl get nodes

Si vous avez plusieurs clusters, changez de contexte :

Lister les contextes
kubectl config get-contexts
Changer de contexte
kubectl config use-context k3d-monapp
Résultat
Switched to context "k3d-monapp".
SymptômeCause probableSolution
”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 RAMLibérez de la mémoire ou réduisez le nombre de nœuds
Vérifier les contextes disponibles
kubectl config get-contexts

Si le contexte n’apparaît pas, la solution la plus simple est de recréer le cluster :

Recréer proprement
k3d cluster delete monapp
k3d cluster create monapp
Voir les événements récents
kubectl get events -A --sort-by='.lastTimestamp' | head -20

Cause fréquente : ressources insuffisantes. Solution : arrêtez d’autres applications gourmandes ou réduisez le nombre de nœuds du cluster.

Actionk3dKind
Créerk3d cluster create nomkind create cluster --name nom
Listerk3d cluster listkind get clusters
Arrêterk3d cluster stop nom❌ Non supporté
Démarrerk3d cluster start nom❌ Non supporté
Supprimerk3d cluster delete nomkind delete cluster --name nom
  1. k3d et Kind créent des clusters locaux pour apprendre, tester et faire de la CI — pas pour la production
  2. k3d est recommandé pour débuter : plus léger, plus rapide, inclut un point d’entrée réseau
  3. Kind est utile pour les tests de conformité et la CI sur un Kubernetes vanilla
  4. Un cluster local est jetable : si vous le cassez, supprimez-le et recréez-le
  5. kubectl est configuré automatiquement après la création du cluster
  6. kubectl get pods -A montre tous les pods dans tous les namespaces — utile pour vérifier l’état du cluster
  7. Arrêter vs supprimer : arrêter préserve vos déploiements (k3d seulement), supprimer libère tout

Votre cluster est prêt. Passez au déploiement de votre première application :

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracing. Aujourd'hui, ce site ne couvre même pas mes frais d'hébergement, d'électricité, de matériel, de logiciels, mais surtout de cafés.

Un soutien régulier, même symbolique, m'aide à garder ces ressources gratuites et à continuer de produire des guides de qualité. Merci pour votre appui.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn