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