Skip to main content

Upload image

Hetzner Cloud provides Talos as a Public ISO with the schematic id ce4c980550dd2ab1b17bbf2b08801c7eb59418eafe8f279833297925d67c7515 (Hetzner + qemu-guest-agent) since 2025-04-23. Minor updates of the ISO will be provided by Hetzner Cloud on a best effort basis.If you need an ISO with a different schematic id, please email the support team to get a Talos ISO uploaded by following issues:3599 or you can prepare the image snapshot by yourself.
There are three options to upload your own:
  1. Run an instance in rescue mode and replace the system OS with the Talos image
  2. Use Hashicorp Packer to prepare an image
  3. Use special utility hcloud-upload-image

Rescue mode

Create a new Server in the Hetzner console. Enable the Hetzner Rescue System for this server and reboot. Upon a reboot, the server will boot a special minimal Linux distribution designed for repair and reinstall. Once running, login to the server using ssh to prepare the system disk by doing the following: To make sure disk content is consistent, it is recommended to shut the server down before taking an image (snapshot). Once shut down, simply create an image (snapshot) from the console. You can now use this snapshot to run Talos on the cloud.

Packer

Install packer to the local machine. Create a config file for packer to use: Additionally, you could create a file containing
and build the snapshot for arm64. Create a new image by issuing the commands shown below. Note that to create a new API token for your Project, switch into the Hetzner Cloud Console, choose a Project, go to Access → Security, and create a new token.
After doing this, you can find the snapshot in the console interface.

hcloud-upload-image

Install hcloud-upload-image as described in its repository. You can either download the binary, build it from source or use the Docker container. For process simplification you can use this bash script: After these actions, you can find the snapshot in the console interface.

Creating a cluster via the CLI

This section assumes you have the hcloud console utility on your local machine.

Create a load balancer

Create a load balancer by issuing the commands shown below. Save the IP/DNS name, as this info will be used in the next step.

Create the machine configuration files

Generating base configurations

Using the IP/DNS name of the load balancer created earlier, generate the base configuration files for the Talos machines by issuing:
Generating the config without examples and docs is necessary because otherwise you can easily exceed the 32 kb limit on uploadable userdata (see issue 8805). At this point, you can modify the generated configs to your liking. Optionally, you can specify machine configuration patches which will be applied during the config generation.

Validate the configuration files

Validate any edited machine configs with:

Create the servers

We can now create our servers. Note that you can find IMAGE_ID in the snapshot section of the console: https://console.hetzner.cloud/projects/$PROJECT_ID/servers/snapshots.

Create the control plane nodes

Create the control plane nodes with:

Create the worker nodes

Create the worker nodes with the following command, repeating (and incrementing the name counter) as many times as desired.

Bootstrap etcd

To configure talosctl we will need the first control plane node’s IP. This can be found by issuing:
Set the endpoints and nodes for your talosconfig with:
Bootstrap etcd on the first control plane node with:
After a successful bootstrap, you should see that all the members have joined:

Retrieve the kubeconfig

At this point we can retrieve the admin kubeconfig by running:

Install Hetzner’s Cloud Controller Manager

First of all, we need to patch the Talos machine configuration used by each node: Then run the following command:
With that in place, we can now follow the official instructions, ignoring the kubeadm related steps.