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.

Image placeholder

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