minikube on WSL2 with Podman

Tips for running a single-node Kubernetes cluster on WSL2 with Podman

From: https://github.com/containers/podman/blob/main/docs/tutorials/podman-for-windows.md

Instructions

  1. Install Podman
  2. Edit /etc/containers/containers.conf:

    • Set cgroup_manager to cgroupfs
    • Set events_logger to file
  3. Install minikube
  4. Run minikube start --driver=podman
time use: start 20:50 to ~

$ minikube start --driver=podman

😄  minikube v1.29.0 on Microsoft Windows 10 Pro 10.0.19045.2486 Build 19045.2486
  Using the podman (experimental) driver based on user configuration
📌  Using Podman driver with root privileges
  Local proxy ignored: not passing HTTP_PROXY=http://127.0.0.1:3128 to docker env.
  Local proxy ignored: not passing HTTPS_PROXY=http://127.0.0.1:3128 to docker env.
  Local proxy ignored: not passing HTTP_PROXY=http://127.0.0.1:3128 to docker env.
  Local proxy ignored: not passing HTTPS_PROXY=http://127.0.0.1:3128 to docker env.
👍  Starting control plane node minikube in cluster minikube
🚜  Pulling base image ...
💾  Downloading Kubernetes v1.26.1 preload ...
    > gcr.io/k8s-minikube/kicbase...:  94.37 MiB / 407.19 MiB  23.18% 653.91 Ki

Local Registry

  1. Enable minikube local registry addon:
    minikube addons enable registry
    
  2. Install docker-ce-cli package for your distro
  3. Configure the environment to use minikube's Docker daemon (ie. eval $(minikube -p minikube docker-env))
  4. 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

Reaching minikube from Windows (Minikube <= v1.11.x)

  1. Make sure minikube is started (ie. run minikube start)
  2. Open an elevated PowerShell prompt and execute the following commands:
    1
    2
    3
    4
    5
    6
    # 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

Troubleshooting

Podman does not play nicely with iptables-nft

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.

Podman might not be able to pull the kicbase image in 240 seconds

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
Edit Report
Pub: 14 Feb 2023 13:31 UTC
Edit: 14 Feb 2023 13:56 UTC
Views: 53