Proxmox
Proxmox Virtual Environment (PVE) is an open-source server virtualization platform based on Debian Linux. It integrates KVM (Kernel-based Virtual Machine) for full virtualization and LXC (Linux Containers) for containerization. Proxmox VE offers a web-based interface to manage virtual machines (VMs), containers, storage, and networking.
The use Proxmox VE in my homelab was initially to learn about virtualization, clustering, and high-availability configurations in a practical setting. Currently is my backbone of my infrastructure where all my VMs and services are hosted.
Cluster and configuration overview#
My PVE cluster consists of 4 nodes with 64GB of RAM to accomodate a large amount of VMs.
All nodes have at least 2 network interfaces to allow live migration of the PfSense router VM which provides internet connection and security to my whole home.
The nodes are configured as a cluster using the 10Gb NIC to allow for faster live migrations of VMs.
Some of my most critical VMs are configured with HA to allow them to automatically migrate in the rare case that the node that was hosting it goes down. Given that for cost and performance reasons the nodes do not have a shared storage solution (such as Ceph) for storing the virtual disks the way I handle the HA is leveragin ZFS replication, which periodically replicates the data to the other nodes.
This has the downside that in the case of node failure the RPO will be higher than with shared storage.
VMs#
I'm running a variety of virtual machines (VMs) on my Proxmox server, each serving a different purpose.
Let's take a look at what's running:
- Docker: This VM is essential for running containerized applications. Many of my services are running here and I'm currently migrating most to the Kubernetes cluster.
- pfSense: This VM uses pfSense acts as my firewall and router, keeping my network secure, providing network address translation (NAT) and many networking services.
- HASS: This VM runs Home Assistant, my home automation system. It controls everything from my lights and thermostat to by blinds, security camera and rack ventilation system.
- kasm: Kasm is a workspace streaming tool that allows to stream your workspace directly to your web browser on any device and from any location.
- Bitwarden: Hosts Bitwarden my password manager, keeping all my sensitive login information safe and secure.
- VSCodeServer: Provides a remote development environment, where I connect via ssh either from a terminal or from VSCode. This allows me to not depend on the workstation and can have the same environment either on my main pc, my laptop or even my phone.
- TrueNAS: Runs TrueNas is my NAS (Network Attached Storage) backed by the ZFS filesystem, providing me with a centralized location for storing all my files and the capabilities to backup and share the data with other devices.
- Monitoring: This VM runs various monitoring tools such as InfluxDB, Graylog and Grafana, keeping an eye on my server's health and performance.
- k3s-master(1-3): 3 VMs perform the duties of the master nodes for my Kubernetes cluster running the k3s distribution configured with High Availability.
- k3s-node(0-3): These 4 VMs are the worker nodes for my Kubernetes cluster, providing the resources needed to run my applications.
- k3s-storage(1-3): These 3 VMs provide persistent storage for my Kubernetes cluster, using Longhorn a Cloud native distributed block storage for Kubernetes ensuring that my data is safe and highly available.
- jellyfin: This LXC container is where my media server lies, allowing me to stream movies, TV shows, and music to all my devices. The media files are hosted on Truenas and accessed via NFS. Additionally it has access to the iGPU on the host machine to have hardware transcoding for streaming the video files.
As you can see, my homelab is a busy place! I'm constantly adding new VMs and experimenting with different technologies. It's a great way to learn and explore, and it's also incredibly useful for managing my home network and automating my home.