Easiest Kubernetes Install ever! Certified Kubernetes with just one command line

Marco Lenzo
DevOps

Kubernetes has a fairly complex architecture. For years, developers and operators shied away from trying it out because of its complex installation. Its popularity pushed the community to find ways to simplify this process and tools like kubeadm were created. However, even kubeadm is not straightforward for most. Today I will show you the simplest way I found out to have a certified Kubernetes installation in just one command line: MicroK8s.

Install

As promised the install requires only one command line on systems that supports snaps such as Ubuntu.

sudo snap install microk8s --classic

Done! Use microk8s.kubectl to manage your cluster.

marcol@ubuntu-server:~$ microk8s.kubectl get nodes
NAME            STATUS   ROLES    AGE     VERSION
ubuntu-server   Ready    <none>   1m      v1.17.0

Addons

MicroK8s comes prepackaged with some popular addons like Istio, DNS, and much more. List them with microk8s.status and enable them with microk8s.enable. I advise you to install the dns addon at least.

microk8s.enable dns
marcol@ubuntu-server:~$ microk8s.status
microk8s is running
addons:
cilium: disabled
dashboard: disabled
dns: enabled
fluentd: disabled
gpu: disabled
helm: disabled
ingress: disabled
istio: disabled
jaeger: disabled
juju: disabled
knative: disabled
kubeflow: disabled
linkerd: disabled
metallb: disabled
metrics-server: disabled
prometheus: disabled
rbac: disabled
registry: disabled
storage: disabled

Adding more nodes

You can easily add nodes with MicroK8s in just two steps.

Run microk8s.add-node on the node you wish to act as master. This command will install the control plane and output the command you need to run on the other nodes to join them.

marcol@ubuntu-server:~$ microk8s.add-node
Join node with: microk8s.join 192.168.202.85:25000/GUvBqpyxYFcOANDKRmwxmEpfRtaTQmRm

If the node you are adding is not reachable through the default interface you can use one of the following:
 microk8s.join 192.168.202.85:25000/GUvBqpyxYFcOANDKRmwxmEpfRtaTQmRm
 microk8s.join 10.1.76.0:25000/GUvBqpyxYFcOANDKRmwxmEpfRtaTQmRm
 microk8s.join 172.17.0.1:25000/GUvBqpyxYFcOANDKRmwxmEpfRtaTQmRm

Then, access the other nodes and run the outputted command. You need to have MicroK8s pre-installed on the node.

microk8s.join 192.168.202.85:25000/GUvBqpyxYFcOANDKRmwxmEpfRtaTQmRm

Done. Let’s go back to the master and check if the node is visible.

marcol@ubuntu-server:~$ microk8s.kubectl get nodes
NAME                   STATUS   ROLES    AGE     VERSION
ubuntu-server          Ready    <none>   20m     v1.17.0
ubuntu-server-node01   Ready    <none>   11s     v1.17.0

Testing the installation

Let’s create a Pod with a busybox container. We will then execute a shell on it and test out DNS resolution.

microk8s.kubectl apply -f https://raw.githubusercontent.com/marcolenzo/blogfiles/master/kubernetes/pods/busybox.yaml

Let’s verify that the Pod is running.

marcol@ubuntu-server:~$ microk8s.kubectl get pods
NAME      READY   STATUS    RESTARTS   AGE
busybox   1/1     Running   0          2m5s

Let’s get a shell and try to resolve the kubernetes service through DNS.

microk8s.kubectl exec -ti busybox sh
/ # nslookup kubernetes
Server:         10.152.183.10
Address:        10.152.183.10:53

Name:   kubernetes.default.svc.cluster.local
Address: 10.152.183.1

Perfect!

Conclusion

You have no excuses! You have to try out Kubernetes. It has been democratized up to the level that it takes a single command line to have a certified installation running wherever you want: Linux, Windows and macOS. Start using it and you will never go back to traditional deployments.