DEV Community

loading...

Kubernetes: Minikube with QEMU/KVM on Arch

Ismayil Mirzali
・3 min read

Alt Text

Minikube is a tool for easily creating Kubernetes clusters locally.

It boasts features like supporting multiple container runtimes and even Load Balancers so you can easily test your deployments/services locally.

Minikube lets you deploy your node as a VM, container or even bare metal. The default driver is VirtualBox, however KVM/QEMU usually performs better on Linux machines.

I assume that you'll be using Docker as your CRI. On Arch Linux, you'll need to get the following packages using Pacman:

🐺 ~ ⚡ ➜ sudo pacman -S minikube libvirt qemu dnsmasq ebtables dmidecode
Enter fullscreen mode Exit fullscreen mode

You then need to add your user to the libvirt group and start the service:

🐺 ~ ⚡ ➜ sudo usermod -aG libvirt $(whoami)
🐺 ~ ⚡ ➜ sudo systemctl start libvirtd.service
🐺 ~ ⚡ ➜ sudo systemctl enable libvirtd.service
Enter fullscreen mode Exit fullscreen mode

The libvirtd service may fail due to certain missing binaries, be sure to check the status and resolve any issues you may have.

🐺 ~ ⚡ ➜ sudo systemctl status libvirtd.service
Enter fullscreen mode Exit fullscreen mode

You can then run the validation tool:

🐺 ~ ⚡ ➜ virt-host-validate
  QEMU: Checking for hardware virtualization                                 : PASS
  QEMU: Checking if device /dev/kvm exists                                   : PASS
  QEMU: Checking if device /dev/kvm is accessible                            : PASS
  QEMU: Checking if device /dev/vhost-net exists                             : PASS
  QEMU: Checking if device /dev/net/tun exists                               : PASS
  QEMU: Checking for cgroup 'cpu' controller support                         : PASS
  QEMU: Checking for cgroup 'cpuacct' controller support                     : PASS
  QEMU: Checking for cgroup 'cpuset' controller support                      : PASS
  QEMU: Checking for cgroup 'memory' controller support                      : PASS
  QEMU: Checking for cgroup 'devices' controller support                     : PASS
  QEMU: Checking for cgroup 'blkio' controller support                       : PASS
  QEMU: Checking for device assignment IOMMU support                         : PASS
  QEMU: Checking if IOMMU is enabled by kernel                               : PASS
  QEMU: Checking for secure guest support                                    : WARN (AMD Secure Encrypted Virtualization appears to be disabled in kernel. Add kvm_amd.sev=1 to the kernel cmdline arguments)
  LXC: Checking for Linux >= 2.6.26                                          : PASS
  LXC: Checking for namespace ipc                                            : PASS
  LXC: Checking for namespace mnt                                            : PASS
  LXC: Checking for namespace pid                                            : PASS
  LXC: Checking for namespace uts                                            : PASS
  LXC: Checking for namespace net                                            : PASS
  LXC: Checking for namespace user                                           : PASS
  LXC: Checking for cgroup 'cpu' controller  support                         : PASS
  LXC: Checking for cgroup 'cpuacct'  controller support                     : PASS
  LXC: Checking for cgroup 'cpuset'  controller support                      : PASS
  LXC: Checking for cgroup 'memory'  controller support                      : PASS
  LXC: Checking for cgroup 'devices'  controller support                     : PASS
  LXC: Checking for cgroup 'freezer'  controller support                     : PASS
  LXC: Checking for cgroup 'blkio'  controller support                       : PASS
  LXC: Checking if device  /sys/fs/fuse/connections exists                   : PASS
Enter fullscreen mode Exit fullscreen mode

Change the Minikube driver to kvm2:

🐺 ~ ⚡ ➜ minikube config set driver kvm2
Enter fullscreen mode Exit fullscreen mode

It's nice to create a seperate kubeconfig file for Minikube to use for the cluster:

🐺 ~ ⚡ ➜ touch config && export KUBECONFIG=$(pwd)/config
Enter fullscreen mode Exit fullscreen mode

Finally, run minikube:

🐺 ~/repos ➜ minikube start
😄  minikube v1.12.2 on Arch
    ▪ KUBECONFIG=/home/lemagicien/repos/config
✨  Using the kvm2 driver based on user configuration
👍  Starting control plane node minikube in cluster minikube
🔥  Creating kvm2 VM (CPUs=2, Memory=4000MB, Disk=20000MB) ...
🐳  Preparing Kubernetes v1.18.3 on Docker 19.03.12 ...
🔎  Verifying Kubernetes components...
🌟  Enabled addons: default-storageclass, storage-provisioner
🏄  Done! kubectl is now configured to use "minikube"
Enter fullscreen mode Exit fullscreen mode

Your kubectl should now be talking to the minikube cluster! If you run into any issues, you can check Minikube Docs and ArchWiki.

Discussion (0)