In this guide we will create a Kubernetes cluster using Proxmox.
To see a live demo of this writeup, visit Youtube here:
How to Get Proxmox
It is assumed that you have already installed Proxmox onto the server you wish to create Talos VMs on. Visit the Proxmox downloads page if necessary.
You can download
curl https://github.com/talos-systems/talos/releases/download/<version>/talosctl-<platform>-<arch> -L -o talosctl
For example version
curl https://github.com/talos-systems/talos/releases/download/v0.7.0/talosctl-linux-amd64 -L -o talosctl sudo cp talosctl /usr/local/bin sudo chmod +x /usr/local/bin/talosctl
Download ISO Image
In order to install Talos in Proxmox, you will need the ISO image from the Talos release page.
You can download
mkdir -p _out/ curl https://github.com/talos-systems/talos/releases/download/<version>/talos-<arch>.iso -L -o _out/talos-<arch>.iso
For example version
mkdir -p _out/ curl https://github.com/talos-systems/talos/releases/download/v0.7.0/talos-amd64.iso -L -o _out/talos-amd64.iso
From the Proxmox UI, select the "local" storage and enter the "Content" section. Click the "Upload" button:
Select the ISO you downloaded previously, then hit "Upload"
Start by creating a new VM by clicking the "Create VM" button in the Proxmox UI:
Fill out a name for the new VM:
In the OS tab, select the ISO we uploaded earlier:
Keep the defaults set in the "System" tab.
Keep the defaults in the "Hard Disk" tab as well, only changing the size if desired.
In the "CPU" section, give at least 2 cores to the VM:
Verify that the RAM is set to at least 2GB:
Keep the default values for networking, verifying that the VM is set to come up on the bridge interface:
Finish creating the VM by clicking through the "Confirm" tab and then "Finish".
Repeat this process for a second VM to use as a worker node. You can also repeat this for additional nodes desired.
Start Control Plane Node
Once the VMs have been created and updated, start the VM that will be the first control plane node.
This VM will boot the ISO image specified earlier and enter "maintenance mode".
Once the machine has entered maintenance mode, there will be a console log that details the IP address that the node received.
Take note of this IP address, which will be referred to as
$CONTROL_PLANE_IP for the rest of this guide.
If you wish to export this IP as a bash variable, simply issue a command like
Generate Machine Configurations
With the IP address above, you can now generate the machine configurations to use for installing Talos and Kubernetes. Issue the following command, updating the output directory, cluster name, and control plane IP as you see fit:
talosctl gen config talos-vbox-cluster https://$CONTROL_PLANE_IP:6443 --output-dir _out
This will create several files in the _out directory: init.yaml, controlplane.yaml, join.yaml, and talosconfig.
Create Control Plane Node
init.yaml generated above, you can now apply this config using talosctl.
talosctl apply-config --insecure --nodes $CONTROL_PLANE_IP --file _out/init.yaml
You should now see some action in the Proxmox console for this VM. Talos will be installed to disk, the VM will reboot, and then Talos will configure the Kubernetes control plane on this VM.
Note: This process can be repeated multiple times to create an HA control plane. Simply apply
init.yamlfor subsequent nodes.
Create Worker Node
Create at least a single worker node using a process similar to the control plane creation above.
Start the worker node VM and wait for it to enter "maintenance mode".
Take note of the worker node's IP address, which will be referred to as
talosctl apply-config --insecure --nodes $WORKER_IP --file _out/join.yaml
Note: This process can be repeated multiple times to add additional workers.
Using the Cluster
Once the cluster is available, you can make use of
kubectl to interact with the cluster.
For example, to view current running containers, run
talosctl containers for a list of containers in the
system namespace, or
talosctl containers -k for the
To view the logs of a container, use
talosctl logs <container> or
talosctl logs -k <container>.
First, configure talosctl to talk to your control plane node by issuing the following, updating paths and IPs as necessary:
export TALOSCONFIG="_out/talosconfig" talosctl config endpoint $CONTROL_PLANE_IP talosctl config node $CONTROL_PLANE_IP
Retrieve and Configure the
Fetch the kubeconfig file from the control plane node by issuing:
You can then use kubectl in this fashion:
kubectl get nodes
To cleanup, simply stop and delete the virtual machines from the Proxmox UI.