Writing a Kubernetes Cloud Controller Manager: Bridging Your Infra to Kubernetes

A Cloud Controller Manager is a bridge. On one side: a Kubernetes cluster that thinks in Nodes, Services, and Routes. On the other: whatever actually runs your machines and network - a hyperscaler like AWS, GCP, or Azure, or just as often a private cloud, a colocated rack, or a home lab. The CCM’s whole job is translation - when a Node joins, ask the infrastructure what it knows about that machine and translate it onto the Node object; when a Service wants a load balancer, go create one and wire the ingress IP back into status. Without it, kubectl get nodes never gets a region label and type: LoadBalancer never gets an IP - Kubernetes has no idea any of that infrastructure exists. ...

August 6, 2026 · 25 min

Writing a Kubernetes CSI Driver: Controller and Node from Scratch

Kubernetes storage is one of those areas that looks simple from the outside — you create a PersistentVolumeClaim, a pod mounts it, done. But the moment you need to integrate your own storage backend, you’re staring at the Container Storage Interface spec, sidecar containers you’ve never heard of, and gRPC services that have to be wired together just right. I had the pleasure of writing and contributing to a production-grade CSI driver end-to-end. This post covers everything I wish I had in one place: what CSI actually is, how Kubernetes orchestrates it, and how to implement all three services in Go. ...

April 24, 2026 · 13 min

Practically, Go 1.25's Container-Aware GOMAXPROCS: What You Need to Know

Go 1.25 just dropped with expected changes to GOMAXPROCS, which significantly change how Go applications behave in containerized environments. The runtime now automatically detects and respects container CPU limits when setting GOMAXPROCS. This isn’t just a minor improvement—it’s a shift that may dramatically improve performance for millions of containerized Go applications. And this isn’t the only amazing change, but this is the one I’ll focus on in this post. The Problem That Plagued Go for Years Before Go 1.25, there was a fundamental mismatch between Go’s runtime and containerized environments: ...

January 13, 2025 · 13 min