Home Operations

June 28, 2026 ยท View on GitHub

HomeOps repo managed by k8s :wheel_of_dharma:

... automated via Flux, Renovate and GitHub Actions :robot:

Discordย ย  Talosย ย  Kubernetesย ย  Fluxย ย  Renovate

Home-Internetย ย  pre-commitย ย  Alertmanager

Age-Daysย ย  Uptime-Daysย ย  Node-Countย ย  Pod-Countย ย  CPU-Usageย ย  Memory-Usageย ย 


๐Ÿ“– Overview

Here, I perform DevOps best practices at home. I adhere to Infrastructure as Code (IaC) and GitOps practices using tools like Kubernetes, Flux, Renovate and GitHub Actions. My cluster runs on three control-plane Talos nodes virtualized on Proxmox with Rook-Ceph for distributed storage.

Alt

โ›ต Kubernetes

My Kubernetes cluster runs Talos Linux on three control-plane nodes. Two are deployed bare metal and one is deployed as Proxmox VM. Talos is a fantastic lightweight Kubernetes distribution that provides a minimal, hardened, and API-driven OS โ€” I highly recommend it to anyone seeking a secure and reproducible Kubernetes setup.

There is a template over at onedr0p/cluster-template if you wanted to try and follow along with some of the practices I use here.

Core Components

Networking:

  • cilium โ€” eBPF-based CNI providing networking, observability, and security (kube-proxy replacement)
  • cloudflared โ€” Cloudflare Tunnel for secure external ingress
  • external-dns โ€” automatic DNS record synchronization to Cloudflare (public) and UniFi (private)
  • Gateway API โ€” dual external/internal gateways with cert-manager TLS via Cilium

Storage:

  • rook-ceph โ€” distributed block storage for persistent volumes
  • csi-driver-nfs โ€” NFS volume provisioning for media shares
  • volsync โ€” PVC backup and replication
  • kopia โ€” snapshot-based backup client

Secrets & Security:

  • external-secrets โ€” syncs secrets from 1Password Connect into Kubernetes
  • cert-manager โ€” automated TLS certificate management with Let's Encrypt
  • sops โ€” encrypted secrets committed to Git with Age

GitOps & Automation:

  • flux โ€” GitOps operator watching my kubernetes/ directory
  • renovate โ€” automated dependency updates via PRs
  • reloader โ€” restarts pods when ConfigMaps or Secrets change
  • keda โ€” event-driven autoscaling

Observability:

  • victoria-metrics โ€” Prometheus-compatible metrics storage and querying
  • victoria-logs โ€” log storage and querying
  • grafana โ€” dashboards and visualizations
  • gatus โ€” service health monitoring and status page
  • kromgo โ€” custom badges for README
  • coroot โ€” APM and root-cause analysis
  • chaski โ€” custom alert routing and webhook receiver

Cluster Utilities:

โ˜ธ GitOps

Flux watches my kubernetes folder (see Directories below) and makes the changes to my cluster based on the YAML manifests.

The way Flux works for me here is it will recursively search the kubernetes/apps folder until it finds the most top level kustomization.yaml per directory and then apply all the resources listed in it. That aforementioned kustomization.yaml will generally only have a namespace resource and one or many Flux kustomizations. Those Flux kustomizations will generally have a HelmRelease or other resources related to the application underneath it which will be applied.

Renovate watches my entire repository looking for dependency updates, when they are found a PR is automatically created. When some PRs are merged Flux applies the changes to my cluster.

Directories

This Git repository contains the following directories under kubernetes.

๐Ÿ“ kubernetes      # Kubernetes cluster defined as code
โ”œโ”€๐Ÿ“ flux          # Main Flux configuration of repository
โ”œโ”€๐Ÿ“ apps          # Apps deployed into my cluster grouped by namespace
โ””โ”€๐Ÿ“ components    # Reusable Kustomize components

๐Ÿ“ talos           # Talos Linux node configuration and patches

:file_cabinet: Hardware

My homelab runs on the following hardware. All Kubernetes nodes are Talos Linux VMs running on Proxmox.

DeviceOS DiskData DiskRAMDetails
Proxmox VENVMeNVMe64GBMain hypervisor
k8s-0 (VM)250GB250GB32GBTalos control-plane, Intel ARC GPU
k8s-1 (VM)eMMC 30GB250GB32GBTalos control-plane
k8s-2 (VM)1TB SSD250GB32GBTalos control-plane, e1000e driver
TrueNAS SCALE (VM)SSD 20GB40TB ZFS64GBNFS/SMB storage โ€” 4x10TB HDD RAIDZ2
Unifi UDM ProSSD 14GBHDD 1TB4GBRouter and security gateway
Unifi Switch 16 PoEN/AN/AN/APoE+ switch
Offsite VM60GB8TB8GBOffsite backup target

๐Ÿ  Applications

Media:

AppDescription
PlexMedia server and streaming
Plex-MusicMusic streaming via Plexamp
SonarrTV show collection manager
RadarrMovie collection manager
ProwlarrTorrent/usenet indexer manager
SabnzbdUsenet downloader
UnpackerrAuto-extracts downloaded archives
RecyclarrSyncs TRaSH Guides profiles
FlareSolverrCloudflare anti-bot bypass
SeerrMedia request management
TautulliPlex statistics and monitoring
KomgaComic/manga/ebook library
KapowarrComic book collection manager

Home & Productivity:

AppDescription
Home AssistantHome automation platform
GlancePersonal dashboard
KarakeepBookmark manager
Paperless-ngxDocument management with OCR
DocmostCollaborative wiki and notes
AFFiNEKnowledge base workspace
AtuinShell history sync server

Infrastructure & Networking:

AppDescription
Cloudflare TunnelSecure external ingress
Echo ServerIngress/connectivity testing
ProxmoxReverse proxy to hypervisor
TrueNASReverse proxy to storage
MinecraftGame server

๐Ÿ“ฐ Blog post

Feel free to checkout my blog axell.dev which is also open source! I also have made a blog post about HW, what were my choices... which ones were good and which ones were bad. Click here.

๐Ÿค Gratitude and Thanks

I am proud to be a member of the home operations (previously k8s-at-home) community! I received a lot of help and inspiration for my Kubernetes cluster from this community which helped a lot. Thanks! :heart:

If you are interested in running your own k8s cluster at home, I highly recommend you to check out the k8s-at-home website.

Be sure to check out kubesearch.dev for ideas on how to deploy applications or get ideas on what you may deploy.

๐Ÿ” License

See LICENCE.