Kubernetes 1.13 Strengthens Cloud-Native Infrastructure
Published:
Kubernetes 1.13 released on December 3, 2018, marking kubeadm — the official Kubernetes cluster bootstrapping tool — as generally available (GA) after nearly two years in alpha/beta. kubeadm init (initialize a control plane node) and kubeadm join (join a worker node to an existing cluster) provided a consistent, supported procedure for bringing up a production-grade Kubernetes cluster from bare OS without hiding the cluster behind a managed service abstraction. Prior to kubeadm GA, bootstrapping a cluster involved either running a vendor-managed installer (kops, Rancher, OpenShift) that made different decisions about network configuration and storage, or manually reading multi-page documentation to run etcd and the kube-apiserver, kube-scheduler, and kube-controller-manager as system services. kubeadm’s GA status meant distributions and tooling could declare a standard bootstrapping interface, enabling reproducible cluster setup across on-premises hardware, VMs, and bare metal.
The Container Storage Interface (CSI) reached stable (GA) status in Kubernetes 1.13, completing a standardization effort that began with Kubernetes 1.9 (December 2017) in alpha. CSI defined a gRPC-based API between Kubernetes and storage systems, allowing storage vendors (NetApp, Pure Storage, Dell EMC, Ceph, Portworx, and others) to implement Kubernetes storage drivers as out-of-tree plugins deployed as standard Kubernetes workloads (DaemonSets and Deployments) rather than requiring patches to the Kubernetes core tree. The pre-CSI in-tree storage drivers (AWS EBS, GCE PD, Azure Disk, Ceph RBD, NFS) were shipped inside the kubernetes binary itself, meaning a storage bug fix required a Kubernetes version update. CSI’s separation meant storage drivers could be versioned and updated independently. CoreDNS also replaced kube-dns as the default cluster DNS in 1.13 — CoreDNS (a CNCF graduated project, written in Go, configured via Corefile rather than config map fragments) offered better performance under load and simpler extensibility than kube-dns’s multi-container sidecar design.
By December 2018, Kubernetes had achieved dominant position among container orchestration systems. The CNCF’s 2018 survey found 58% of respondents using Kubernetes in production (Docker Swarm was second at ~29%, Mesos/Marathon at ~15%). Google Kubernetes Engine (GKE), Amazon Elastic Kubernetes Service (EKS, general availability June 2018), and Azure Kubernetes Service (AKS, GA June 2018) had all reached production-ready managed offerings within 2018, establishing the pattern of cloud providers running the control plane as a managed service so customers only operated worker nodes. Kubernetes 1.0 had launched July 21, 2015 after being open-sourced from Google’s internal Borg/Omega cluster management systems; the 1.13 release was its 13th quarterly release, with the cadence settling at approximately one minor version every three months. Helm (the Kubernetes package manager, similar in concept to APT or yum but for Kubernetes workloads) was widely used for deploying third-party applications onto clusters, with Helm 2 using a server-side component (Tiller running inside the cluster with cluster-admin privileges) that created security concerns addressed in Helm 3 (November 2019).
