Fabio TaverniniSchaffhausen, Switzerland
00:00
Fabio Tavernini

Homelab

A playground for DevOps and system automation, where nobody logs in to a server to deploy.

How a change travels

  1. Git pushprivate GitHub repo
  2. ApplicationSetone folder represents one app
  3. ArgoCDsyncs to the workload cluster
  4. KubernetesCluster API on Proxmox
Proxmox 2 nodes + Pi voteOPNsense HA pairVLANs per segmentPi-hole DNS everywhere

A playground for DevOps and system automation. The core is one Proxmox cluster across two HP EliteDesk mini PCs, with a Raspberry Pi as the third quorum vote. A small supervisor VM runs Cluster API with the Proxmox provider, so the workload cluster (three control planes, two workers, Cilium) is declared in YAML and cloned from a golden Rocky Linux image instead of built by hand. ArgoCD on the supervisor then deploys everything onto it from a private Git repo: an ApplicationSet watches the apps folder, so adding an app is just adding a folder, and nobody logs in to a server to deploy. Secrets are sealed before they are committed, and the admin tools are only reachable over Tailscale. The firewall is a pair of OPNsense VMs in high availability, one on each node, so either node can go down without taking the network with it. Storage is a big, loud rig running TrueNAS as a plain NAS, used for cold storage only. The network is split into VLANs so lab traffic stays apart from the rest of the house, and Pi-hole filters DNS across every segment.

The same idea at work

  1. App repoone config file per app
  2. Shared GitLab pipelinelint, generate project, namespace, RBAC
  3. Cluster repo + ArgoCDsync desired state
  4. Tanzu clustersDevelopment, Integration, Production
Harbor image registryRBAC owner and supplier roles per app30+ apps and platform servicesDocs internal Tanzu handbook

The homelab is built differently from the platform I help run at work, but the idea is the same. At work it is a VMware Tanzu platform with GitLab and ArgoCD. Each application repo carries one config file. Shared pipelines read it and generate the ArgoCD project, the namespace and the RBAC, and branches map to Dev, Integration and Production clusters.

What it is made of

Hardware

  • HP EliteDesk 800 G2
  • HP EliteDesk 800 G3
  • Raspberry Pi 4

Networking

  • OPNsense HA
  • TP-Link
  • WireGuard
  • Tailscale
  • Pi-hole
  • VLANs

Virtualisation

  • Proxmox cluster
  • Packer golden image
  • Rocky Linux
  • FreeBSD
  • Debian

Storage

  • TrueNAS (cold storage)
  • Longhorn
  • Velero backups

Orchestration

  • Kubernetes
  • Cluster API (CAPMOX)
  • Cilium
  • ArgoCD
  • MetalLB
  • Contour

Services

  • Gitea
  • Jellyfin
  • Mealie
  • Vikunja
  • Uptime Kuma

What is running

  • ArgoCDHub that deploys every app from Git
  • Cluster APIDeclares and rebuilds the Kubernetes nodes
  • Sealed SecretsSecrets safe to commit to Git
  • TailscalePrivate access to the admin tools
  • Pi-holeNetwork-wide DNS filtering