KIND, otherwise known as Kubernetes in Docker is a well known testing environment that many people use to get practice on Kubernetes.
However, with changes to Docker licensing and advancements with Podman I wanted to see if I could run KIND on Podman. It turns out this is not only possible but some of the massive networking headaches when trying to expose applications to your network or even local host have also been effectively solved with Cloud Provider Kind https://github.com/kubernetes-sigs/cloud-provider-kind
Today I will install a Kind cluster and Kasten on my Arch Linux laptop running only podman (not Podman Desktop). I should then be able to leverage ingress in Kasten to access the dashboard.
To install Podman you can find the instructions here: https://podman.io/docs/installation
There is a Kind Arch Linux package https://aur.archlinux.org/packages/kind and for your distribution check the Kind documetation: https://kind.sigs.k8s.io/docs/user/quick-start/
First I will install a single node Kind cluster:
kind create cluster
kind get cluster

The podman provider is still considered experimental.
Check to see if you can access the cluster:
kubectl get nodes

Now its time to install the Kind Cloud Provider:
Make sure you have go installed https://go.dev/doc/install
go install sigs.k8s.io/cloud-provider-kind@latest
sudo install ~/go/bin/cloud-provider-kind /usr/local/bin
Since I am running a single node cluster and want the loadbalancer to be able to function on control nodes I need to use this command:
$ kubectl label node kind-control-plane node.kubernetes.io/exclude-from-external-load-balancers-
Next I will start the cloud provider in a separate terminal and leave it running. As the instructions state, for windows, MacOs, and in my case with podman we need to add --enable-lb-port-mapping. In podman’s case it is because it can’t assign privileged ports:
cloud-provider-kind -enable-lb-port-mapping
Leave that running in a separate terminal.
----------------------------------------------------------------------------------------------------------------------------------------
Now it is time for Kasten.
You can install the csi-hostpath driver and external snapshotter to leverage Kasten:
https://github.com/kubernetes-csi/external-snapshotter
https://github.com/kubernetes-csi/csi-driver-host-path
helm upgrade k10 kasten/k10 --namespace=kasten-io --reuse-values --set externalGateway.create=true --set auth.tokenAuth.enabled=true
kubectl get po -n kasten-io

The gateway service is a Loadbalancer but that external IP is not how we will access the Dashboard:
kubectl get svc -n kasten-io

Instead we will checkout what podman is doing and the check the last envoy container that was created:
podman ps

The kindccm-550b7ea0ff75 container is mapping to port 80
I will inspect it an sure enough I see that it has the Kasten gateway pod’s address there:
podman inspect kindccm-550b7ea0ff75



So if I go to port 41987 in my laptop browser I should see:

It worked!
In my next post I will leverage some backups on this new very lean and mean cluster that is using minimal resources.