With the home lab vision in mind, the next step was setting up the underlying VMs that would form my Kubernetes cluster. I chose Ubuntu Server as the base OS for all nodes.
Creating the Base Ubuntu Template
I started by installing Ubuntu Server on a VM and used it to build a reusable template for my k3s nodes. My attempts using Dietpi OS repeatedly failed in my overall build.
Here’s what I assigned to the base VM:
- vCPU: 4 cores
- RAM: 8 GB
- Disk 1 (boot): 32 GB
- Disk 2 (data): 50 GB (left unformatted for Longhorn to consume)
Once Ubuntu was installed, I performed the following setup tasks:
- Set the system timezone
- Assigned a static IP address
- Installed
nfs-common
to enable access to the NFS shares hosted on my TrueNAS server
I then shut down the VM and converted it into a template in Proxmox, which made it easy to clone and spin up new nodes.
Provisioning the Cluster Nodes
Using the template, I cloned three VMs for the cluster:
cube1
→10.0.0.16
cube2
→10.0.0.17
cube3
→10.0.0.18
These will serve as the primary k3s nodes.
Setting Up the Jumpbox
To manage the cluster more easily, I created a fourth VM which serves as my jumpbox. This VM hosts management tools like kubectl
and helm
, and makes it easier to deploy applications to the cluster.
jump
→10.0.0.8
On the jumpbox, I generated SSH keys and used ssh-copy-id
to push them to each of the cluster nodes. This lets me SSH into each node without entering a password, which is great for automation and management.
Summary
At this point, the foundation is ready:
- Ubuntu VM template built and customized
- Three Kubernetes nodes cloned and IP’d
- A jumpbox in place with management tooling
In the next post, we’ll install k3s on all nodes and configure MetalLB for LoadBalancer IPs.