Skip to content

2015 — the census

44 posts, 2015-03-20 to 2015-12-22. Kubernetes 0.13 to 1.1; 1.0 shipped on 2015-07-21, four months into the blog's life. Nothing here runs as written. v1beta3 arrives and is superseded by v1 inside a month, there is no RBAC, no Deployment, no kubeadm, no CRI, no Ingress, and kubectl apply does not exist yet.

That is why 2015 was censused first — see the method. If the format survives this year it survives the staleness case entirely.

Yield: 10 walk, inside the 8–15 band. 11 read, 2 dated, 21 skip. The 21 rejects are 11 weekly-hangout notes, a launch party, a training-course ad, a UX-study recruitment, two video posts, a slide deck, two changelog dumps and three vendor availability announcements — a little under half the year, which is what a project's first nine months of blogging looks like.

Only 2 rows are dated, and both for the same reason: One million requests per second wants a cloud load balancer and hundreds of nodes, and Raspberry Pi Part 1 is a bill of materials. Nothing else in the year fails on the lab ceiling. Two posts that were hands-on but whose technique is redundant or whose tool is abandoned — Sysdig and the Puppet module — are read, per the verdict definitions.

Triage cost: 299KB of source, a 93KB first-screen digest, ~530 tokens a post.

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
Welcome to the Kubernetes Blog! 03-20 — skip meta A link roundup to nine posts on other sites, six of which 404.
Kubernetes Gathering Videos 03-23 — skip meta A YouTube playlist embed, 301 characters long.
Hangout notes — March 27 03-28 — skip meta Raw meeting notes. Carries the kubectl exec demo — SPDY over HTTP, entered via nsenter — but as minutes, not as a lesson.
Participate in a Kubernetes User Experience Study 03-31 — skip meta Recruitment ad; the study ran April 2015.
Hangout notes — April 3 04-04 — skip meta Minutes. The cluster-federation design discussion that became Ubernetes, then KubeFed, then nothing.
Faster than a speeding Latte 04-06 — skip meta 129 characters and a YouTube shortcode.
Hangout notes — April 10 04-11 — skip meta Minutes. Contains the argument that produced the Deployment object — "treating rcs as pets vs. cattle" — in note form.
Introducing Kubernetes API Version v1beta3 04-16 0.15 walk api Every version named in it is dead, including the one it calls the release candidate. The whole payload is why the API is versioned at all.
Kubernetes Release: 0.15.0 04-16 0.15 read api The changelog half of the row above: v1beta3 becomes the default API and the etcd storage version, so stored objects were rewritten on read.
Hangout notes — April 17 04-17 — skip meta Minutes.
Kubernetes and the Mesosphere DCOS 04-22 0.15 read history The product is gone, but this is where "cloud native" gets defined in three bullets, three months before the CNCF existed.
Borg: The Predecessor to Kubernetes 04-23 0.15 read history Four Kubernetes features traced to a Borg feature, by the people who wrote both. Nothing to run; it explains the shape of everything you do run.
Hangout notes — April 24 04-30 — skip meta Minutes.
AppC Support for Kubernetes through RKT 05-04 0.15 read history The rkt bet, stated as a bet. rkt was archived in 2020; read it for what "support two runtimes with in-tree code" cost, which is the pressure CRI answered.
Kubernetes Release: 0.16.0 05-11 0.16 read api One line in a changelog — "Cloning v1beta3 as v1 and exposing it in the apiserver" — is the moment v1 exists.
Hangout notes — May 1 05-11 — skip meta Minutes.
Resource Usage Monitoring in Kubernetes 05-12 0.16 walk obs Heapster is archived and unpublished, cAdvisor's port 4194 is gone, and the modern path is a different API with a different owner.
Kubernetes Release: 0.17.0 05-15 0.17 skip meta 55KB of PR titles — the largest post of the year and the emptiest. The v1beta3 conversion churn it records is already the payload of two rows above.
Docker and Kubernetes and AppC 05-18 0.17 walk nodes "We intend to continue to support Docker indefinitely." Indefinitely ended in v1.24, and the thing that replaced it is an interface, not a runtime.
Hangout notes — May 15 05-18 — skip meta Minutes.
Kubernetes on OpenStack 05-19 0.17 skip ecosystem Availability announcement for a Murano app catalog entry; the catalog and the repo it points at are both gone.
Hangout notes — May 22 06-02 — skip meta Minutes.
Cluster Level Logging with Kubernetes 06-11 pre-1.0 walk obs A fluentd DaemonSet, Elasticsearch and Kibana shipped with the cluster. Kubernetes ships no logging at all now, and that was a decision.
Slides: Cluster Management with Kubernetes 06-26 pre-1.0 skip meta Two links to a Google Slides deck.
The Distributed System ToolKit: Patterns for Composite Containers 06-29 pre-1.0 walk api Sidecar, ambassador and adapter are still the three names everyone uses. The manifests are cosmetic; what changed is that one of the three became a field.
How did the Quake demo from DockerCon Work? 07-02 pre-1.0 walk nodes Checkpoint/restore, done outside Kubernetes with CRIU because nothing supported it. The kubelet has an endpoint for it now — still alpha, eleven years later.
Kubernetes 1.0 Launch Event at OSCON 07-02 pre-1.0 skip meta Party invitation. kuberneteslaunch.com no longer resolves.
Announcing the First Kubernetes Enterprise Training Course 07-08 pre-1.0 skip meta Course ad; the course ran on 2015-07-20.
Hangout notes — July 10 07-13 — skip meta Minutes.
Strong, Simple SSL for Kubernetes Services 07-14 pre-1.0 walk security Neither strong nor simple now: an nginx sidecar terminating TLS from a hand-rolled secret, no rotation, no issuer, no expiry. Every layer of that has an owner today.
Hangout notes — July 17 07-23 — skip meta Minutes.
The Growing Kubernetes Ecosystem 07-24 1.0 read ecosystem A census of the ecosystem in the week 1.0 shipped. Read it as a survivorship list: count how many of the fifteen still exist under the same name.
Hangout notes — July 31 08-04 — skip meta Minutes.
Using Kubernetes Namespaces to Manage Environments 08-28 1.0 walk api Almost the only 2015 post whose commands still run. The advice is what expired: a namespace is not an isolation boundary, and nothing in the post would tell you.
Kubernetes Performance Measurements and Roadmap 09-10 1.0 read obs Two SLOs — 99% of API calls under 1s, 99% of pod startups under 5s — set in 2015 and still the scalability SLOs. The node target moved 100 → 5000; the promises did not.
Some things you didn't know about kubectl 10-28 1.0 walk tooling Six features, one per section, and the fate of each is different: still there, renamed, silently ignored for three releases, or removed outright.
Kubernetes as Foundation for Cloud Native PaaS 11-03 1.0 skip ecosystem Four vendor quote blocks. Deis, Gondor and OpenShift v3's PaaS framing all went elsewhere; no argument survives the quotes.
Kubernetes 1.1 Performance upgrades, improved tooling and a growing community 11-09 1.1 walk net Announces iptables kube-proxy as an option with an 80% tail-latency claim. It is still the default at v1.37, and nftables — GA since 1.33 — still is not.
One million requests per second 11-11 1.1 dated net Was hands-on, but needs a cloud load balancer and hundreds of nodes. The rolling-update argument inside it is carried better by the 1.1 row above.
Monitoring Kubernetes with Sysdig 11-19 1.1 read obs csysdig still runs and the syscall-level view is worth seeing, but the product split into Falco and a SaaS and the cluster-side half of the lesson is the Heapster exercise's. Redundant, not out of reach.
Creating a Raspberry Pi cluster, the shopping list (Part 1) 11-25 1.1 dated nodes A 2015 bill of materials — Pi 2 model B, 8GB SD cards. The hands-on half is Part 2.
How Weave built a multi-deployment solution for Scope using Kubernetes 12-12 1.1 read ecosystem A real production architecture written up honestly, including what they rejected. The "three environments as near identical as possible" requirement is the GitOps argument, four years early.
Managing Kubernetes Pods, Services and Replication Controllers with Puppet 12-17 1.1 read tooling The module is abandoned and generated from Swagger that no longer exists. Worth one paragraph, not an exercise: a run-once config manager pointed at a level-triggered controller, which is the argument GitOps settled.
Creating a Raspberry Pi cluster, the installation (Part 2) 12-22 1.1 read nodes Pre-kubeadm bring-up in full: docker run each control-plane component by hand, on ARM, with --api-servers on every kubelet. Read as the problem statement kubeadm was written against.

Exercises

Ten walk verdicts, numbered in publication order. All ten are written. The rubric they are authored against was ratified in #57; the section order and the ladder they use were amended in #78.

# exercise state
01 Every version in this post is dead, and every rename in it is still law written
02 The pipeline in this post is gone; the sentence describing the kubelet's role is still exact written
03 Both runtimes this post promises to support are gone, and the promise underneath them was kept written
04 The manifest in this post never parsed, and the stack it describes is no longer shipped at all written
05 Two of the three patterns are still patterns; one became a field written
06 Kubernetes shipped the half of this post that produces a file, and not the half that resumes a process written
07 Every line of this post still runs, and the sentence it quotes to justify itself is gone written
08 The commands in this post all still work; the sentence in the middle of it is the reason people lose clusters written
09 Nine features, six fates, and the one command in the post that never ran at all written
10 The option this post buries in bullet two is still the default eleven years later, and its replacement is locked on written