Personal Kubernetes cluster – Choosing the provisioning tool
Welcome to the second part of the series about creating your personal Kubernetes cluser. In the first part we had a look at hosting providers and what they can offer. This time we’ll check what tools we can use for provisioning Kubernetes on our servers.
kubeadm is the simplest tool I tried. It’s just one binary with few requirements needed to be installed beforehand. On Ubuntu it’s as simple as apt install.
Usage is also very simple. All you need to do is to type kubeadm init or kubeadm join. I tried it on Ubuntu and worked as it should. After setting up everything you’ll end up with vanilla cluster of kubernetes.
There is quite a lot to do after to make everything work and be useful. Just like with minimal image of Ubuntu, all you get is a base system and rest is up to you to configure for your needs. So if you know Kubernetes and configuration of the tooling well kubeadm will be great for you. As I’m still learning it’s not the way I set up my personal Kubernetes.
Simple and minimal
No heavy addons
Manual server provisioning
Nothing out of the box
Next tool I played with was kubespray. It’s a collection of ansible scripts for provisioning Kubernetes on your machines. making it work is easy. You just need to install ansible and clone repository.
As it’s an ansible script, all you need to know is a bit of about how ansible works. Mainly because I encountered few minor issues I had to solve and I believe some of them are related to the version of ansible I’m running. Because of that setting the Kubernetes cluster up took me a bit of time and learning.
As ansible is using so called inventory files you need to prepare your servers beforehand. You don’t need a lot of knowledge for that either. All I had to do is to configure network and remove swap disks from the system. I tried it on Ubuntu and CoreOS and provisioning of 3 machines took me about 1 hour with all the blows and whistles.
After few minutes the cluster is ready. It’s also basic, as when built kubeadm, but it has few more things so the beginning is a bit easier. After I used the copy/paste driven Kubernetes management everything worked as I wanted in few hours.
Additionally, if you went for some more popular cloud provider solution you can set up the whole cluster without any effort. Kubespray can use cloud providers APIs to set up your machines for you.
I’d say it’s the best tool if you have some time to invest in setting up your environment.
All in one provisioning
Supports multiple host providers
Easy to use
Requires manual server preparation if used with different cloud provider
Last but not least – kube-linode. Bash script created by Andrew Low. It’s the easiest tool to use but it’s limited to Linode only.
In return for the limitation, the script can set up the whole environment from nothing using the Linode API for server provisioning. All you need to do is to choose what datacenter to use and what plan you want for master and what for nodes.
After few minutes cluster is up and running and in opposition to previous solutions it contains few nice things to have.
- Traefik front controller with automatic https setup
- Monitoring with prometheus and Grafana
- Distributed filesystem with Rook
- Everything configured with base domains and basic security
I’d say not bad for typing few lines in the console.
What you need to know is that setup takes a bit of resources. I’m having $10 node as master, no sweat. Following that, the next $20 node is for the infrastructure and it sweat a bit with default setup. Finally the last node I’m using for projects. I may seems like I’m paying $30 for nothing but what I’m getting is safety for my blogs and quite a lot of time saved so far.
All in one package
Lots of features
Needs at least 2 core / 4GB instance to run the additional services
While I spend few weeks looking through the possible solution it was great learning experience. As a result of it I’ve chosen kube-linode over kubespray because of time I saved on deployment of additional tooling. Furthermore, it’s very important to know that setting up Personal Kubernetes is quite expensive as we don’t use huge amount of resources.
Having said that, you can also install cluster with kubespray and then get some inspiration from kube-linode for the services to run.