Setting up Minikube on Thinkpad X220
Today, I was setting up Minikube on Thinkpad X220 running Ubuntu.
Enable and install KVM
- Boot systems to BIOS with the F1 key at power on.
- Select the Security tab in the BIOS.
- Enable Intel VTT and Intel VT-d.
Follow instructions from https://help.ubuntu.com/community/KVM/Installation.
Check that your CPU supports hardware virtualization. To run KVM, you need a processor that supports hardware virtualization. Intel and AMD both have developed extensions for their processors, deemed respectively Intel VT-x (code name Vanderpool) and AMD-V (code name Pacifica). To see if your processor supports one of these, you can review the output from this command:
$ egrep -c '(vmx|svm)' /proc/cpuinfo 8 $ kvm-ok INFO: /dev/kvm exists KVM acceleration can be used
Install packages:
$ sudo apt-get install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils
Add your user to kvm groups:
$ sudo adduser `id -un` libvirt Adding user '<username>' to group 'libvirt' ... $ sudo adduser `id -un` kvm Adding user '<username>' to group 'kvm' ...
Verify installation:
$ virsh list --all Id Name State ---------------------------------- $ 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 : WARN (IOMMU appears to be disabled in kernel. Add intel_iommu=on to kernel cmdline arguments) QEMU: Checking for secure guest support : WARN (Unknown if this platform has Secure Guest support) 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
Restart the machine as logout and the kernel modules restart didn’t work for me.
Install Minikube
Follow instructions from https://minikube.sigs.k8s.io/docs/start/.
Download minikube binary:
$ curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-darwin-amd64 $ sudo install minikube-darwin-amd64 /usr/local/bin/minikube
Make KVM the default driver
$ minikube config set driver kvm2 ❗ These changes will take effect upon a minikube delete and then a minikube start
Start minikube:
$ minikube start 😄 minikube v1.17.1 on Ubuntu 20.04 ✨ Using the kvm2 driver based on existing profile 👍 Starting control plane node minikube in cluster minikube 💾 Downloading Kubernetes v1.20.2 preload ... 🏃 Updating the running kvm2 "minikube" VM ... 🐳 Preparing Kubernetes v1.20.2 on Docker 20.10.2 ... ▪ Generating certificates and keys ... ▪ Booting up control plane ... ▪ Configuring RBAC rules ... 🔎 Verifying Kubernetes components... 🌟 Enabled addons: default-storageclass, storage-provisioner 💡 kubectl not found. If you need it, try: 'minikube kubectl -- get pods -A' 🏄 Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default
Install kubectl tool:
$ sudo snap install kubectl --classic
Now, we can check which pods are running inside the cluster:
$ kubectl get po -A NAMESPACE NAME READY STATUS RESTARTS AGE kube-system coredns-74ff55c5b-jzj8w 1/1 Running 0 2m40s kube-system etcd-minikube 1/1 Running 0 2m49s kube-system kube-apiserver-minikube 1/1 Running 0 2m49s kube-system kube-controller-manager-minikube 1/1 Running 0 2m49s kube-system kube-proxy-xdlr2 1/1 Running 0 2m40s kube-system kube-scheduler-minikube 1/1 Running 0 2m49s kube-system storage-provisioner 1/1 Running 0 2m55s
Later in the day, I was interviewed by Pius from the Recurse Center. We talked about my motivation for joining the program. Apparently, I’ve been talking too much about meta-stuff, but I’m glad that at the end Pius asked me about more practical things. I briefly explained what Diggy is and what could be the next reasonable goal.
A few hours later, I received an email telling me that I passed the first round and asking me to work on one of the pair programming tasks. I decided to build a simple Space Invaders game. For the rest of the day, I was thinking about architecture.