Setup Virtualized Kubernetes Cluster
February 4, 2025 Β· View on GitHub
In this section, it describes how to set up virtual Kubernetes cluster using single physical host system.
Reference
Kubernetes IN Docker
Kubernetes IN Docker called kind is command line tool to create virtualized kubernetes cluster on single physical host system.
It creates docker containers as cluster host system with using linux namespaces, and starts systemd, kubelet and kubernetes api-server in those containers.
In one word, kind uses docker containers in the host docker system, so that it just appears to be virtual host systems are running as containers.
Command operation using kubectl will be port forwarded to the virtualized cluster node to conceal the abstraction as user experience.

Once kubernetes virtualized cluster is ready, everything else will be the same with physical cluster operation with using kubectl command.
Install
See Install Kubernetes Packages If the installation has been completed, we can see the kind version as following.
# No root permission is required to use KIND
> kind version
kind v0.19.0 go1.21.4 linux/amd64
CNI plugins
Single node cluster setup
- Start kind cluster
> kind create cluster
Creating cluster "kind" ...
β Ensuring node image (kindest/node:v1.25.2) πΌ
β Preparing nodes π¦
β Writing configuration π
β Starting control-plane πΉοΈ
β Installing CNI π
β Installing StorageClass πΎ
Set kubectl context to "kind-kind"
You can now use your cluster with:
kubectl cluster-info --context kind-kind
Have a nice day! π
> kubectl config get-contexts
CURRENT NAME CLUSTER AUTHINFO NAMESPACE
* kind-kind kind-kind kind-kind
> kubectl cluster-info --context kind-kind
Kubernetes control plane is running at https://127.0.0.1:33691
CoreDNS is running at https://127.0.0.1:33691/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
that is all to setup the Kubernetes Cluster, as you can see below, cluster is ready.
during cluster creation, kind adds the cluster configuration to ${HOME}/.kube/config, so that user can access the cluster system via kubectl command.
at the same time, it binds one of the host port to container runtime which runs Kubernetes api-server.
- Check cluster information
> kubectl get nodes -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
kind-control-plane Ready control-plane 5m1s v1.25.2 172.18.0.2 <none> Ubuntu 22.04.1 LTS 5.15.0-60-generic containerd://1.6.8
> docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
74f62b76ac50 kindest/node:v1.25.2 "/usr/local/bin/entrβ¦" 7 minutes ago Up 7 minutes 127.0.0.1:33691->6443/tcp kind-control-plane
- Delete kind cluster
> kind delete cluster
Deleting cluster "kind" ...
Multiple node cluster setup
It is likely that we need multiple nodes in virtual cluster to check pods and services connectivity for verification. To create multiple nodes cluster system with kind, yaml description is required to load to kind when it creates the virtual cluster.
we can also see Kind Advanced Tutorial.
- Start kind cluster
using KIND multiple node description template, kind can creates the virtual cluster with 3 virtual nodes as following.
> kind create cluster --config=kind-multiple-node.yaml
Creating cluster "kind" ...
β Ensuring node image (kindest/node:v1.25.2) πΌ
β Preparing nodes π¦ π¦ π¦
β Writing configuration π
β Starting control-plane πΉοΈ
β Installing CNI π
β Installing StorageClass πΎ
β Joining worker nodes π
Set kubectl context to "kind-kind"
You can now use your cluster with:
kubectl cluster-info --context kind-kind
Have a nice day! π
> kubectl cluster-info --context kind-kind
Kubernetes control plane is running at https://127.0.0.1:46403
CoreDNS is running at https://127.0.0.1:46403/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
> kubectl get nodes -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
kind-control-plane Ready control-plane 76s v1.25.2 172.18.0.3 <none> Ubuntu 22.04.1 LTS 5.15.0-60-generic containerd://1.6.8
kind-worker Ready <none> 55s v1.25.2 172.18.0.2 <none> Ubuntu 22.04.1 LTS 5.15.0-60-generic containerd://1.6.8
kind-worker2 Ready <none> 55s v1.25.2 172.18.0.4 <none> Ubuntu 22.04.1 LTS 5.15.0-60-generic containerd://1.6.8
- Delete kind cluster
> kind delete cluster
Deleting cluster "kind" ...