Well I was exploring ways to install a Kubernetes cluster in my machine, then I found out about Kind.
Now what is Kind ? Its a tool for running local Kubernetes clusters using Docker containers as nodes. Kind was primarily designed for testing Kubernetes itself, but may be used for local development.
Prerequisites:
Docker
Kubectl
To install docker on your machine you can follow the steps here.
For installing kubectl, follow this.
Once this is done lets proceed to install kind.
Setting up Kind:
Run the following command using powershell-
curl.exe -Lo kind-windows-amd64.exe https://kind.sigs.k8s.io/dl/v0.24.0/kind-windows-amd64
Move-Item .\kind-windows-amd64.exe c:\some-dir-in-your-PATH\kind.exe
Under Advanced system settings” > Click on “Environment Variables” under “System Variables” set new “Path” variable to "c:\some-dir-in-your-PATH\kind.exe"
Now to create a default kind cluster -
kind create cluster
It will create a cluster with 1 node --"kind-control-plane"
You can check cluster info with this command -
kubectl cluster-info --context kind-kind
Creating cluster with worker nodes:
Now lets create a kind cluster with 2 worker nodes -
Create a kind.yaml file with content below.
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
- role: worker
- role: worker
Save the file and when creating the cluster, use the --config option to introduce the new cluster configuration:
kind create cluster --config kind.yaml --name Demo-cluster
Check cluster details:
kubectl cluster-info --context kind-Demo-cluster
Now to create it with ingress, use the below config file
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
name: kind
nodes:
- role: control-plane
kubeadmConfigPatches:
- |
kind: InitConfiguration
nodeRegistration:
kubeletExtraArgs:
node-labels: "ingress-ready=true"
extraPortMappings:
- containerPort: 80
hostPort: 8080
protocol: TCP
- containerPort: 443
hostPort: 44300
protocol: TCP
- role: worker
- role: worker
Now run the command to create cluster and get the nodes details:
kind create cluster --config kind.yaml --name demo-cluster
PS D:\> kubectl get nodes
NAME STATUS ROLES AGE VERSION
demo-cluster-control-plane Ready control-plane 3m40s v1.31.0
demo-cluster-worker Ready <none> 3m27s v1.31.0
demo-cluster-worker2 Ready <none> 3m27s v1.31.0
Lets check the pods created:
PS D:\> kubectl get pods -A
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-6f6b679f8f-5wj7s 1/1 Running 0 6m15s
kube-system coredns-6f6b679f8f-fvm2s 1/1 Running 0 6m15s
kube-system etcd-demo-cluster-control-plane 1/1 Running 0 6m22s
kube-system kindnet-4xrd2 1/1 Running 0 6m10s
kube-system kindnet-ndrrk 1/1 Running 0 6m10s
kube-system kindnet-vgw4q 1/1 Running 0 6m15s
kube-system kube-apiserver-demo-cluster-control-plane 1/1 Running 0 6m22s
kube-system kube-controller-manager-demo-cluster-control-plane 1/1 Running 0 6m21s
kube-system kube-proxy-b29wr 1/1 Running 0 6m15s
kube-system kube-proxy-f5ddp 1/1 Running 0 6m10s
kube-system kube-proxy-j8v8v 1/1 Running 0 6m10s
kube-system kube-scheduler-demo-cluster-control-plane 1/1 Running 0 6m22s
local-path-storage local-path-provisioner-57c5987fd4-zm5fr 1/1 Running 0 6m15s