Choosing infrastructure
Networking, storage, recovery, and delivery decisions under real constraints.
Building Frank
Follow the implementation, from bare metal to working services.
Persistent Storage with Longhorn
Setting up Longhorn distributed block storage across heterogeneous disks, including a GPU-local StorageClass for AI workloads.
Backup — Longhorn to Cloudflare R2
Configuring Longhorn backup targets with Cloudflare R2 — and the three Longhorn 1.11 gotchas that rewrote the original plan.
Multi-tenancy — Disposable Kubernetes Clusters with vCluster
Virtual Kubernetes clusters inside Frank — each one a disposable sandbox with its own control plane, resource quotas, and network policies, deployed via ArgoCD.
Hopping Through the Portal — A Public Edge Cluster
Deploying a single-node Talos cluster on Hetzner Cloud as a public edge — Headscale mesh, Caddy reverse proxy, and everything that went wrong along the way.
Progressive Delivery with Argo Rollouts
Adding canary and blue-green deployment strategies to the cluster with Argo Rollouts — including a 39-day postmortem where the canary never actually ran.
Workflow Automation with n8n
Deploying per-user n8n instances on gpu-1 for workflow automation — with Authentik forward-auth, dedicated PostgreSQL, and Prometheus metrics.
In-Cluster Ingress — Traefik, Wildcard TLS, and a Homepage Dashboard
Moving TLS termination and reverse proxying into the cluster with Traefik, Let's Encrypt wildcard certs, Authentik forward-auth, and a gethomepage.dev dashboard.
CI/CD Platform — Gitea, Tekton, Zot, and Cosign
Deploying a full Kubernetes-native CI/CD platform on pc-1 — Gitea for git mirroring, Tekton for pipelines, Zot for container images, and cosign for supply chain signing.
Agent Images and the VK-Local Sidecar — Unbaking VibeKanban
Splitting VibeKanban out of the Kali agent pod into a shared-volume sidecar, and moving Dockerfiles into a new multi-image repo with matrix CI and cross-repo dispatch.
Building Automation — AWX, the Imperative Counterweight
An Ansible controller for the home-lab boxes Talos and ArgoCD cannot reach — two operators, four CrashLoops, a login page with no login, and a ping that finally said pong.
The First Real Tenant: A vCluster That ArgoCD Deploys Into
Registering a vCluster as an ArgoCD cluster target crashed every app I run. The fix is six lines, and the order you apply them in matters.
CI on the Mirrors: Gitea Actions
GitHub Actions burned its free tier in 19 days, so the workflows now run on Frank's Gitea mirrors — same YAML, new engine, statuses flowing back
Operating on Frank
Check health, investigate failures, and recover the system.
Operating on Storage & Backups
Day-to-day commands for managing Longhorn volumes, checking backup health, restoring from Cloudflare R2, and debugging common storage failures on Frank.
Operating on Multi-tenancy
Day-to-day commands for managing vCluster virtual clusters, checking tenant health, creating and deleting vClusters, and debugging sync issues.
Operating on Hop — Single-Node Talos Edge Cluster
Managing Hop — a standalone single-node Talos cluster on Hetzner Cloud with Headscale mesh, Caddy, and CrowdSec.
Operating on Progressive Delivery
Promoting canary steps, switching blue-green, inspecting analysis results, and handling sparse-traffic pauses.
Operating on Workflow Automation
Managing n8n instances — health checks, database operations, adding instances, upgrading, and common issues.
Operating on Ingress
Checking Traefik routes, renewing ACME certificates, restarting Homepage, and debugging HTTP routing failures.
Operating on CI/CD Platform
Gitea mirror syncs, Tekton pipeline runs, Zot registry health, cosign verification, and webhook delivery debugging.
Operating Automation — Day-to-Day Commands for AWX
Onboarding a new host, reading a failed job, rotating the OIDC secret, and getting back in when SSO is the thing that broke.
The Frank Papers
Compare approaches, examine the evidence, and understand the trade-offs.
Heterogeneous Hardware as a Design Choice
Same boxes or different boxes? Six fleet shapes split on that one question — all-RPi, all-NUC, heterogeneous bare metal, edge+core, single beefy server + VMs, full-cloud…
eBPF Networking Without a Service Mesh
Six options dominate Kubernetes networking in 2026 — Cilium, Calico, kube-proxy + iptables, Istio, Linkerd2, and the cloud-managed VPC CNI — and they split on two axes:…
Distributed Storage on Bare Metal
Distributed storage on bare-metal Kubernetes is a four-job problem — synchronous replication, snapshots, off-cluster backup, RWX — and the six contenders in 2026 (Longhorn,…
Backup & DR Without a Vendor Contract
Kubernetes backup & DR is a five-job problem — API-object capture, volume capture, application-consistency hooks, offsite shipment, credential restore — and the six contenders…
Self-Hosted CI/CD on a Homelab
Self-hosted CI/CD is a choice between one tool or three. The six contenders in 2026 — Gitea+Tekton+Zot, GitLab CE, Forgejo+Woodpecker, Drone CI, Jenkins, and the SaaS baseline…
Progressive Delivery & the Service-Mesh Tax
Progressive delivery is a four-job problem — staged exposure, metric-gated promotion, automated rollback, traffic routing — and the six contenders in 2026 (Argo Rollouts,…
Ingress, Forward-Auth, and the Service Catalog
Ingress in 2026 is three jobs stacked — hostname routing and TLS, auth enforcement, and a catalogue humans can read — and six contenders (Traefik, Nginx, Contour/Gateway-API,…
Edge Clusters & Public Exposure
Public exposure from a home cluster is a five-job problem: NAT traversal, TLS termination, DNS, reverse proxy, mesh coordination. The 2026 vendor space splits on one question —…