Tips for running a single-node Kubernetes cluster on WSL2 with Podman
-
Edit
/etc/containers/containers.conf
:- Set
cgroup_manager
tocgroupfs
- Set
events_logger
tofile
- Set
-
Run
minikube start --driver=podman
-
Enable minikube local registry addon:
minikube addons enable registry
-
Install docker-ce-cli package for your distro
-
Configure the environment to use minikube's Docker daemon (ie.
eval $(minikube -p minikube docker-env)
) -
Push/pull images to/from
localhost:5000/imagename
Note: Instead of pushing/pulling images into/from the registry, you can build and tag an image and set containers' imagePullPolicy
to IfNotPresent
or Never
-
Make sure minikube is started (ie. run
minikube start
) -
Open an elevated PowerShell prompt and execute the following commands:
# Run "wsl --list" and make sure the default WSL distro is set correctly $minikube_ip = "$(wsl minikube ip)" $wsl_ip = "$(wsl sh -c "ip addr show `$(ip route list default | grep -Po ' dev \K\w+') | grep -Po ' inet \K[\d.]+'")" route delete $minikube_ip 2>&1 | Out-Null route add $minikube_ip mask 255.255.255.255 $wsl_ip
Note: You can also route the whole podman network subnet instead of only the minikube ip
Note: Instructions above should be followed after every restart
Some distros like Debian, use the nftables framework by default. So in case of getting error messages like:
Error adding network: failed to list chains: running [...] iptables [...] (nf_tables)
Try switching to the legacy version of iptables.
The timeout value for timedCreateHost
is currently hardcoded in the Minikube source-code!
In case minikube terminates with an error message like:
StartHost failed, but will try again: creating host: create host timed out in 240.000000 seconds
Try pulling the image manually before starting minikube:
BASE_IMAGE="$(minikube start --help | sed -En "s:^.*base-image='([^@]+).*:\1:p")"
sudo podman pull $BASE_IMAGE
I’ll be happy to update this gist if you find out how to make it work or please feel free to fork it and add your own instructions.
As far as I know, Docker engine (not Docker Desktop) is still free to use for enterprises and you can enable systemd (see the link in my previous comment) and simply install docker engine within your WSL distro.