Kubernetes as Infrastructure
The last five years have seen Kubernetes grow from a new open source community to a mainstay of conversations about modern enterprise IT. But it’s fair to say those conversations are often centered around Kubernetes as an infrastructure platform.
We talk about networks and load balancing, storage and standards such as CSI, and provisioning and cloud provider integrations. These conversations are critical to building a platform that can run a wide variety of applications successfully at scale, but that alone doesn’t make it the best platform for developers wanting to deploy applications.
Kubernetes as Application Platform
The business value in a platform such as Kubernetes isn’t how it’s operated, however. Running Kubernetes isn’t the end goal; the goal is to serve the needs of the applications we choose to run on top. As more and more responsibilities including testing, packaging and security shift to developers and development teams, it’s becoming increasingly important that Kubernetes becomes a platform for those developers who don’t want to care about infrastructure.
Initially, Kubernetes’ API-first approach to providing a user interface attracted a certain type of systems developer, myself included. But it’s also important to appreciate some of the core primitives, such as ReplicaSet, Service, Ingress, etc., are still fairly low-level compared to other comparable models. This, in turn, leads to the verbosity problem inherent in managing Kubernetes configuration today, wherein configuring an application can involve configuring a deployment, service, cron job and more, potentially across multiple files.
The Power of Community
The good news is that it feels like the wider cloud-native community is starting to understand this, and several efforts are underway to improve the developer experience on Kubernetes.
For example, a relatively new special interest group formed last year under the CNCF. SIG Application Delivery focuses on topics surrounding developing, distributing, deploying, managing and operating secure cloud-native applications.
At KubeCon + CloudNativeCon in San Diego last year, Bryan Liles, senior staff engineer at VMware, spoke in his keynote about the need for Kubernetes to have its “Ruby on Rails” moment. This referred to the revolution brought by Ruby on Rails and its mantra of convention over configuration and simplifying the developer experience.
The wider community has also been hard at work building tools to address the problem of making Kubernetes a better application deployment platform.
Knative is one such tool. Knative builds on top of Kubernetes, adding a wide range of components to a typical Kubernetes cluster, which ultimately provides a more focused API with higher-level abstractions for common application use cases. This is nicely demonstrated with the new Knative CLI tool kn, which can launch a new application just by assigning a name and specifying a container image.
Kapp is a more recent entry, part of a wider set of tools called k14s that provides a modular toolkit addressing a number of Kubernetes use cases. Kapp is a client tool that provides simple high-level commands for deploying, listing and deleting applications. Those applications still consist of lower-level Kubernetes resources, but you can now treat them collectively as an application with a minimum of fuss. The slightly higher-level abstraction and the fact that Kapp doesn’t require any new software to be installed on the cluster make it an interesting tool to keep an eye on.
The Year Ahead
There are many more tools emerging in this space than just those mentioned above, including Rio from Rancher and the Open Application Model standard from collaborators including Microsoft. Tools such as ytt and CUE also show promise in providing powerful but data-centric languages for authoring Kubernetes configuration without the current verbosity.
I spoke about Kubernetes and the potential for higher-level tools back at the very first KubeCon EU in 2016, and expected things to move faster on this front than they have, but I’m encouraged by this recent progress focused on making Kubernetes a stronger and more compelling platform for developers. I believe 2020 will see Kubernetes entering a new phase, one focused on being the best platform for applications and for developers. That should see Kubernetes continue to serve more and more applications, but also bring more developers with fresh ideas to the Kubernetes community.