kind (Kubernetes in Docker) est un outil kubernetes-sigs qui crée des clusters Kubernetes en utilisant des conteneurs Docker (ou Podman depuis v0.20) comme nœuds. Chaque nœud est un conteneur, ce qui permet des clusters multi-nœuds, plusieurs clusters en parallèle et un port mapping précis. kind est l'outil de référence pour les pipelines CI/CD - il est utilisé dans les tests end-to-end officiels de Kubernetes lui-même. Les images de nœuds sont versionnées (kindest/node:v1.32.0), garantissant une reproductibilité exacte entre environnements.
Informations essentielles
Origine : Kubernetes SIG Testing · Licence : Apache 2.0 · Architectures : x86_64, ARM64
Liens : Site officiel · Documentation · GitHub · Releases
Support : Kubernetes SIG Testing. Utilisé dans les tests e2e officiels de Kubernetes.
Stack par défaut
| Composant | Valeur |
|---|---|
| Runtime requis | Docker 20.10+ ou Podman 4.0+ (depuis kind v0.20) |
| Image nœud | kindest/node:v1.32.x (versionnée - pas de :latest) |
| Réseau | Bridge Docker dédié (kind) |
| kubeconfig context | kind-<cluster-name> |
| Multi-cluster | Oui, plusieurs clusters simultanés |
Prérequis
| Ressource | Valeur |
|---|---|
| Docker | 20.10+ (ou Podman 4.0+) |
| kubectl | Configuré automatiquement via kind get kubeconfig |
Installation
# Linux
curl -Lo kind \
https://github.com/kubernetes-sigs/kind/releases/latest/download/kind-linux-amd64
chmod +x kind && sudo mv kind /usr/local/bin/
# macOS
brew install kind
# Windows (Chocolatey)
choco install kind
kind version
Créer et gérer un cluster
# Cluster minimal (nommé "kind" par défaut)
kind create cluster
# Cluster nommé
kind create cluster --name mycluster
# Cluster avec une version K8s spécifique
kind create cluster --name mycluster --image kindest/node:v1.31.0
# Lister les clusters
kind get clusters
# Supprimer un cluster
kind delete cluster --name mycluster
# Récupérer le kubeconfig
kind get kubeconfig --name mycluster > ~/.kube/kind-mycluster.yaml
# Vérifier le contexte
kubectl cluster-info --context kind-mycluster
Configuration multi-nœuds
# kind-config.yaml
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
- role: worker
- role: worker
- role: worker
kind create cluster --name mycluster --config kind-config.yaml
kubectl get nodes
Port mapping pour Ingress
Pour exposer un Ingress Controller sur les ports 80/443 de la machine hôte :
# kind-ingress.yaml
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
kubeadmConfigPatches:
- |
kind: InitConfiguration
nodeRegistration:
kubeletExtraArgs:
node-labels: "ingress-ready=true"
extraPortMappings:
- containerPort: 80
hostPort: 80
protocol: TCP
- containerPort: 443
hostPort: 443
protocol: TCP
kind create cluster --name ingress-cluster --config kind-ingress.yaml
# Installer NGINX Ingress Controller (build kind officiel)
kubectl apply -f \
https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/kind/deploy.yaml
# Attendre que l'ingress controller soit prêt
kubectl wait --namespace ingress-nginx \
--for=condition=ready pod \
--selector=app.kubernetes.io/component=controller \
--timeout=90s
Registry locale
# 1. Créer une registry Docker locale
docker run -d --restart=always \
-p 127.0.0.1:5001:5000 \
--network bridge \
--name kind-registry \
registry:2
# 2. Connecter la registry au réseau kind
docker network connect kind kind-registry
# 3. Déclarer la registry dans le cluster
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: ConfigMap
metadata:
name: local-registry-hosting
namespace: kube-public
data:
localRegistryHosting.v1: |
host: "localhost:5001"
help: "https://kind.sigs.k8s.io/docs/user/local-registry/"
EOF
# Utilisation
docker build -t localhost:5001/myimage:tag .
docker push localhost:5001/myimage:tag
# Dans les manifests : image: localhost:5001/myimage:tag
Charger des images locales (sans registry)
# Charger une image Docker locale directement dans le cluster
kind load docker-image myimage:tag --name mycluster
# Charger plusieurs images
kind load docker-image image1:tag image2:tag --name mycluster
Mise à jour
# Linux
curl -Lo kind \
https://github.com/kubernetes-sigs/kind/releases/latest/download/kind-linux-amd64
chmod +x kind && sudo mv kind /usr/local/bin/
# macOS
brew upgrade kind
Troubleshooting
# Logs du nœud control-plane (conteneur Docker)
docker logs mycluster-control-plane
# Entrer dans le nœud
docker exec -it mycluster-control-plane bash
# Images disponibles dans le cluster
docker exec mycluster-control-plane crictl images
# Pods système en erreur
kubectl get pods -n kube-system
# Cluster en erreur au démarrage
# Vérifier que Docker dispose d'assez de mémoire
docker info | grep -E "Memory|CPUs"
# Contexte kubectl incorrect
kubectl config use-context kind-mycluster
# Réinitialiser
kind delete cluster --name mycluster
kind create cluster --name mycluster
Ressources
- Site officiel : https://kind.sigs.k8s.io
- Documentation : https://kind.sigs.k8s.io/docs/
- GitHub : https://github.com/kubernetes-sigs/kind
- Images kindest/node disponibles : https://github.com/kubernetes-sigs/kind/releases
- Ingress sur kind : https://kind.sigs.k8s.io/docs/user/ingress/