Add GPU nodes
Syself Autopilot runs NVIDIA GPU workloads on Hetzner bare-metal servers. The driver and everything a GPU pod needs are already on the node, so you never SSH in to install anything.
GPU-capable server types
GPUs are bare metal only. Order a Hetzner bare-metal server from the GEX line, or an auction server with a supported card. See Hetzner's GPU server matrix for the available models. There is no Hetzner Cloud GPU type.
Syself Autopilot enables GPU support only for cards on its allowlist:
- GeForce GTX 1080 and GTX 1080 Ti
- RTX 4000 SFF Ada and RTX 6000 Ada
- RTX PRO 6000 Blackwell (all three variants)
Any other NVIDIA card, including older or unlisted models, is treated as a plain display adapter and gets no GPU support.
Add a dedicated GPU pool
Register the GPU servers as bare-metal hosts and attach them as their own pool, following Add bare-metal servers . Give the pool a role label so you can steer workloads onto it:
- class: workeramd64baremetal
name: md-gpu
replicas: 2
metadata:
labels:
node-role.kubernetes.io/gpu: ""
variables:
overrides:
- name: workerHostSelectorBareMetal
value:
matchLabels:
hardware: gpu
Label the GPU hosts with hardware: gpu on their HetznerBareMetalHost objects, so workerHostSelectorBareMetal selects only them. See Add bare-metal servers for host labels.
Verify the device plugin and capacity
A node is a GPU node when Syself Autopilot labels it autopilot.syself.com/gpu=true, which it does only for cards on the supported allowlist. The NVIDIA device plugin is a managed cluster component that deploys only on these labelled nodes; it is the component that tells Kubernetes a node has GPUs, advertising the nvidia.com/gpu resource that pods request. No label means no device plugin and no schedulable GPU.
Confirm the node is recognized as a GPU node:
$ kubectl get nodes -L autopilot.syself.com/gpu
Then confirm the GPU is schedulable: the node should list nvidia.com/gpu under Capacity and Allocatable. For how to read those numbers, and what Allocatable: 0 means, see Run GPU workloads .
Important
A GPU node is not something you fix by hand; the sealed OS has no package manager. If a GPU node does not come up as GPU-capable and the logs do not explain it, reprovision the node. See GPU not scheduling .
Request a GPU from a workload
To schedule a pod onto a GPU, see Run GPU workloads . The nvidia.com/gpu request alone steers the pod to a GPU node. Add a nodeSelector for node-role.kubernetes.io/gpu: "" when you want the pod pinned to your dedicated pool rather than to any GPU node in the cluster. A request for nvidia.com/gpu: 2 or higher is rejected, so one GPU per container is the limit.
Keep other pods off the GPU nodes
The nodeSelector pulls GPU workloads onto the pool, but a label only attracts pods; it does not push others away. Syself Autopilot manages node labels through Cluster API and does not support node taints, so reserve GPU hardware structurally: keep the GPU servers in their own pool, and give every other workload its own pool to select with a nodeSelector, so nothing lands on the GPU nodes by accident. See Label nodes and assign roles .