Updating the Firmware on my Turing Pi 2 Boards

Wherein I update my Turing Pi 2 boards to a new firmware. During the migration of my Homelab to a fleet of Raspberry Pi 4, I bought two Turing Pi 2 boards and put eight Raspberry Pi CM4 8GB into them. You can read more about my setup here. The board has a nice Board Management Controller (BMC). It is an Allwinner SoC with 128 MB of RAM and 128 MB of flash for the OS. It’s running an embedded Linux distribution. This BMC implements a few interesting features: ...

December 18, 2025 · 13 min · Michael

Kubernetes Cert Renewal and Monitoring

Wherein I let my kubectl certs expire and implement some monitoring. A couple of days ago, I was getting through my list of small maintenance tasks in my Kubernetes cluster. Stuff like checking the resource consumption of new deployments and adapting the resource limits. And in the middle of it, one of my kubectl invocations was greeted by this message: error: You must be logged in to the server (Unauthorized) So I had a look at my kubectl credentials. For those who don’t know, kubectl authenticates to the cluster with a client TLS cert by default. I had just copied the admin.conf config file kubeadm helpfully creates during cluster setup. I didn’t really see any reason to set up anything more elaborate, considering that I’m the only admin in the cluster. ...

December 7, 2025 · 10 min · Michael
The Taskwarrior logo. It shows a Spartan (the Greek city state) helmet. It's a full helmet, with vertical slit down the center and an eye slit.

Task Management With Taskwarrior

It was September 2014, and I needed to procrastinate a University exam. Looking for something I could mentally categorize under “useful”, I happened upon Taskwarrior, and it has been running my life ever since. In this post, I will describe what Taskwarrior is and how I’m using it, as well as my migration from Taskwarrior 2.6 and Taskd to the new Taskwarrior 3.4 and taskchampion-sync-server. In short, Taskwarrior is a command line task management system. ...

November 16, 2025 · 24 min · Michael
A screenshot of a Grafana dashboard. It shows a number of stats metrics at the top, for example the number of users and buckets and the total bytes send in the interval. Below that, there are a number of time series panels, like number of operations over time, bytes send or bytes received by bucket. I will describe each individual panel and its content in detail in the main post.

Gathering Metrics from Ceph RGW S3

Wherein I set up some Prometheus metrics gathering from Ceph’s S3 RGW and build a dashboard to show the data. I like metrics. And dashboards. And plots. And one of the things I’ve been missing up to now was data from Ceph’s RadosGateway. That’s the Ceph daemon which provides an S3 (and Swift) compatible API for Ceph clusters. While Rook, the tool I’m using to deploy Ceph in my k8s cluster, already wires up Ceph’s own exporters to be scraped by a Prometheus Operator, that does not include S3 data. My main interest here is the development of bucket sizes over time, so I can see early when something is misconfigured. Up to now, the only indicator I had was the size of the pool backing the RadosGW, which currently stands at 1.42 TB, which makes it the second-largest pool in my cluster. ...

October 10, 2025 · 15 min · Michael

Updating CloudNativePG Postgres Images

In the interest of paying down a bit of technical debt in the Homelab, I recently started to update the CloudNativePG Postgres images to their new variants. Where before, the Postgres operand images (see the GitHub repo) were based on the official Postgres containers, they’re now based on Debian and the Debian Postgres packages. With this switch, instead of just having one image per Postgres version, there are now a few variants: ...

October 1, 2025 · 6 min · Michael