$ kubectl describe project home-lab-infrastructure-automation-with-ansible
Home Lab Infrastructure Automation with Ansible
A complete Ansible automation project that provisions and configures a full DevOps stack on a two-node bare metal Kubernetes cluster from scratch. Every tool in the stack is deployed, configured, and managed through code with no manual steps.
The project consists of 12 roles and 10 playbooks covering the full infrastructure lifecycle. Roles handle OS hardening, K3s cluster installation, MetalLB and NGINX Ingress networking, Longhorn distributed storage, the full monitoring stack (Prometheus, Grafana, Loki, Promtail, Jaeger), Jenkins CI/CD, ArgoCD GitOps, HashiCorp Vault secrets management, External Secrets Operator, CoreDNS for home network DNS resolution, a self-hosted container registry, and a homepage dashboard.
All playbooks are idempotent and safe to re-run. Variables are centralized in the inventory file with no hardcoded values in roles. The project targets two MINISFORUM mini PCs running Ubuntu 24.04, with workload placement controlled through Kubernetes node selectors and Ansible conditional blocks. Role execution is fully conditional based on node role, so control plane and worker node tasks never run on the wrong machine.
The cluster runs a complete observability stack with 15 days of Prometheus metric retention, Loki log aggregation via Promtail DaemonSets on both nodes, and Jaeger distributed tracing, all accessible through Grafana dashboards at named subdomains via CoreDNS and NGINX Ingress. Jenkins uses dynamic Kubernetes pod agents with a self-hosted Docker registry at registry.rezaops.com for fully local image builds and deployments.
Documented across a 13-part LinkedIn newsletter series covering every role, every Helm value, and 15 real errors hit during the build with exact error messages, root causes, and fixes.