Skip to main content

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 first. If you run into issues during this process, refer to .

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:

baremetalhosts.yamlyaml
		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 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:

yaml
		- 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:

baremetalhost.yamlyaml
		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:

yaml
		- 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.