Skip to content

Instantly share code, notes, and snippets.

@CharlyCeballos
Forked from wholroyd/preparations.md
Created June 19, 2024 21:32
Show Gist options
  • Save CharlyCeballos/b3ccee1771420778116be67f988532e9 to your computer and use it in GitHub Desktop.
Save CharlyCeballos/b3ccee1771420778116be67f988532e9 to your computer and use it in GitHub Desktop.
Getting Minikube on WSL2 Ubuntu working

Windows Preparation

  1. Ensure hypervisor functionality is enabled in BIOS.

    • I know it sounds stupid, but if you already have it enabled, disable it, restart the machine, and enable it again.
    • Otherwise you will hit microsoft/WSL#5363
  2. Launch a PowerShell prompt in Administrator mode [Win+X > Windows PowerShell (Admin)]

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
bcdedit /set hypervisorlaunchtype auto
  1. Install the Linux kernel update package and install it

  2. Restart machine

  3. Launch a PowerShell prompt in Administrator mode [Win+X > Windows PowerShell (Admin)]

wsl --set-default-version 2
  1. Install Ubuntu Linux distribution of your choice from the Windows Store (not the one with the version in the names)

  2. Verify WSL version is set correctly

wsl --list --verbose

Ubuntu Preparation

  1. Run series of commands to get right build of Docker installed
    • Removes the old crap, gets the dependencies right, adds Docker key, adds Docker repo, installs the new hotness
sudo apt-get remove docker docker-engine docker.io containerd runc
sudo apt-get update
sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"
sudo apt-get update
sudo apt-get upgrade -y
sudo apt-get install docker-ce docker-ce-cli containerd.io -y
  1. Run series of commands to ensure you can interact with Docker without root
    • Third command here is a trick to reload your profile without actually logging out
    • Closing out Ubuntu shell and starting over instead of third command is an option
sudo groupadd docker
sudo usermod -aG docker ${USER}
su -s ${USER}
  1. Test the Docker configuration
sudo service docker start
docker run hello-world

If you have issues with the docker run hello-world command, see the troubleshooting.md on this gist.

Minikube Preparation

  1. Install Minikube
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube_latest_amd64.deb
sudo apt install ./minikube_latest_amd64.deb -y
rm minikube_latest_amd64.deb
  1. Start it
minikube start
  1. Get the dashboard going
    • The dashboard will continue to run and does not return back to a prompt here
    • You will need to kill the dashboard to continue in the guide
minikube dashboard
  1. Open the dashboard in your favorite browser (in Windows)
    • Port is dynamic, so can't document it well - you'll just have to be good at reading directions
    • The port will be in output of step 3 command
    • Should look something like this...
http://127.0.0.1:[PORT GOES HERE]/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/#/workloads?namespace=default
  1. This process is going to block you from the finishing this guide, but to keep it running, do the following...
    • Perform "CTRL+Z" on the keyboard to send the process into paused state
    • Execute the following command to resume the paused process in the background
bg

Kubectl Preparation

  1. Install Kubectl
    • Adds k8s key, adds k8s repo, installs the new hotness
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee -a /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
sudo apt-get install -y kubectl
  1. Use it
kubectl get po -A

Helm Preparation

  1. Install Helm
curl --output helm-linux-amd64.tar.gz https://get.helm.sh/helm-v3.4.2-linux-amd64.tar.gz
tar -zxvf helm-linux-amd64.tar.gz
sudo mv linux-amd64/helm /usr/local/bin/helm
rm helm-linux-amd64.tar.gz
rm -rf linux-amd64
  1. Use it
helm version

Docker Start Failure

When using the preparations.md instructions...

--- If you get an [OK] message when doing sudo service docker start, but the docker run hello-world command fails:

Run the docker daemon on the terminal directly in debug mode

dockerd -D

If you get this message at the end of the output, this means we need the legacy iptables...

DEBU[2023-05-30T11:13:13.522324640-04:00] sd notification                               error="<nil>" notified=false state="STOPPING=1"
failed to start daemon: Error initializing network controller: error obtaining controller instance: unable to add return rule in DOCKER-ISOLATION-STAGE-1 chain:  (iptables failed: iptables --wait -A DOCKER-ISOLATION-STAGE-1 -j RETURN: iptables v1.8.7 (nf_tables):  RULE_APPEND failed (No such file or directory): rule in chain DOCKER-ISOLATION-STAGE-1
 (exit status 4))

This can be fixed by running these commands...

sudo update-alternatives --set iptables /usr/sbin/iptables-legacy
sudo update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy

Once complete, start #3 on the preparations.md instructions over again.

Thank you to coarsehorse for identifying the resolution for this problem.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment