The posts here are grouped by topic. Many were written to be read in order, from the basics to the deep end; a few stand on their own. Each group below links the posts in the sequence I would follow.
Kubernetes scheduling and batch
How pods get placed, and how batch and machine-learning jobs get their all-or-nothing guarantees. Start here if you run training jobs or GPU workloads on a shared cluster.
- Kubernetes architecture deep dive: the control plane, the data plane, and the reconcile loop that ties them together.
- Writing a kube-scheduler plugin: one scheduling cycle, and where you can hook into it.
- Writing a DRA driver: how dynamic resource allocation hands devices to pods.
- DRA versus device plugins: the two GPU models, and when to move.
- Gang scheduling in 1.35 and 1.36: why a half-placed job deadlocks, and the three ways to get all-or-nothing.
- JobSet for distributed training: the job shape a multi-node training run actually needs.
- Kueue deep dive: the queue, quota, and fair sharing Kubernetes never had.
- Scaling Python workloads with Ray on Kubernetes: running distributed Python and ML jobs with KubeRay.
Control plane at scale
What happens between a pod being scheduled and a pod running, and how the API server survives a large cluster. Start here if you operate clusters and chase latency or outages.
- How the kubelet actually starts a pod: the exact order from scheduled to running.
- API server survival guide at scale: the failure loop, and the features that broke it.
- API Priority and Fairness: keeping critical requests flowing when the API server is overloaded.
GPU inference on Kubernetes
Serving large models when one GPU, or one node, is not enough. Start here if you deploy inference.
- vLLM on Kubernetes: why vLLM is fast, and how to serve it.
- LeaderWorkerSet for multi-node inference: running one model across many nodes.
Kubernetes, release by release
What each Kubernetes release actually changes for people who run clusters.
- Kubernetes 1.33
- Kubernetes 1.34: DRA goes GA.
- Kubernetes 1.35: in-place pod resize GA, cgroup v1 nodes stop booting.
- Kubernetes 1.36: PSI metrics and user namespaces GA.
- Kubernetes 1.37: DRA device management lands.
Policy with Kyverno
Automating namespace resources and self-service with Kyverno generate policies.
- Kyverno generate policies: automate namespace resources the right way.
- Kyverno generate, part 2: label-driven self-service resources.
Go
The language in production: fundamentals first, then what each release changes.
- Go generics deep dive: type parameters, constraints, and when to use them.
- Go 1.24 deep dive
- Go 1.25 deep dive
- Go 1.26 deep dive
- Go 1.27 deep dive
Standalone guides
Posts that do not belong to a sequence but are worth reading on their own.
- EKS and Okta OIDC: SSO for kubectl: single sign-on for cluster access you can reason about.
- Proto at scale: Buf, remote plugins, and ConnectRPC: a modern protobuf and RPC toolchain.