2016 — the census¶
90 posts, 2016-01-11 to 2016-12-23. The largest of the twelve years and 12% of the whole corpus, within eight posts of 2015 and 2024 combined. Kubernetes 1.1 through 1.5 — four releases inside twelve months. Most of this year's nouns still exist and mean something different, which is the third staleness case and the reason 2016 was censused after the two ends: Deployments arrive, PetSet is introduced and renamed to StatefulSet nine months later, RBAC goes alpha, CRI is proposed, and Minikube, Helm and kubeadm all launch — see the method.
Yield: 15 walk, at the ceiling of the 8–15 band and inside it.
34 read, 3 dated, 38 skip.
The ceiling was reached but did not bind. Seventeen posts had a case for an exercise; both that
lost it lost on a rule rather than on space. High performance network policies is hands-on,
measurable, and its numbers would move — and it is a vendor post, which the
genre rule keeps out
of the exercise set on principle. Tail Kubernetes with Stern is a clean, small diff that lost
to fourteen larger ones. Both are read, with the reason written into the row.
The three dated rows are all storage, all in a seven-week stretch, and each fails on a
different kind of unobtainable. A Thousand Instances of Cassandra is scale the post itself
calls its largest ever. Stateful Applications Using Kubernetes and Datera needs a storage
appliance — and FlexVolume, the mechanism it uses, is still compiled into the kubelet at the
pin, which makes it the cleanest illustration in the corpus of dated being about the hardware
and not the API. Create a Couchbase cluster is the softest of the three: one node would fit
under the ceiling and a cluster would not.
The 38 rejects are seven weekly meeting notes, four SIG introductions, three release-series
index posts, two monthly news digests, two conference announcements, a two-part build log for
one CI job, a survey, a birthday post, a partner-program announcement, a Dashboard
release-notes post, a hosted-agent tutorial, and thirteen vendor or ecosystem posts that record
no decision. That is 42% of the year — below 2015's 48% and more than twice 2024's 19% — and
the growth in absolute terms is almost entirely vendor volume rather than noise: 19 posts carry
an ecosystem tag against 4 in 2015.
etcd is the only tag with no rows. 2016 predates the etcd2-to-etcd3 migration the blog would
later cover, and the storage layer is not discussed this year.
Census¶
Verdicts and topics are defined in ../README.md. Every post has a
row, and a row's title always links the post — never the exercise file, so the row never
changes once written. The Exercises table below is the progress record.
| post | date | k8s | verdict | topic | why |
|---|---|---|---|---|---|
| Simple leader election with Kubernetes and Docker | 01-11 | 1.1 | walk |
api |
The post's election runs in a sidecar image and parks the winner in an annotation on an Endpoints object. Leader election is now an API object — Lease in coordination.k8s.io/v1 — and the control plane holds its own in kube-system, where you can watch it change hands. |
| Why Kubernetes doesn’t use libnetwork | 01-14 | 1.1 | read |
net |
The case for CNI over Docker's CNM, written while the outcome was still open. Both halves of the premise are gone: CNI won, and Docker itself left the node when dockershim was removed. |
| Kubernetes Community Meeting Notes - 20160114 | 01-28 | — | skip |
meta |
Raw meeting notes. Records a bare-metal provisioning demo, as minutes. |
| Kubernetes Community Meeting Notes - 20160121 | 01-28 | — | skip |
meta |
Raw meeting notes. Carries the corpus's first mention of PetSet — the name that became StatefulSet eleven months later — as an agenda item. |
| State of the Container World, January 2016 | 02-01 | — | skip |
meta |
Monthly news digest and survey plug. |
| Kubernetes Community Meeting Notes - 20160128 | 02-02 | — | skip |
meta |
Raw meeting notes. |
| Kubernetes Community Meeting Notes - 20160204 | 02-09 | — | skip |
meta |
Raw meeting notes. Records an rkt demo, as minutes. |
| ShareThis: Kubernetes In Production | 02-11 | — | skip |
ecosystem |
A migration narrative with a four-point summary of outcomes. It names no alternative it rejected, so the vendor rule holds it here. |
| Kubernetes Community Meeting Notes - 20160211 | 02-16 | — | skip |
meta |
Raw meeting notes. |
| Kubernetes Community Meeting Notes - 20160218 | 02-23 | — | skip |
meta |
Raw meeting notes. |
| KubeCon EU 2016: Kubernetes Community in London | 02-24 | — | skip |
meta |
Conference announcement. |
| Kubernetes Community Meeting Notes - 20160225 | 03-01 | — | skip |
meta |
Raw meeting notes. |
| State of the Container World, February 2016 | 03-01 | — | skip |
meta |
Monthly news digest. |
| ElasticBox introduces ElasticKube to help manage Kubernetes within the enterprise | 03-11 | — | skip |
ecosystem |
Product announcement for a self-service management layer over Kubernetes. No decision recorded, no alternatives weighed. |
| Kubernetes in the Enterprise with Fujitsu’s Cloud Load Control | 03-11 | — | skip |
ecosystem |
Product announcement for a hosted control layer. No decision recorded. |
| Kubernetes 1.2: Even more performance upgrades, plus easier application deployment and management | 03-17 | 1.2 | read |
meta |
The 1.2 announcement: ConfigMap, Deployments, DaemonSet, Ingress, and a 1000-node ceiling. Read it as the index it is — the five deep-dive posts that follow it carry the exercises. |
| Scaling neural network image classification using Kubernetes with TensorFlow Serving | 03-23 | 1.2 | read |
ecosystem |
The first machine-learning-on-Kubernetes post. What it teaches is how to run a model server, which is a Deployment; the Kubernetes content is thin and the images and gcloud steps are of their moment. |
| 1000 nodes and beyond: updates to Kubernetes performance and scalability in 1.2 | 03-28 | 1.2 | read |
api |
A scalability report: 1000 nodes, and 99th-percentile API latency in tens of milliseconds for everything except LIST. The number moved to 5000, but the more interesting change is that the fix for LIST became API machinery — the watch cache, protobuf, and priority-and-fairness queues. |
| Five Days of Kubernetes 1.2 | 03-28 | 1.2 | skip |
meta |
Index post for the 1.2 deep-dive series. |
| How container metadata changes your point of view | 03-28 | — | read |
obs |
Not a product tour but an argument: monitoring keys off labels, not hostnames. That argument won so completely that it is now how relabelling works in every Kubernetes metrics pipeline. |
| AppFormix: Helping Enterprises Operationalize Kubernetes | 03-29 | — | skip |
ecosystem |
Product announcement for an operations dashboard. No decision recorded. |
| Building highly available applications using Kubernetes new multi-zone clusters (a.k.a. 'Ubernetes Lite') | 03-29 | 1.2 | walk |
sched |
The feature is multi-zone clusters; the name is "Ubernetes Lite", which survives nowhere. Spreading was implicit and best-effort behind failure-domain.beta.kubernetes.io/zone — a label still served at the pin, deprecated since v1.17 and never removed — and is now an explicit field, topologySpreadConstraints, under a renamed key. |
| Using Spark and Zeppelin to process big data on Kubernetes 1.2 | 03-30 | 1.2 | read |
ecosystem |
A Spark-and-Zeppelin walkthrough built on ReplicationControllers and an examples tree that has moved. Spark now has a native Kubernetes scheduler backend, so the whole approach was superseded rather than updated. |
| Kubernetes 1.2 and simplifying advanced networking with Ingress | 03-31 | 1.2 | walk |
net |
Ingress at beta, in extensions/v1beta1, with spec.backend and a bare serviceName. That group-version is not served, the backend is restructured, every path needs a pathType, and the class moved from an annotation to a field and then to its own object. Then Ingress was frozen and Gateway API became the place new work goes. |
| Using Deployment objects with Kubernetes 1.2 | 04-01 | 1.2 | walk |
api |
Deployments at beta, and the post's own comparison is against kubectl rolling-update — a command that no longer exists. Two traps: extensions/v1beta1 is not served, and spec.selector flipped from helpfully-defaulted to required-and-immutable, so the post's manifest is one that used to validate and mean something. |
| Configuration management with Containers | 04-04 | 1.2 | walk |
api |
The rare 2016 post whose manifests still apply unchanged — ConfigMap has been v1 since it arrived. The payload is the half the post does not mention and which is still true: a value injected as an environment variable never updates, while the same value mounted as a volume does, on the kubelet's own schedule. |
| Adding Support for Kubernetes in Rancher | 04-08 | — | skip |
ecosystem |
Vendor integration announcement. No decision recorded. |
| Container survey results - March 2016 | 04-08 | — | skip |
meta |
Survey results. |
| How to deploy secure, auditable, and reproducible Kubernetes clusters on AWS | 04-15 | — | skip |
ecosystem |
Tool announcement for a CloudFormation-based AWS installer. It gestures at "a more manual way" but weighs no alternative, and the provisioning lineage it belongs to is carried far better by the kubeadm post in September. |
| SIG-Networking: Kubernetes Network Policy APIs Coming in 1.3 | 04-18 | 1.2 | walk |
net |
Network policy before it had an API of its own: extensions/v1beta1, and isolation switched on by annotating the namespace with net.beta.kubernetes.io/network-policy. The annotation is gone entirely and the group-version with it; turning isolation on is now a default-deny policy object, which is a different thing to reason about. |
| SIG-ClusterOps: Promote operability and interoperability of Kubernetes clusters | 04-19 | — | skip |
meta |
SIG introduction. The SIG itself was later wound down. |
| SIG-UI: the place for building awesome user interfaces for Kubernetes | 04-20 | — | skip |
meta |
SIG introduction. |
| Introducing the Kubernetes OpenStack Special Interest Group | 04-22 | — | skip |
meta |
SIG introduction. |
| CoreOS Fest 2016: CoreOS and Kubernetes Community meet in Berlin (& San Francisco) | 05-03 | — | skip |
meta |
Conference announcement. |
| Hypernetes: Bringing Security and Multi-tenancy to Kubernetes | 05-24 | 1.2 | read |
security |
The argument for a hypervisor boundary per pod, made by a project that lost. The argument itself won: it is Kata Containers now, selected by runtimeClassName, which turned a custom distribution into a field. Nested virtualisation puts the exercise past a laptop. |
| Bringing End-to-End Kubernetes Testing to Azure (Part 1) | 06-06 | — | skip |
tooling |
A build log for one nightly end-to-end job. The job and the infrastructure under it are both replaced. |
| The Illustrated Children's Guide to Kubernetes | 06-09 | 1.2 | read |
history |
The children's guide, and still accurate on every concept it draws, which is why it is the most durable post in the year. |
| Container Design Patterns | 06-21 | 1.2 | read |
api |
Brendan Burns on sidecar, ambassador and adapter, with the sharper framing that probes and lifecycle hooks are an API the platform calls on your container. 2015's toolkit-patterns exercise already carries the diff that matters — the sidecar became an initContainers entry with restartPolicy: Always. |
| Kubernetes 1.3: Bridging Cloud Native and Enterprise Workloads | 07-06 | 1.3 | read |
meta |
The 1.3 announcement. An index; the deep dives carry the exercises. |
| Updates to Performance and Scalability in Kubernetes 1.3 -- 2,000 node 60,000 pod clusters | 07-07 | 1.3 | read |
api |
A scalability report at 2000 nodes, plus Kubemark. Note the filename: this post lives at a URL about Windows Server containers and is not about Windows Server containers. |
| Five Days of Kubernetes 1.3 | 07-11 | 1.3 | skip |
meta |
Index post for the 1.3 deep-dive series. |
| Minikube: easily run Kubernetes locally | 07-11 | 1.3 | read |
tooling |
The launch of the only 2016 tool in this year still shipping under its own name. What changed is underneath it — the localkube binary it was built on is gone and it bootstraps with kubeadm — and the lab provisions its clusters a different way, so there is no diff here to run. |
| rktnetes brings rkt container engine to Kubernetes | 07-11 | 1.3 | read |
nodes |
rkt as a second runtime, wired in as a kubelet flag. The project ended, the flag was removed, and the code went with it — but the exercise of supporting two runtimes at once is exactly why CRI was designed, which makes this the argument the December CRI post answers. |
| Autoscaling in Kubernetes | 07-12 | 1.3 | walk |
sched |
Horizontal and cluster autoscaling, with Heapster as the metrics source. Heapster does not exist; kubectl top and the HPA read metrics.k8s.io from metrics-server, the flag that used to switch that off is gone from the controller manager, and HPA manifests from this era are rejected rather than warned about. |
| Kubernetes in Rancher: the further evolution | 07-12 | — | skip |
ecosystem |
Vendor progress update. No decision recorded. |
| Stateful Applications in Containers!? Kubernetes 1.3 Says “Yes!” | 07-13 | 1.3 | skip |
ecosystem |
A vendor opinion piece on stateful workloads. Poses the question PetSet was already answering that quarter, and answers it with a product. |
| Thousand Instances of Cassandra using Kubernetes Pet Set | 07-13 | 1.3 | dated |
storage |
A thousand Cassandra instances, run to prove Pet Set could take it, and the post says plainly that it was the largest deployment they had ever made. The scale is the whole point of the post and it is far past the lab ceiling; the API it exercises is read in the December StatefulSet row instead. |
| Citrix + Kubernetes = A Home Run | 07-14 | — | skip |
ecosystem |
Vendor integration announcement. No decision recorded. |
| Cross Cluster Services - Achieving Higher Availability for your Kubernetes Applications | 07-14 | 1.3 | read |
net |
Federated services: one name, backed by pods in several clusters, resolved by DNS. Federation v1 was withdrawn and its successor archived, so this is the clearest statement in the corpus of a promise Kubernetes made and then took back. |
| Steering an Automation Platform at Wercker with Kubernetes | 07-15 | — | skip |
ecosystem |
Platform narrative. No decision recorded and no mechanism named. |
| Dashboard - Full Featured Web Interface for Kubernetes | 07-15 | 1.3 | read |
tooling |
The Dashboard's first full release. The Dashboard still ships, but everything about reaching it changed: this post predates RBAC, so it describes an interface with no account behind it. |
| Bringing End-to-End Kubernetes Testing to Azure (Part 2) | 07-18 | — | skip |
tooling |
Part two of the same build log. |
| A Very Happy Birthday Kubernetes | 07-21 | — | skip |
meta |
Birthday post. |
| Happy Birthday Kubernetes. Oh, the places you’ll go! | 07-21 | 1.3 | read |
history |
A maintainer's year-one letter, naming what shipped and what was still called PetSet and Ubernetes. Worth reading as a dated inventory written by someone who owned part of it. |
| The Bet on Kubernetes, a Red Hat Perspective | 07-21 | 1.3 | read |
history |
Red Hat's account of why it bet a product line on Kubernetes rather than building its own orchestrator, written by someone who owned code on both sides of that decision. |
| Why OpenStack's embrace of Kubernetes is great for both communities | 07-26 | — | skip |
ecosystem |
Vendor commentary on an ecosystem announcement. |
| Challenges of a Remotely Managed, On-Premises, Bare-Metal Kubernetes Cluster | 08-02 | 1.3 | read |
ecosystem |
An honest engineering write-up of one hard problem: a control plane in a SaaS, the cluster on someone else's hardware, and the reconciliation between them. That problem is now Cluster API's, and this post is the shape of it before anyone had a name for it. |
| Create a Couchbase cluster using Kubernetes | 08-15 | 1.3 | dated |
storage |
A walkthrough for a multi-node Couchbase Server cluster — a managed-cache database that wants gigabytes of RAM per node. One node would fit under the ceiling and a cluster would not, which makes this the softest dated call in the year. |
| Kubernetes Namespaces: use cases and insights | 08-16 | 1.3 | read |
api |
Namespaces, with quota and limit ranges hung off them. 2015's namespaces-as-environments exercise carries the walk. The line worth taking from here is the one the post makes carefully — a namespace is not a security boundary — which is still true and now has an enforcement mechanism, since Pod Security Admission is configured by labelling the namespace. |
| SIG Apps: build apps for and operate them in Kubernetes | 08-16 | — | skip |
meta |
SIG introduction. |
| Scaling Stateful Applications using Kubernetes Pet Sets and FlexVolumes with Datera Elastic Data Fabric | 08-29 | 1.3 | dated |
storage |
Pet Sets on a Datera elastic data fabric via FlexVolume. FlexVolume itself is still compiled into the kubelet at the pin — what is unobtainable is the hardware behind it, and there is no software substitute for a storage appliance. |
| Security Best Practices for Kubernetes Deployment | 08-31 | 1.3 | walk |
security |
The post carries its own editor's note saying the advice is no longer current, which is a rare and useful admission. Run its checklist against a modern cluster: the item at the centre of it, PodSecurityPolicy, is not merely deprecated but a hard error, and half the rest became defaults. |
| Cloud Native Application Interfaces | 09-01 | 1.3 | read |
history |
A standards essay on what a portable application interface would have to specify. Read it against what actually happened, which is that the interface became the API server and the packaging argument went to Helm and then to OCI. |
| Deploying to Multiple Kubernetes Clusters with kit | 09-06 | — | skip |
ecosystem |
An in-house multi-cluster deploy tool. Mentions an orchestrator evaluation but does not record it. |
| Creating a PostgreSQL Cluster using Helm | 09-09 | 1.4 | read |
tooling |
A PostgreSQL walkthrough that is also a vendor chart tour. The Helm mechanics it teaches are the ones the October Helm post carries, and the vendor rule keeps the exercise off a chart someone else maintains. |
| High performance network policies in Kubernetes clusters | 09-21 | 1.3 | read |
net |
Measures what a network policy costs: iptables rule counts and the latency they add. Genuinely hands-on and the numbers would move — kube-proxy has an nftables backend now and eBPF datapaths bypass the question — but it is a vendor post, and vendor posts do not carry exercises. |
| Kubernetes 1.4: Making it easy to run on Kubernetes anywhere | 09-26 | 1.4 | read |
meta |
The 1.4 announcement: kubeadm, scheduled jobs, Helm. An index; the deep dives carry the exercises. |
| How Qbox Saved 50% per Month on AWS Bills Using Kubernetes and Supergiant | 09-27 | 1.3 | read |
ecosystem |
A cost post that does record its decision and the alternative: bin-packing containers onto fewer instances instead of the per-customer VM model its competitors used. The tool it used is gone; the argument is now the cluster autoscaler's. |
| How we made Kubernetes insanely easy to install | 09-28 | 1.4 | walk |
tooling |
kubeadm at alpha, and the three-stage model it introduced — provision, bootstrap, add-ons — is still exactly how a cluster comes up. The commands are not: joining with a token alone was a trust-on-first-use hole, so --discovery-token-ca-cert-hash is now mandatory and the post's kubeadm join line fails without it. |
| How we improved Kubernetes Dashboard UI in 1.4 for your production needs | 10-03 | 1.4 | skip |
tooling |
Dashboard release notes. The Dashboard row in July covers what is worth covering. |
| Dynamic Provisioning and Storage Classes in Kubernetes | 10-07 | 1.4 | walk |
storage |
Dynamic provisioning at beta, and the post offers two ways to ask for it. They did not age the same way: the alpha annotation has been silently ignored since v1.6, so a manifest using it produces a classless PVC rather than an error, while the beta annotation is still honoured at the pin with a deprecation warning. Neither is the field you would write, and binding is lazy now. |
| Helm Charts: making it simple to package and deploy common applications on Kubernetes | 10-10 | 1.4 | walk |
tooling |
Helm's charts post, and the first command in it installs a cluster-wide component that was removed for being a cluster-wide component. Tiller is gone, helm init with it, and the chart repository the post points at was retired — so this is a packaging story where the client survived and everything it talked to did not. |
| Building Globally Distributed Services using Kubernetes Cluster Federation | 10-14 | 1.4 | read |
api |
The fullest technical treatment of federation in the corpus: federated ReplicaSets, secrets, namespaces and ingress, with a control plane of their own. All of it was withdrawn. Read it beside the July cross-cluster post to see how much was built before the retreat. |
| How We Architected and Run Kubernetes on OpenStack at Scale at Yahoo! JAPAN | 10-24 | 1.4 | read |
ecosystem |
A substantial architecture write-up — Kubernetes on OpenStack, with the security, networking, storage and CI decisions each stated and defended. One of the few case studies in the year that clears the vendor bar. |
| Introducing Kubernetes Service Partners program and a redesigned Partners page | 10-31 | — | skip |
meta |
Partner program announcement. |
| Tail Kubernetes with Stern | 10-31 | 1.4 | read |
tooling |
A tool that existed because kubectl logs could not tail several pods at once. It can now, with a label selector, --all-containers and --prefix, which makes this a small and clean diff — small enough to lose its exercise slot to the fourteen larger ones. |
| Bringing Kubernetes Support to Azure Container Service | 11-07 | — | skip |
ecosystem |
Managed-service announcement. The service was replaced by a differently-named one. |
| Modernizing the Skytap Cloud Micro-Service Architecture with Kubernetes | 11-07 | 1.4 | read |
ecosystem |
A long and unusually candid microservice-migration write-up, including the parts that went badly. Clears the vendor bar on the strength of what it says it got wrong. |
| CNCF Partners With The Linux Foundation To Launch New Kubernetes Certification, Training and Managed Service Provider Program | 11-08 | 1.4 | read |
history |
The announcement of the certification program the CKA and CKS come from, which makes it the origin document for a lot of what this repository is for. |
| Visualize Kubelet Performance with Node Dashboard | 11-17 | 1.4 | walk |
obs |
The post's tool was retired and its repository deprecated, and the post says so at the top. What replaced it is the kubelet's own Prometheus surface, which is not one endpoint but four — the kubelet's own metrics, cAdvisor's, resource metrics and probes — and telling which one answers which question is the whole exercise. |
| Kubernetes Containers Logging and Monitoring with Sematext | 11-18 | 1.4 | skip |
obs |
A logging and monitoring tutorial for a hosted agent. The mechanism it uses is still the right one, but the post is a product tour, and 2015's cluster-logging exercise carries the mechanism. |
| Kompose: a tool to go from Docker-compose to Kubernetes | 11-22 | 1.4 | read |
tooling |
Compose files translated into Kubernetes objects. kompose up was removed on the argument that a translator should not also be a control loop, and what convert emits today is a different set of apiVersions — a real but narrow diff. |
| From Network Policies to Security Policies | 12-08 | 1.5 | read |
net |
The argument that addresses are the wrong identity for a policy and that labels and L7 are the right one. Read it against the outcome: the argument won, and it is the premise of every service mesh and of Gateway API's route matching. |
| Kubernetes 1.5: Supporting Production Workloads | 12-13 | 1.5 | read |
meta |
The 1.5 announcement: StatefulSet at beta, PodDisruptionBudget at beta. An index; the deep dives carry the exercises. |
| Introducing Container Runtime Interface (CRI) in Kubernetes | 12-19 | 1.5 | walk |
nodes |
CRI introduced as one option among several, selected by a kubelet flag. It is now the only option, which is why the flag was removed rather than defaulted — a kubelet given it fails to start. The visible consequence on a node is that inspecting containers is crictl, and docker ps is not a fallback. |
| Five Days of Kubernetes 1.5 | 12-19 | 1.5 | skip |
meta |
Index post for the 1.5 deep-dive series. |
| StatefulSet: Run and Scale Stateful Applications Easily in Kubernetes | 12-20 | 1.5 | walk |
api |
The rename. PetSet's group-version was deleted outright rather than converted, so the 1.5 notes tell you to migrate existing objects by hand — the only place in the corpus where an upgrade path was simply declined. The post's own apps/v1beta1 is not served either, while volumeClaimTemplates and the headless-service requirement are unchanged. |
| Windows Server Support Comes to Kubernetes | 12-21 | 1.5 | read |
nodes |
Windows Server containers at alpha. Windows nodes are supported at the pin, but the lab has no Windows host to add, so this is a read for the shape of the problem — a second OS behind one API. |
| Cluster Federation in Kubernetes 1.5 | 12-22 | 1.5 | read |
api |
Federation's maturity post, arriving weeks before the subsystem's decline. Read it for the tone: this is what a component sounds like when it is being described as ready and is about to be withdrawn. |
| Kubernetes supports OpenAPI | 12-23 | 1.5 | walk |
api |
OpenAPI arrives, replacing hand-maintained Swagger 1.2. The interesting part is that the post announces the middle rung: v2 is still served at the pin, v3 was added and is now the preferred one, and only the endpoint the post replaced is a 404. kubectl explain and CRD schemas read v3, so which rung you fetch changes what you get. |
Exercises¶
Fifteen walk verdicts, numbered in publication order. All fifteen are written. The rubric they
are authored against was ratified in #57; the
section order and the ladder they use were amended in
#78.