How to add baremetal servers to your cluster
This guide provides the information you need to add your baremetal machines to your cluster. If you haven't set up a cluster yet, start with creating clusters first. If you run into issues during this process, refer to troubleshooting bare metal servers .
Note
Autopilot only manages the installation of necessary software on bare metal machines and the adding/removing of machines from the cluster. Autopilot does NOT buy nor sell the servers.
Define the HetznerBareMetalHost#
Create a baremetalhosts.yaml file, following the example below:
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind: HetznerBareMetalHost
metadata:
name: baremetal-1
spec:
description: My first baremetal machine
serverID: 1234567
rootDeviceHints:
wwn: eui.726163646f6d2d2d
maintenanceMode: false
---
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind: HetznerBareMetalHost
metadata:
name: baremetal-2
spec:
description: My second baremetal machine
serverID: 7654321
rootDeviceHints:
wwn: eui.737472696e677349cd
maintenanceMode: false
And apply it to your management cluster.
Warning
If the baremetal machines were previously configured to use RAID, you must follow the steps in Wiping baremetal server disks before adding them to your cluster. If you have already added them to your cluster, you will need to remove and reapply the HetznerBareMetalHosts after wiping the disk.
By default, newly purchased machines come with RAID enabled. If you are unsure whether you need RAID or not, we recommend that you disable it.
If you don't have the wwn of your disk, you can find it by running the following command on the bare metal machine:
$ lsblk -o name,WWN
As an alternative, you can omit the rootDeviceHints field from the definition. When you do this, the HetznerBareMetalHost resource will show an error, and you can copy the WWN from the Status -> Hardware Details -> Storage section shown when running kubectl describe HetznerBareMetalHost <name>. Or get it using yq:
$ kubectl get hbmh <name> -o yaml | yq .spec.status.hardwareDetails.storage
Use your hosts in the cluster#
Edit your Cluster resource in the management cluster (or cluster.yaml in your GitOps repository), adding the snippet below to spec.topology.workers.machineDeployments:
- class: workeramd64baremetal
name: md-1
replicas: 2
Now, your cluster will request two machines from the baremetal class. Since you have exactly two hosts, all of them will be used. If you want to prioritize specific machines for addition, you can use labels and selectors:
Add a label to your machine:
apiVersion: infrastructure.cluster.x-k8s.io/v1beta1
kind: HetznerBareMetalHost
metadata:
name: baremetal-1
labels:
environment: production
spec:
description: My first baremetal machine
serverID: 1234567
rootDeviceHints:
wwn: eui.726163646f6d2d2d
maintenanceMode: false
And use matchLabels to select it in your Cluster resource, under spec.topology.workers:
- class: workeramd64baremetal
name: md-2
replicas: 1
variables:
overrides:
- name: workerHostSelectorBareMetal
value:
matchLabels:
environment: production
It is recommended to always use matchLabels in your cluster's machine deployments. If you don't set any matchLabels, this means any HetznerBareMetalMachine available can get selected to the cluster, even those which have labels.
Adding HCloud servers
Efficiently manage Hetzner HCloud servers. Choose the server types according to their individual specifications based on your requirements, such as resource-efficient ARM technology.
How to Run GPU workloads
Run Nvidia GPU workloads in Kubernetes using Syself Autopilot and Hetzner bare metal servers. Deploy AI, ML, inference, and accelerated compute workloads.