Kind ist ein Tool um schnell ein lokales Kubernetes Cluster mit Docker-Containern als nodes aufzusetzen. Kind wurde entwickelt um Kubernetes selbst zu testen, wird aber mittlerweile auch genommen um die lokale Entwicklung zu vereinfachen.
Es gibt viele verschiedene Wege Kind zu installieren. Wichtig hierbei ist, dass man docker,podman oder nerdctl installiert hat um auch eine Unterstützung für die Container bereit zu haben.
MacOS via homebrew
1brew install kind
Windows mit Chocolately
1choco install kind
Windows mit Winget
1brew install kind
Wenn wir kind mit Go installieren möchten, brauchen wir mindestens Go 1.16.
Zum installieren tippen wir nun:
1go install sigs.k8s.io/kind@v0.25.0
Selbstgebaute Binaries sind hier erhältlich: https://github.com/kubernetes-sigs/kind/releases
Ein Beispiel für Linux ist hier gegeben:
1# For AMD64 / x86_64
2[ $(uname -m) = x86_64 ] && curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.25.0/kind-linux-amd64
3# For ARM64
4[ $(uname -m) = aarch64 ] && curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.25.0/kind-linux-arm64
5chmod +x ./kind
6sudo mv ./kind /usr/local/bin/kind
Ein Cluster in Kind zu erstellen ist sehr einfach mit dem folgenden Befehl möglich
1kind create cluster
Damit sieht die Ausgabe wie folgt aus:
1➜ kind create cluster
2Creating cluster "kind" ...
3 ✓ Ensuring node image (kindest/node:v1.31.2) 🖼
4 ✓ Preparing nodes 📦
5 ✓ Writing configuration 📜
6 ✓ Starting control-plane 🕹️
7 ✓ Installing CNI 🔌
8 ✓ Installing StorageClass 💾
9Set kubectl context to "kind-kind"
10You can now use your cluster with:
11
12kubectl cluster-info --context kind-kind
13
14Thanks for using kind! 😊
Wir können nun unser kubernetes-Cluster mit kubectl ansprechen.
1➜ kubectl get nodes
2NAME STATUS ROLES AGE VERSION
3kind-control-plane Ready control-plane 28s v1.31.2
Um mehrere Nodes bereit zustellen um z.B. ein scheduling zu testen können wir für kind eine Konfigurationsdatei erstellen und bei der Clustererstellung mitgeben.
1# three node (two workers) cluster config
2kind: Cluster
3apiVersion: kind.x-k8s.io/v1alpha4
4nodes:
5- role: control-plane
6- role: worker
7- role: worker
Unsere config. Wichtig sind hier die nodes. Dort wird festgelegt, dass es eine control-plane und zwei worker gibt
Mitgeben kann man die Config wie folgt:
1➜ kind create cluster --name test --config kind-config.yaml
2Creating cluster "test" ...
3 ✓ Ensuring node image (kindest/node:v1.31.2) 🖼
4 ✓ Preparing nodes 📦 📦 📦
5 ✓ Writing configuration 📜
6 ✓ Starting control-plane 🕹️
7 ✓ Installing CNI 🔌
8 ✓ Installing StorageClass 💾
9 ✓ Joining worker nodes 🚜
10Set kubectl context to "kind-test"
11You can now use your cluster with:
12
13kubectl cluster-info --context kind-test
14
15Have a question, bug, or feature request? Let us know! https://kind.sigs.k8s.io/#community 🙂
Mittels des Namens kann man nun auch zwischen den Clustern hin und her wechseln und mehrere Kind-Cluster betreiben.
Löschen kann man das Cluster super einfach mit folgendem Befehl
1➜ kind delete cluster
2Deleting cluster "kind" ...
3Deleted nodes: ["kind-control-plane"]
4
5# alternativ mit einem Namen löschen
6
7➜ kind delete cluster --name test
8Deleting cluster "test" ...
9Deleted nodes: ["test-control-plane" "test-worker" "test-worker2"]