I have some experiences with Docker and containers, but never played with Kubernetes before. I started to explore Kubernetes recently as I may need a container orchestration solution in the coming projects. Kubernetes is supported by Azure AKS. Even Docker has announced their support of it. Looks like it is going to be the major container orchestration solution in the market for the coming years.
I started with deploying a local Kubernetes cluster with Minikube on a Ubuntu 17.10 server on Azure. Kubernetes has a document on its site which is about installing the Minikube. But it is very brief. So in this post, I will try to document the step by step procedure both for the future reference of myself and for others who are new to Kubernetes.
Install a Hypervisor
To install Minikube, the first step is to install a hypervisor on the server. On Linux, both VirtualBox and KVM are supported hypervisors. I chose to install KVM and followed the guidance here. The following are steps.
- Make sure VT-x or AMD-v virtualization is enabled. In Azure, if the VM is based on vCPUs, the virtualization is enabled. To double check, run command
egrep -c '(vmx|svm)' /proc/cpuinfo, if the output is 1, the virtualization is enabled.
- Install the KVM packages with the following command:
<br /> sudo apt-get install qemu-kvm libvirt-bin ubuntu-vm-builder bridge-utils<br />
- Use the following command to add the current user to the
libvertgroup, and then logout and login to make it work. Note, in the guidance the group name is
libvirtd, but on Ubuntu 17.10, the name has changed to
<br /> sudo adduser `id -un` libvirt<br />
- Test if your install has been successful with the following command:
<br /> virsh list --all<br />
- Install virt-manager so that we have a UI to manage VMs
<br /> sudo apt-get install virt-manager<br />
Follow the instruction here to install kubectl. The following are the commands:
<br /> curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl<br /> chmod +x ./kubectl<br /> sudo mv ./kubectl /usr/local/bin/kubectl<br />
Follow the instruction on the release notes of Minikube to install it. I used the following command:
<br /> curl -Lo minikube https://storage.googleapis.com/minikube/releases/v0.25.0/minikube-linux-amd64 && chmod +x minikube && sudo mv minikube /usr/local/bin/<br />
When you finish this step, according to the official document, the installation of Minikube has been completed. But before you can use it, there are several other components which needs to be installed as well.
Install Docker, Docker-Machine, and KVM driver
Minikube can run on natively on the Ubuntu server without a virtual machine. To do so, Docker needs to be installed on the server. Docker-CE has a different way to be installed and Docker has a document for it.
Docker Machine can be installed with the following commands:
<br /> curl -L https://github.com/docker/machine/releases/download/v0.13.0/docker-machine-`uname -s`-`uname -m` >/tmp/docker-machine && \<br /> sudo install /tmp/docker-machine /usr/local/bin/docker-machine<br />
Finally, we need to install a VM driver for the docker machine. Kubernetes team ships a KVM2 driver which is supposed to replace the KVM driver created by others. However, I failed to make the Minikube work with the KVM2 driver. There is a bug report for this issue and hope the Kubernetes team will fix it soon.
So I installed the KVM driver with the following command:
<br /> curl -LO https://github.com/dhiltgen/docker-machine-kvm/releases/download/v0.10.0/docker-machine-driver-kvm-ubuntu16.04<br /> sudo cp docker-machine-driver-kvm-ubuntu16.04 /usr/local/bin/docker-machine-driver-kvm<br /> sudo chmod +x /usr/local/bin/docker-machine-driver-kvm<br />
Test if Minikube Works
With the completion of all the above steps, we can test the Minikube now.
<br /> minikube start --vm-driver kvm<br />
It will create a vm named as
minikube in KVM and configure a local Kubernetes cluster based on it. With kubectl, you should be able to see the cluster info and node info.
<br /> kubectl cluster-info<br /> kubectl get nodes<br />
With that, you can start to explore Kubernetes.