Batteries included Kubernetes -for everyone

ReSearchIT Eng
3 min readMay 11, 2019

--

While there are few projects to help you deploy a kubernetes clusters, none of them could bring from zero (OS+python) to a the k8s dashboard gui, with minimal work, agnostic to cloud, support physical/vagrant/vms and do it with minimal code complexity.

Our project’s target: deploy a k8s + monitoring + ingress, on prem (or cloud), with minimal effort and knowledge. And do this is the most elegant way.

This project removes your concerns on the steps before, during and after kubeadm run. All wrapped in an ansible playbook, with kubeadm standard config files + helm charts.

Project Link: https://github.com/ReSearchITEng/kubeadm-playbook

The difference from other seemingly similar projects, is our vision: combine pure kubeadm with the right helm charts, to create the basis for your platform. And all this while keeping our project simple, still powerful. (We don’t want to work hard, just manage the integration properly :) ).

E.g. configuration files are actually kubeadm standard structures, no innovation (where possible); it was designed from beginning for kubeadm and helm, so all goes natural, clean and simple :)

What’s inside? Pretty much all the solutions presented on kubeadm documentation page as well as solutions from issues we faced and discussed on kubeadm’s github issues. E.g. proper cleanup of cni interfaces, iptables, turn off swap, ipvs cleanup, vsphere tips, wrap the best practices and good to have settings in one easy to use setup.

Its target is to deploy a kubernetes with any combination of these features:

  • either one machine k8s cluster (like a minikube, but on steroids)
    or
  • multi master (master-HA) production kubernetes cluster (to hundreds of nodes)
  • segregate compute, master, infra nodes. E.g. Infra nodes are for monitoring, ingress and similar deployments.
  • use official kubeadm (with minimal setup around it)
  • has the usual “addons” included for you, so you could start using it right away:
    — nginx-controller (ingress controller)
    — heapster
    — prometheus operator (monitoring)
    — grafana
    — dashboard
    — kured (reboot maintenance)
    ( if you want more, just add to the list of autodeploy) (e.g. jenkins, k8s auth using keycloak, Elastic Search, Kibana, etc)
  • addons installed from their helm charts (as opposite to deploy “some” yamls) -> with full control from an: addons.yaml
  • support for proxy (especially for corporate envs
  • allows adding additional worker or master nodes in a working cluster
  • example setup for vpshere persistent volumes (vsphere fully tested
  • all these tested since v1.7 till lastest v1.15 (as of this writing)

Minimal requirements:

  • one control machine with ansible (which could be the same like the machine below)
  • one machine (vm/vagrant/physical/etc) on CentOS/Ubuntu/etc with python-minimal.
  • password less ssh-key login setup for ansible to work

Ideally, for a perfect experience you may want also:

  • a wildcard dns (just deploy a dnsmasq docker container), so you can use the elegant ingress controller

Project design:
Vision is to to keep code to minimal required, while still making sure you can deploy a work cluster.
It’s very similar to the vision of openshift’s 4: put a base (in our case using kubeadm), and have everything else as plugins (in our case helm charts).
Full flexibility: add nodes (either master or workers) at any time, install/configure more helm charts as required.

Next items in our TODO list:
- certificate rotation (it will be done once the documentation will be fixed, and we’ll wrap it accordingly) -> tracked in https://github.com/kubernetes/kubeadm/issues/1361 ; As a note: every upgrade of k8s cluster will anyway rotate certs. (So if you upgrade at least once a year, this should not be required)
- Test if Multimaster works not only with VIP, but also with Load Ballancer

When using the project you may want to get the releases of k8s of choice: v1.8 till latest v1.15.
Now it’s updated to 1.14 and uses kubeadm’s new features for multimaster (master HA) setup: https://github.com/ReSearchITEng/kubeadm-playbook

Keep in touch on kubernetes’s slack channels.

For issues, improvements, PRs and stars :)-> find us on github: nk: https://github.com/ReSearchITEng/kubeadm-playbook

PS: Thanks to all those that did PRs and helped along the years: Seth Jennings (of RH) original initiator of this project, Carlos Eduardo , Aaron Johnson (acjohnson), VijayaKumar, Martin Dietze (mbert) and others !

--

--