Skip to content

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.

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.

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 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.

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 —…