<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Posts on Rusty Bower</title><link>https://www.rustybower.com/posts/</link><description>Recent content in Posts on Rusty Bower</description><generator>Hugo -- gohugo.io</generator><language>en</language><copyright>© Rusty Bower</copyright><lastBuildDate>Tue, 08 Sep 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://www.rustybower.com/posts/index.xml" rel="self" type="application/rss+xml"/><item><title>How K3s Silently Grew a 40 GB SQLite Database and Took Down My Cluster</title><link>https://www.rustybower.com/posts/k3s-sqlite-kine-40gb-database-compaction/</link><pubDate>Tue, 08 Sep 2026 00:00:00 +0000</pubDate><guid>https://www.rustybower.com/posts/k3s-sqlite-kine-40gb-database-compaction/</guid><description>&lt;p&gt;My cluster — a single-node K3s instance running about 60 ArgoCD-managed applications — had been slowly dying for months. Pods crash-looped with &amp;ldquo;context deadline exceeded&amp;rdquo; errors. Leader elections failed. The metrics server stopped working entirely. I assumed it was resource pressure and tuned probe timeouts. The real problem was underneath all of it: K3s&amp;rsquo;s SQLite datastore had silently grown to 40 GB.&lt;/p&gt;</description></item><item><title>Fleet-Managing Fire Tablets from Kubernetes</title><link>https://www.rustybower.com/posts/fire-tablet-fleet-management-kubernetes/</link><pubDate>Tue, 25 Aug 2026 00:00:00 +0000</pubDate><guid>https://www.rustybower.com/posts/fire-tablet-fleet-management-kubernetes/</guid><description>&lt;p&gt;I have three Amazon Fire tablets mounted around the house running &lt;a href="https://www.fullykiosk.com/" target="_blank" rel="noreferrer"&gt;Fully Kiosk Browser&lt;/a&gt; as Home Assistant dashboards. They&amp;rsquo;re cheap ($35-50 each during sales), they have decent screens, and Fully Kiosk turns them into locked-down kiosks that show a dashboard and nothing else.&lt;/p&gt;</description></item><item><title>Whole-Home Audio with Music Assistant: Kubernetes Gotchas and a Silent Raspberry Pi</title><link>https://www.rustybower.com/posts/music-assistant-kubernetes-whole-home-audio/</link><pubDate>Tue, 11 Aug 2026 00:00:00 +0000</pubDate><guid>https://www.rustybower.com/posts/music-assistant-kubernetes-whole-home-audio/</guid><description>&lt;p&gt;My music setup had accreted into a mess. Across two Kubernetes clusters I was running Navidrome, Lyrion Music Server (LMS), beets, and my own AI radio station (SUB/WAVE) - plus a Raspberry Pi running piCorePlayer wired into a Dayton DAX66 matrix amp for whole-home audio. Four things that all &amp;ldquo;played music,&amp;rdquo; none of which talked to each other, and no single place to control any of it from Home Assistant.&lt;/p&gt;</description></item><item><title>The LoadBalancer That Never Worked: Migrating MetalLB from L2 to BGP</title><link>https://www.rustybower.com/posts/metallb-l2-to-bgp-migration-udm-pro/</link><pubDate>Thu, 30 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.rustybower.com/posts/metallb-l2-to-bgp-migration-udm-pro/</guid><description>&lt;p&gt;I started the day asking why one of my Frigate cameras was using more CPU than the others. I finished it having moved every LoadBalancer in my Kubernetes cluster onto BGP-routed addresses, because along the way I found a service that had been silently unreachable for two years.&lt;/p&gt;</description></item><item><title>Teaching Security Cameras to Describe What They See</title><link>https://www.rustybower.com/posts/frigate-coral-tpu-vision-llm-camera-alerts/</link><pubDate>Tue, 28 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.rustybower.com/posts/frigate-coral-tpu-vision-llm-camera-alerts/</guid><description>&lt;p&gt;A notification that says &amp;ldquo;person detected on doorbell&amp;rdquo; is useful. A notification that says &amp;ldquo;a delivery driver in a brown UPS uniform placed a medium-sized box on the porch and is walking back to the truck&amp;rdquo; is significantly more useful — especially when you&amp;rsquo;re in a meeting and trying to decide whether to get up.&lt;/p&gt;</description></item><item><title>Mac Studio as a Kubernetes Compute Satellite</title><link>https://www.rustybower.com/posts/mac-studio-kubernetes-compute-satellite/</link><pubDate>Tue, 21 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.rustybower.com/posts/mac-studio-kubernetes-compute-satellite/</guid><description>&lt;p&gt;My K3s cluster runs on six Intel NUCs. They&amp;rsquo;re great for the 50+ containers that make up my homelab — Plex, Home Assistant, Frigate, Paperless, the usual suspects. But they&amp;rsquo;re terrible at machine learning. Four Skylake cores and 32 GB of RAM per node doesn&amp;rsquo;t get you far when Immich wants to classify 80,000 photos or Frigate wants a vision model to describe who&amp;rsquo;s at your door.&lt;/p&gt;</description></item><item><title>Automating a Smart Bird Feeder's Photo Archive with Kubernetes and Immich</title><link>https://www.rustybower.com/posts/birdbuddy-immich-photo-pipeline/</link><pubDate>Thu, 16 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.rustybower.com/posts/birdbuddy-immich-photo-pipeline/</guid><description>&lt;p&gt;My &lt;a href="https://mybirdbuddy.com/" target="_blank" rel="noreferrer"&gt;Bird Buddy&lt;/a&gt; smart feeder takes a photo every time a bird visits. Over a few months, that adds up to thousands of images — all sitting in Bird Buddy&amp;rsquo;s cloud app with no good way to search, organize, or back them up. I wanted them in &lt;a href="https://immich.app/" target="_blank" rel="noreferrer"&gt;Immich&lt;/a&gt;, my self-hosted photo library, organized by species and properly timestamped.&lt;/p&gt;</description></item><item><title>Unit-Testing Home Automations That Run in Kubernetes</title><link>https://www.rustybower.com/posts/unit-tested-appdaemon-automations-kubernetes/</link><pubDate>Thu, 16 Jul 2026 00:00:00 +0000</pubDate><guid>https://www.rustybower.com/posts/unit-tested-appdaemon-automations-kubernetes/</guid><description>&lt;p&gt;Home automations are code that controls physical things. When they break, the consequences aren&amp;rsquo;t a 500 error — they&amp;rsquo;re a garage door that won&amp;rsquo;t close in a snowstorm, or window shades that open at 3 AM, or a tablet that charges to 100% and stays plugged in for months until the battery swells.&lt;/p&gt;</description></item><item><title>Fixing 10,000 Upside-Down Scanned Slides with a Local Vision LLM</title><link>https://www.rustybower.com/posts/fixing-upside-down-scanned-slides-vision-llm/</link><pubDate>Mon, 23 Feb 2026 00:00:00 +0000</pubDate><guid>https://www.rustybower.com/posts/fixing-upside-down-scanned-slides-vision-llm/</guid><description>&lt;p&gt;My grandfather had about 10,000 35mm slides. I rented a &lt;a href="https://www.slidesnap.com/" target="_blank" rel="noreferrer"&gt;SlideSnap X1&lt;/a&gt; and spent a weekend feeding them through — 33 boxes worth, organized into folders by box. The scanner itself was great, but when you&amp;rsquo;re pushing through thousands of slides in a weekend, some inevitably go in upside down or backwards. No metadata, no EXIF orientation flags — just thousands of JPEGs, some right-side up, some not, sitting on a NAS.&lt;/p&gt;</description></item><item><title>Finding Fraud in $1 Trillion of Medicaid Data with DuckDB</title><link>https://www.rustybower.com/posts/medicaid-fraud-detection-duckdb-227m-rows/</link><pubDate>Sat, 14 Feb 2026 00:00:00 +0000</pubDate><guid>https://www.rustybower.com/posts/medicaid-fraud-detection-duckdb-227m-rows/</guid><description>&lt;p&gt;CMS recently published provider-level Medicaid spending data from T-MSIS — every fee-for-service, managed care, and CHIP claim from 2018 through 2024, aggregated by billing provider, procedure code, and month. 227 million rows. $1.09 trillion in payments. I wanted to see what falls out when you run some basic fraud heuristics against it.&lt;/p&gt;</description></item><item><title>Building a Home Assistant Dashboard with Whole Home Audio Control</title><link>https://www.rustybower.com/posts/home-assistant-dashboard-whole-home-audio/</link><pubDate>Mon, 26 Jan 2026 00:00:00 +0000</pubDate><guid>https://www.rustybower.com/posts/home-assistant-dashboard-whole-home-audio/</guid><description>&lt;p&gt;My Home Assistant dashboard has evolved significantly over the past year. What started as the default auto-generated cards has become a carefully organized interface that my whole family actually uses. Here&amp;rsquo;s how I built it, with a focus on the whole home audio system that ties everything together.&lt;/p&gt;</description></item><item><title>Auto-Populating Pi-hole DNS from Kubernetes Ingresses</title><link>https://www.rustybower.com/posts/external-dns-pihole-kubernetes/</link><pubDate>Sat, 17 Jan 2026 00:00:00 +0000</pubDate><guid>https://www.rustybower.com/posts/external-dns-pihole-kubernetes/</guid><description>&lt;p&gt;Managing DNS records for a homelab with dozens of services is tedious. Every time you deploy something new, you have to remember to add a DNS record. I solved this by using external-dns to automatically create Pi-hole DNS entries from Kubernetes ingress resources.&lt;/p&gt;</description></item><item><title>Building a Self-Updating Dashboard with Homepage and Kubernetes</title><link>https://www.rustybower.com/posts/homepage-kubernetes-service-discovery/</link><pubDate>Sat, 17 Jan 2026 00:00:00 +0000</pubDate><guid>https://www.rustybower.com/posts/homepage-kubernetes-service-discovery/</guid><description>&lt;p&gt;One of the challenges of running a homelab with dozens of services is keeping track of what&amp;rsquo;s running and where. I recently deployed &lt;a href="https://gethomepage.dev/" target="_blank" rel="noreferrer"&gt;Homepage&lt;/a&gt; - a modern, fully static dashboard that automatically discovers services from Kubernetes ingresses.&lt;/p&gt;</description></item><item><title>From Keel to Renovate: Better Container Image Updates for GitOps</title><link>https://www.rustybower.com/posts/keel-to-renovate-kubernetes-image-updates/</link><pubDate>Sat, 17 Jan 2026 00:00:00 +0000</pubDate><guid>https://www.rustybower.com/posts/keel-to-renovate-kubernetes-image-updates/</guid><description>&lt;p&gt;For years I used Keel to automatically update container images in my Kubernetes clusters. It worked, but as I moved to GitOps with ArgoCD, Keel&amp;rsquo;s push-based approach became a liability. I migrated to Renovate for PR-based image updates, and it&amp;rsquo;s been a significant improvement.&lt;/p&gt;</description></item><item><title>GitOps for Homelabs: Kustomize + ArgoCD Patterns and Pitfalls</title><link>https://www.rustybower.com/posts/kustomize-argocd-homelab-gitops/</link><pubDate>Sat, 17 Jan 2026 00:00:00 +0000</pubDate><guid>https://www.rustybower.com/posts/kustomize-argocd-homelab-gitops/</guid><description>&lt;p&gt;I manage two Kubernetes environments - a home cluster (bowerhaus) and a cloud cluster (rustycloud) - using GitOps with Kustomize and ArgoCD. After running this setup for a while, I&amp;rsquo;ve learned what works, what doesn&amp;rsquo;t, and some non-obvious gotchas.&lt;/p&gt;</description></item><item><title>Optimizing Z-Wave Thermostats for Home Assistant Control</title><link>https://www.rustybower.com/posts/zwave-thermostats-home-assistant/</link><pubDate>Sat, 17 Jan 2026 00:00:00 +0000</pubDate><guid>https://www.rustybower.com/posts/zwave-thermostats-home-assistant/</guid><description>&lt;p&gt;I have six Honeywell T6 Pro Z-Wave thermostats throughout my house controlling a multi-zone HVAC system. Out of the box, these thermostats have their own scheduling and &amp;ldquo;smart&amp;rdquo; features that conflict with Home Assistant automations. Here&amp;rsquo;s how I configured them to let HA take full control.&lt;/p&gt;</description></item><item><title>Self-Hosted CI/CD with Drone, Gitea, and Harbor</title><link>https://www.rustybower.com/posts/drone-gitea-harbor-self-hosted-cicd/</link><pubDate>Sat, 17 Jan 2026 00:00:00 +0000</pubDate><guid>https://www.rustybower.com/posts/drone-gitea-harbor-self-hosted-cicd/</guid><description>&lt;p&gt;I run a fully self-hosted CI/CD pipeline using Drone for builds, Gitea for git hosting, and Harbor for container registry. No GitHub Actions, no Docker Hub, no external dependencies. Here&amp;rsquo;s how it all fits together.&lt;/p&gt;</description></item></channel></rss>