Homelab infrastructure definitions and configuration
Alex's Homelab
My Homelab utilizes Infrastructure as Code and GitOps methodologies to automate provisioning, operating, and updating self-hosted services. I have also been documenting the progress of this on my blog as part of my homelab refresh.
Using my quick and dirty rebuild script, I can destroy and completely rebuild the Kubernetes Cluster with all defined apps deployed within approximately 30 minutes time.
:book: Overview
The major components of the homelab configuration are split out into sub-directories. For more details, see the README of the following directories.
- ansible roles for server configuration.
- kubernetes configuration deployed using ArgoCD.
- pki script to pre-generate PKI certificates for Kubernetes.
- terraform configuration for provisioning VMs.
:gear: Hardware
I've also documented this on my personal site, but the hardware used consists of the following.
- 1x Mikrotik CRS109-8G-1S-2HnD-IN Router
- 1x CyberPower UPS PR750ELCD
- 3x ThinkCentre M900 Tiny (USFF)
- 1x Custom NAS
:robot: Automation
- Renovate - Periodically scans the repository and opens pull requests when it detects updates for various "package managers", including Ansible, Kubernetes, Helm, and Terraform.
:computer: Tasks
I'm using Task to execute tasks defined in Taskfiles that have been created throughout the repository.
:wrench: Tech stack
My homelab uses the following software, this list is non-exhaustive.
| Logo | Name | Description |
|---|---|---|
| Ansible | Server configuration | |
| Debian | Base OS for all servers | |
| Docker | Container runtime | |
| Helm | Package manager for Kubernetes | |
| Kubernetes | Container orchestration | |
| KVM | Virtual Machine Hypervisor | |
| libvirt | Toolkit to manage KVM | |
| MetalLB | Load Balancer for bare metal Kubernetes clusters | |
| Renovate | Detects and corrects out-of-date dependencies | |
| Sealed Secrets | Encrypted Kubernetes secrets that are safe to store in git | |
| sops | Encrypted secrets in Git | |
| Terraform | VM provisioning |
:handshake: Thanks
The inspiration to make this public has come from the people that have shared their homelab/kubernetes configurations at awesome-home-kubernetes.