Making Kubernetes Approachable: We Need Strong Distributions

Linux, in its raw form, is a complicated enough system as to not feel approachable by normal users. A nice distribution of it is easy enough to install and use, sure; but installing Gentoo Linux, for example, is much more difficult. The value of mainstream distributions of Linux such as Ubuntu or CentOS is that they made the installation, use, and upgrade path on a linux system approachable.

They do this in three ways:

1. They make installation of an entire system simple.
2. They make a lot of opinionated design decisions in an effort to make things simple. For example, most Linux distros choose what the init process should be for you (systemd, init, upstart).
3. They provide a clean upgrade path for all parts of the system, from the apps installed on the system down to the barebones part of the system (think linux kernel) through the use of a system package manager.

Now let's take those ideas to the wildly-popular-but-still-emerging technology, Kubernetes. Right now, how approachable is a kubernetes install?

Well, the first point is addressed well enough I think. Quasi-"distributions" such as kubeadm, kubespray and kubeform allow you to install the system simply.

They start to fall short when we get to point #2, though. Kubernetes does not prescribe how to set up DNS inside the cluster, and doesn't prescribe what kind of Ingress should be used. However, in my opinion at least, Kubernetes is most often unusable without these components. Other components that you'll almost always want include network overlay (many use flannel, ipsec, or calico for this). Most Kubernetes distributions supply these needs, but even the bigger ones like Rancher don't supply what should be used as an Ingress. Kubeform, or at least its Roadmap, is getting closer to this.

However, I feel like they all fall short in category #3, making an upgrade smooth by using an explicit system for dependency management. I have just tried upgrading kubernetes in Rancher, it is an absolute breeze compared to others I've seen on the internet; however, you still have to follow its docs to upgrade certain components before other components manually. Other distributions of Kubernetes likewise provide set-by-step docs. If Kubernetes is to really become approachable, this is not enough. I can follow docs to install Gentoo as well, but this is not nearly as approachable as the simple commands ``sudo apt-get update; sudo apt-get dist-upgrade``. There is no explicit dependency management for the entire Kubernetes system. There certainly is no system akin to aptitude or rpm that tracks dependencies for parts of the kubernetes system itself and the apps that run on it alike. The ansible roles and scripts provided by kubespray and kubeforms do not satisfy here. Kubernetes would take a great leap forward if such a system were ever developed.

And before you say "Helm!", helm is simply not built for this.