What is k3d?
k3d is a lightweight Kubernetes, which can be installed on your notebook, or low-power devices to test Kubernetes nodes and clusters.
Problems with minikube
Previously I was happily using Minikube, an alternative single-node cluster for development. But I found some issues like port-forwarding, and not restarting after the host system restarts. I did a lot of research, and I found some solutions for that like these (to access Minikube from any host in the home network.)
kubectl port-forward
minikube tunnel
These solutions worked to some extent, but I have noticed they created a lot of unnecessary processes when I checked with "htop" command.
I tried installing Nginx and did reverse-proxy to forward the traffic into the ingress load balancer. I was somehow happy with this. Also, I could even directly provide minikube ip address as the local service in cloudflare tunnel configuration. So, everything was working like a charm. However when I restarted my host system where minikube was running, I saw Minikube was stopped, and when I tried to start again, I got errors. For that, I had to stop and delete Minikube and redeploy all manifests which is tedious.
Why k3d
I compared Minikube with Kind and k3d, I have chosen k3d because it is lightweight and very easy to install.
Installation
Installation of k3d is very simple. Just run the following command:
curl -s https://raw.githubusercontent.com/k3d-io/k3d/main/install.sh | bash
(Pre-requisite: docker should be installed, can be checked with docker --version)
Now k3d can be directly tested.
Create clusters and nodes
k3d cluster create tkb --servers 1 --agents 3 --image rancher/k3s:latest
kubectl cluster-info
k3d cluster list
k3d cluster delete tkb
Install ingress
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/provider/cloud/deploy.yaml
Now the cool thing is, we can forward traffic from the host system into the ingress load balancer
k3d cluster create tkb -p "80:80@loadbalancer" --servers 1 --agents 3
Here, calling port 80 in the host will directly access the load balancer. To access hostnames, we need to write the hostnames information in "/etc/hosts" file in Linux. Or you can simply use central pi-hole dns configuration). We can simply call the services using hostnames
http://tomcat.kpaudel.lab
If the record of tomcat.kpaudel.lab exists in "/etc/hosts" file with the IP of the host system running k3d, we can get the tomcat service. We dont need any reverse proxy. This actually worked in Cloudflare tunnel configuration too, I just need to provide the host IP address (192.168.1.XXX), not the cluster IP address.