IT-Knowledgebase
de DevOps Software Kubernetes KinD

Kubernetes Cluster mit Kind aufsetzen

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.

Kind installieren

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.

Kind installieren mit einem Paket Manager

MacOS via homebrew

1brew install kind

Windows mit Chocolately

1choco install kind

Windows mit Winget

1brew install kind

Kind installieren mit go

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

Herunterladen der Binary

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

Starten eines Clusters

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

Multi Node Cluster aufsetzen

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 des Cluster

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"]