This is my infrastructure-as-code repo for my homelab and other self-hosted stuff. Some more sensitive stuff is in private submodules, so a lot of things won't work out of the box.
At a high level, the setup involves:
- A router running vyos, managed by Ansible.
- A couple of Raspberry Pis (the
netsvc
boxes) that run DNS and some other networking-related things, also managed through Ansible. - A bare-metal Kubernetes cluster that's a bit more exotic:
- The nodes run Flatcar Linux, which are netbooted through iPXE with Matchbox (running on one of the Raspberry Pis).
- Matchbox is configured through Terraform.
- The Kubernetes configuration is all managed by Flux.
- There are a few VMs running on KubeVirt, including a TrueNAS storage box.
Some places to start:
/ansible
: This includes a bunch of Ansible roles and modules. There are some roles for Pi-hole DNS setup (withkeepalived
-based failover),tangd
servers, and VyOS router configuration./terraform-modules
: This includes some Terraform modules (the top-level terraform module is private, unfortunately). The most interesting modules areflatcar_k8s_cluster
andflatcar_k8s_node
, which declaratively set up bare-metal Flatcar Linux Kubernetes worker nodes to be provisioned over netboot./k8s/deploy
: This is where the FluxCD declarative for my homelab Kubernetes cluster, which is where almost everything I run ends up going.
For some more deep dives into how things work, check out my blog.