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.
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.
SOPS and age are currently used to encrypt secrets that are stored in git.
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)
- Intel Core i5-6500T 2.50GHz CPU
- 32GB DDR4 RAM
- 1TB SSD
-
1x Custom NAS
- U-NAS NSC-810A Server Chassis
- Seasonic SS-350M1U Mini 1U PSU
- Supermicro X10SLM-F Motherboard
- Intel Core i3-4170 3.7Ghz CPU
- 16GB ECC DDR3 RAM
- 6x 3TB WD Red HDD (RAID-Z3)
- 120GB SSD (OS)
- Renovate - Periodically scans the repository and opens pull requests when it detects updates for various "package managers", including Ansible, Kubernetes, Helm, and Terraform.
I'm using Task to execute tasks defined in Taskfiles that have been created throughout the repository.
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 |
The inspiration to make this public has come from the people that have shared their homelab/kubernetes configurations at awesome-home-kubernetes.