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:
[code lang=bash]
sudo apt-get install qemu-kvm libvirt-bin ubuntu-vm-builder bridge-utils
[/code]
- Use the following command to add the current user to the
libvert
group, and then logout and login to make it work. Note, in the guidance the group name islibvirtd
, but on Ubuntu 17.10, the name has changed tolibvert
.
[code lang=bash]
sudo adduser `id -un` libvirt
[/code]
- Test if your install has been successful with the following command:
[code lang=bash]
virsh list –all
[/code]
- Install virt-manager so that we have a UI to manage VMs
[code lang=bash]
sudo apt-get install virt-manager
[/code]
Install kubectl
Follow the instruction here to install kubectl. The following are the commands:
[code lang=bash]
curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl
chmod +x ./kubectl
sudo mv ./kubectl /usr/local/bin/kubectl
[/code]
Install Minikube
Follow the instruction on the release notes of Minikube to install it. I used the following command:
[code lang=bash]
curl -Lo minikube https://storage.googleapis.com/minikube/releases/v0.25.0/minikube-linux-amd64 && chmod +x minikube && sudo mv minikube /usr/local/bin/
[/code]
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:
[code lang=bash]
curl -L https://github.com/docker/machine/releases/download/v0.13.0/docker-machine-`uname -s`-`uname -m` >/tmp/docker-machine && \
sudo install /tmp/docker-machine /usr/local/bin/docker-machine
[/code]
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:
[code lang=bash]
curl -LO https://github.com/dhiltgen/docker-machine-kvm/releases/download/v0.10.0/docker-machine-driver-kvm-ubuntu16.04
sudo cp docker-machine-driver-kvm-ubuntu16.04 /usr/local/bin/docker-machine-driver-kvm
sudo chmod +x /usr/local/bin/docker-machine-driver-kvm
[/code]
Test if Minikube Works
With the completion of all the above steps, we can test the Minikube now.
[code lang=bash]
minikube start –vm-driver kvm
[/code]
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.
[code lang=bash]
kubectl cluster-info
kubectl get nodes
[/code]
With that, you can start to explore Kubernetes.