3.1 Overview
State/Version: 20250405
3.1 Overview
3.1.1 A few words before we start 🚀
Setting up a home lab takes time. The construction or renovation of a house is comparable in scope and complexity. In the end, you not only know where the pipes run, but also what you can do better when building the next one.
In addition to expertise, two character traits in particular are required to master a project like this.
Patience and Persistence
3.1.2 Tech skills 🧑💻
#loadbalancer
#metallb
#nat
#proxy-server
#vlan
#nat
#network-bridging
#yaml
#json
#traefik
#nginx
#etcd
#gitops
#fluxcd
#terraform
#ansible
#proxmox
#virtualbox
#kustomize
#helm
#k3s
#k8s
#k3d
#k9s
#cloudflare
#certmanager
#letsencrypt
#longhorn
#sealed-secrets
#dns
#ipam
#renovate
#prometheus
#grafana
3.1.3 State of automation 🏗️
Topic |
Degree of automation |
Provisioning - Proxmox |
full ✅ |
Provisioning - Docker |
partially *3 🔥 |
K8s Deployment - Virtualbox |
full ✅ |
K8s Deployment - Proxmox |
full ✅ |
K8s Deployment - Docker |
full ✅ |
GitOps Fluxcd - Virtualbox |
full ✅ |
GitOps Fluxcd - Proxmox |
full ✅ |
GitOps Fluxcd - Docker |
full ✅ |
Legend |
|
*1 |
Terraform Proxmox Plugin is currently broken |
*2 |
No tech demo (Because of *1) |
*3 |
This step is manuall |
3.1.4 Workflow 🔀
Let’s flow through the setup.

3.1.5 Current Setup
Development Cluster (dxpsp1)
- The Development Cluster (🏷️Virtualbox) is provisioned and bootstraped with 🏷️Ansible
- Dell XPS 13 Plus 9320
Development Cluster (vmd95641)
The second Development Cluster (🏷️VPS) is provisioned manually as virtual machine at contabo and bootstraped with 🏷️Ansible.
Staging Cluster (K1) and Production Cluster (K2)
- Both Kubernetes clusters are provisioned with 🏷️Terraform on 🏷️Proxmox and bootstraped with 🏷️Talos.
%%{init: {"flowchart": {"htmlLabels": false}} }%%
flowchart TD
subgraph K2["`**K2**`"]
direction LR
K2-Loadbalancer["`_**Loadbalancer**_`"]
K2-ControlPlane1["`_**Control Plane 1**_`"]
K2-ControlPlane2["`_**Control Plane 2**_`"]
K2-ControlPlane3["`_**Control Plane 3**_`"]
K2-Worker1["`_**Worker 1**_`"]
K2-Worker2["`_**Worker 2**_`"]
K2-Worker3["`_**Worker 3**_`"]
K2-Loadbalancer --> K2-ControlPlane1
K2-Loadbalancer --> K2-ControlPlane2
K2-Loadbalancer --> K2-ControlPlane3
K2-ControlPlane1 --> K2-Worker1
K2-ControlPlane1 --> K2-Worker2
K2-ControlPlane1 --> K2-Worker3
K2-ControlPlane2 --> K2-Worker1
K2-ControlPlane2 --> K2-Worker2
K2-ControlPlane2 --> K2-Worker3
K2-ControlPlane3 --> K2-Worker1
K2-ControlPlane3 --> K2-Worker2
K2-ControlPlane3 --> K2-Worker3
end
style K2 fill:#9CD484,stroke:#00331a,stroke-width:1px
subgraph K1["`**K1**`"]
direction LR
K1-Loadbalancer["`_**Loadbalancer**_`"]
K1-ControlPlane1["`_**Control Plane 1**_`"]
K1-ControlPlane2["`_**Control Plane 2**_`"]
K1-ControlPlane3["`_**Control Plane 3**_`"]
K1-Worker1["`_**Worker 1**_`"]
K1-Worker2["`_**Worker 2**_`"]
K1-Worker3["`_**Worker 3**_`"]
K1-Loadbalancer --> K1-ControlPlane1
K1-Loadbalancer --> K1-ControlPlane2
K1-Loadbalancer --> K1-ControlPlane3
K1-ControlPlane1 --> K1-Worker1
K1-ControlPlane1 --> K1-Worker2
K1-ControlPlane1 --> K1-Worker3
K1-ControlPlane2 --> K1-Worker1
K1-ControlPlane2 --> K1-Worker2
K1-ControlPlane2 --> K1-Worker3
K1-ControlPlane3 --> K1-Worker1
K1-ControlPlane3 --> K1-Worker2
K1-ControlPlane3 --> K1-Worker3
end
style K1 fill:#9CD484,stroke:#00331a,stroke-width:1px