The Shift Toward Immutable Infrastructure
Most Kubernetes admins spend way too much time “babysitting” their servers. The traditional routine is predictable: you install Ubuntu, harden SSH, set up Containerd, and finally run kubeadm. But over six months, those nodes drift. One worker ends up with a different kernel patch, another has a stray log file eating 5GB of disk space, and security updates become a manual game of whack-a-mole.
Talos Linux takes a completely different path. It is an immutable, ephemeral, and hardened operating system designed from the ground up just for Kubernetes. There is no SSH, no bash shell, and no apt-get. Instead, you manage the OS exactly like you manage your pods: through a versioned API and YAML files. Transitioning to this model forces you to treat infrastructure as pure code, effectively killing the “snowflake server” problem for good.
Pairing Talos with Proxmox is the ultimate power move for a HomeLab. You get enterprise-grade virtualization combined with a modern, hands-off management style that mirrors production-grade clouds.
Setting Up the Foundation on Proxmox
We need to prep the virtual environment before diving into the code. For a stable, highly available cluster, aim for one control plane node and two worker nodes. If your hardware is modest—say, a single Intel NUC—a single-node control plane is perfectly fine for testing.
1. Download the Talos Image
Grab the ISO from the Talos Linux releases page. The standard talos-amd64.iso is incredibly lightweight—usually under 100MB. Upload this to your Proxmox ISO storage immediately.
2. Create the Virtual Machines
When provisioning your VMs, use these specific settings to keep things snappy:
- CPU: Select the ‘Host’ type. This allows the VM to use AES-NI instructions, which speeds up Kubernetes encryption. Give the control plane 2 cores and workers at least 2.
- Memory: While 2GB works, 4GB is the sweet spot for handling system overhead without swapping.
- Network: Stick with the
VirtIObridge. It’s the fastest path for Proxmox networking. - Disk: 20GB is plenty. Since the OS is tiny, almost all of that space goes toward your actual container images.
- Machine Type: Use
q35for better support of modern Linux features.
Once the VMs are ready, mount the ISO and set the boot order. I highly recommend mapping your MAC addresses to static IPs in your router. Talos is an API-driven system, so it needs to know exactly where its neighbors live.
Configuring the Cluster via API
Without SSH, we use talosctl on our local workstation to talk to the nodes. This tool handles everything from initial disk wipes to kernel upgrades.
1. Install talosctl
Installing the CLI is quick. On macOS or Linux via Homebrew:
brew install talosctl
Windows users can grab the binary directly from GitHub and add it to their Path.
2. Generate the Cluster Configuration
Define your cluster name and identify the IP of your first control plane node (for example, 192.168.1.50).
talosctl gen config my-home-cluster https://192.168.1.50:6443
This command creates four essential files:
controlplane.yaml: The master node configuration.worker.yaml: Settings for your compute nodes.talosconfig: Your local client credentials.secrets.yaml: The keys used to encrypt cluster communication.
3. Apply the Configuration
Fire up your Proxmox VMs. They will sit in “Maintenance Mode” waiting for instructions. Now, push the configuration from your laptop to the nodes:
# Configure the master node
talosctl apply-config --insecure --nodes 192.168.1.50 --file controlplane.yaml
# Configure the workers
talosctl apply-config --insecure --nodes 192.168.1.51 --file worker.yaml
talosctl apply-config --insecure --nodes 192.168.1.52 --file worker.yaml
The --insecure flag is only used once. It allows talosctl to establish the initial trust before the TLS certificates are generated. After this command, the nodes will reboot, wipe their local disks, and install the OS in about 15 seconds.
4. Bootstrapping the Cluster
At this point, the OS is running but the Kubernetes control plane isn’t active. You need to trigger the initial setup. Point your local environment to the new config first:
export TALOSCONFIG=$(pwd)/talosconfig
talosctl config endpoint 192.168.1.50
talosctl config node 192.168.1.50
talosctl bootstrap
This kicks off the etcd formation. Give it about 2 to 3 minutes to pull the necessary container images and initialize the database.
Verification and Monitoring
With the cluster coming online, we need to verify its health. Since we can’t ssh and run htop, we use the Talos API for visibility.
1. Get the Kubeconfig
Forget manually copying files from /etc/kubernetes. Talos generates your kubeconfig via the API:
talosctl kubeconfig ./kubeconfig
export KUBECONFIG=$(pwd)/kubeconfig
2. Check Node Status
Verify that Kubernetes sees your new hardware:
kubectl get nodes
Don’t panic if they show NotReady. Talos doesn’t include a CNI (Container Network Interface) by default. For a modern HomeLab, I recommend installing Cilium; it’s faster and provides much better networking insights than older options like Flannel.
3. Monitoring Health with the Dashboard
To see what’s happening under the hood, use the built-in dashboard:
talosctl dashboard
This opens a terminal UI showing real-time CPU usage, memory pressure, and the health of internal services. Need to see why a service is failing? Stream the logs directly:
talosctl logs controller-runtime
Final Thoughts
Switching to Talos on Proxmox transforms your workflow from managing individual servers to managing a unified platform. If a node starts behaving strangely, you don’t spend an hour debugging logs—you just reset it. This “cattle, not pets” philosophy is the gold standard for production reliability.
You now have a secure, minimal cluster that is easy to upgrade and impossible to break through manual configuration drift. Your next move? Deploy an application and look into Longhorn for easy-to-manage persistent storage.

