$ cat post/ps-aux-at-midnight-/-a-kernel-i-compiled-myself-/-the-log-is-silent.md

ps aux at midnight / a kernel I compiled myself / the log is silent


Title: New Year, New Kubernetes, Old Debugging Fights


2018 began with the promise of a new decade, and in tech, it felt like a moment to take stock. Kubernetes had emerged victorious from the container wars, and its ecosystem was swelling. Helm 2 was still wrapping up its final touches, while Istio and Envoy were making waves in service mesh discussions. Serverless hype was at its peak, and GitOps was starting to gain traction as a way of life for platform teams.

At my current job, we had been deeply entrenched in Kubernetes since the fall. Our initial struggles with managing state, storage classes, and PVCs were still fresh, but we were making progress. Helm helped us simplify deployment practices, while custom resource definitions (CRDs) allowed us to extend Kubernetes without bending it too far out of shape.

However, as we delved deeper into our Kubernetes cluster, old battles began to resurface. Debugging a persistent issue with NodePort services and ingress controllers became a real headache. The problem seemed to come and go in mysterious ways, only popping up during high traffic times. I spent countless nights chasing down this elusive bug, logs becoming my nemesis as they showed no clear pattern.

In one particularly frustrating moment, I found myself arguing over why we should use kubectl for deployments instead of Helm charts. The argument was fueled by a mix of practical concerns—kubectl’s simplicity and reliability—and the desire to reduce complexity in our workflows. We were already dealing with a plethora of Kubernetes features, and adding another layer seemed unnecessary. But the reality is that Helm offered so much more than just deployment scripts; it provided versioning, templating, and lifecycle management for our applications.

Around this time, Linus Torvalds’ public comments on poor code quality in various repositories caught my attention. It was a stark reminder that regardless of how advanced technologies become, the fundamentals of good coding practice still matter. In our debugging sessions, we often found ourselves reverting to basics: checking configuration files, ensuring proper resource requests and limits, and verifying network settings.

As we wrapped up another sprint, I couldn’t help but think about the broader tech landscape. Reading privileged memory with a side-channel attacks seemed particularly relevant as we were discussing security in our team meetings. While Kubernetes offered robust security features, it was still important to stay vigilant and keep up-to-date on the latest threats.

The news of the Montana state adopting net neutrality after the FCC repeal felt like a small victory amidst larger systemic issues. It reminded me that while we focused on technology, there were real-world implications affecting our users and their access to information.

Ursula Le Guin’s passing left an empty spot in my reading queue but also a sense of loss for a literary giant who had inspired many. In the tech world, Aaron Swartz’s legacy continued to be discussed, with reflections on his contributions and what might have been.

As 2018 rolled out, it brought with it new challenges and opportunities. The Kubernetes ecosystem was only going to get more complex, but so too would our ability to manage it. Debugging sessions like the one I had were just a small part of a much larger journey. With each setback, we learned and adapted. And as long as there were tools like kubectl, Helm, and Istio available, I was confident that we could overcome any challenge that came our way.

Happy New Year to all! Here’s to hoping 2018 brings more collaboration and fewer frustrating bugs.