Running K3s on a Raspberry Pi sounds simple, until you try to make a rebuild repeatable: bootstrap the node, get Flux access to Git, and recreate credentials without committing plaintext secrets. I learned a bunch of things the hard way, and I hope writing them down saves the next person (or GenAI model) some of the same back-and-forth. The pattern that worked was a clean hand-off: Ansible prepares the host and the bootstrap prerequisites; Flux takes over once it can read the GitOps repo.
Saturday, September 26, 2026
Sunday, September 20, 2026
Running Pi‑hole on k3s and how GenAI tried to make me run as root
I was wrestling with Pi‑hole on single node Kubernetes and hit the classic privileged‑port problem: DNS wants port 53, containers don’t. The first GenAI suggestions were blunt, run the container as root. After some challenging from my side, it pivoted to MetalLB which is a nice option in a multi node setup. After digging I discovered a much cleaner path: k3s’s built‑in load balancer (ServiceLB, formerly known as Klipper LoadBalancer). Configure Pi-hole to use port 5353 and map it to 53 at the ServiceLB, no root, no extra components, and it worked like a charm.
Monday, August 17, 2026
Resurrecting a Samsung Galaxy Tab E SM‑T560
During vacations, I spent a day bringing an old Samsung Galaxy Tab E (SM‑T560 / gtel3g) back to life. It started as a quick tweak and turned into a proper little surgery: replace the stock recovery, flash a custom LineageOS ROM to test, chase down a couple of quirks, and finally install an alternative Android, ViperOS, build focused on stability. This is what I did and the gotchas I hit.
Sunday, May 3, 2026
Upgrading asp.net 6 to 10
I recently upgraded one of my projects from .NET 6 to .NET 10, and while the process was smoother than expected, there were several important steps and breaking changes worth documenting. This post summarizes what I did.