Three-node Kubernetes home lab on Debian 13
This series builds a small Kubernetes platform that is intentionally easy to reason about. Its control plane survives one node failure; PostgreSQL and object storage do not. Their safety comes from local durable disks, Git-declared configuration, and tested off-cluster SFTP restores.
What you will learn
By the end of this series, you will be able to:
- Operate a three-server K3s cluster on bare-metal Debian 13.
- Deliver cluster and application changes from GitHub with Flux and SOPS-encrypted secrets.
- Separate public Cloudflare-Tunnel routes from LAN-only ingress.
- Run one shared PostgreSQL service and one Garage S3-compatible object service with a recoverable SFTP backup plan.
- Schedule NVIDIA GPU workloads deliberately and observe the cluster, storage, backups, and GPU.
Who this is for
This is for a home-lab operator comfortable with SSH, Git, Linux packages, IP addressing, and basic DNS. It assumes no prior Kubernetes administration. It does not teach multi-tenant security, Internet-facing Kubernetes API access, or database high availability.
Before you begin
Prepare the following before Step 1:
- Three x86_64 Debian 13 machines with static DHCP reservations or static addresses, reliable wired networking, and SSD/NVMe storage. One has a discrete NVIDIA GPU.
- A fourth machine or remote service running SFTP, with enough capacity for retained backups. It must not be on the same disk, host, or power circuit as the cluster.
- A GitHub account and a new private repository such as
homelab-gitops. - A Cloudflare-managed domain for public sites. Internal-only services require no public DNS.
- A LAN address range reserved for MetalLB that is outside DHCP, for example
192.168.50.240-192.168.50.250. - A workstation with
ssh,git,kubectl,helm,flux,sops,age, andrclone.
Use the example names and replace values consistently:
| Purpose | Example |
|---|---|
| Servers | lab-01, lab-02, lab-03 |
| API registration address | 192.168.50.10 |
| Storage node | lab-01 |
| GPU node | lab-03 |
| Cluster domain | cluster.example.net |
| GitHub repository | github.com/EXAMPLE/homelab-gitops |
Series steps
Each focused session takes approximately 30 to 40 minutes.
- Plan the cluster and prepare Debian hosts
- Harden access and establish node baselines
- Create the three-server K3s control plane
- Add local storage placement and LAN ingress
- Bootstrap GitHub GitOps and encrypted secrets
- Expose only public applications through Cloudflare
- Deploy shared PostgreSQL and prove it can be restored
- Deploy Garage object storage and back up buckets
- Make the NVIDIA GPU node available on purpose
- Observe the platform and rehearse recovery
Keep the cheat sheet nearby once the platform is running.
Key resources
Disable Secure Boot on a Proxmox VM
Turn off Secure Boot in a Proxmox VM's UEFI firmware when it prevents an NVIDIA driver from loading.
Step 1: Plan the cluster and prepare Debian hosts
Establish the failure domains, address plan, storage roles, and repeatable Debian 13 baseline for three bare-metal nodes.