Talos Linux can be deployed on bare metal servers using several boot methods. This guide covers PXE boot, ISO, and USB installation.
Boot Methods
Talos supports three primary boot methods for bare metal:
- PXE Boot - Network boot for automated deployments
- ISO Boot - Boot from ISO image (CD/DVD or virtual media)
- USB Boot - Boot from USB drive
Prerequisites
- Physical server with:
- x86-64 (amd64) or ARM64 (arm64) CPU
- Minimum 2GB RAM (4GB+ recommended)
- At least 10GB disk space
- Network connectivity
- Talos Linux boot media (ISO, USB, or PXE server)
Method 1: ISO Installation
Download ISO
Download the latest Talos ISO:
curl -LO https://github.com/siderolabs/talos/releases/latest/download/metal-amd64.iso
# For ARM64:
curl -LO https://github.com/siderolabs/talos/releases/latest/download/metal-arm64.iso
Boot from ISO
Prepare Boot Media
Burn the ISO to a CD/DVD or configure your BMC/IPMI for virtual media mount.
Boot the Server
Boot the server from the ISO. The system will load into Talos maintenance mode.
Generate Configuration
Generate machine configuration:talosctl gen config my-cluster https://controlplane.example.com:6443
This creates:
controlplane.yaml - Control plane node configuration
worker.yaml - Worker node configuration
talosconfig - CLI configuration
Apply Configuration
Apply configuration to the node:talosctl apply-config --insecure \
--nodes 192.168.1.10 \
--file controlplane.yaml
Install to Disk
The system will automatically install to disk and reboot.
ISO with Embedded Configuration
You can create an ISO with embedded configuration:
# Create ISO with embedded config
docker run --rm -i \
-v $PWD/_out:/out \
-v $PWD/controlplane.yaml:/controlplane.yaml:ro \
ghcr.io/siderolabs/imager:latest \
iso --arch amd64 --config /controlplane.yaml
The ISO will read configuration from the metal:iso label:
# Referenced in kernel params as:
talos.config=metal:iso
Method 2: USB Installation
Create Bootable USB
Write the ISO to a USB drive:
# On Linux/macOS (replace /dev/sdX with your USB device)
sudo dd if=metal-amd64.iso of=/dev/sdX bs=4M status=progress
sudo sync
# On Windows (using Rufus or similar tool)
# Or use dd for Windows
The dd command will erase all data on the target device. Verify the device path carefully.
Boot from USB
Follow the same steps as ISO installation after booting from USB.
Method 3: PXE Boot
PXE boot enables network-based installation for large-scale deployments.
PXE Server Setup
Download PXE Assets
Download kernel and initramfs:mkdir -p /var/lib/tftpboot/talos
cd /var/lib/tftpboot/talos
# Download kernel
curl -LO https://github.com/siderolabs/talos/releases/latest/download/vmlinuz-amd64
# Download initramfs
curl -LO https://github.com/siderolabs/talos/releases/latest/download/initramfs-amd64.xz
Configure DHCP
Configure your DHCP server to provide PXE boot options:# dnsmasq example
dhcp-boot=pxelinux.0
enable-tftp
tftp-root=/var/lib/tftpboot
Configure PXE Boot Menu
Create PXE boot configuration:/var/lib/tftpboot/pxelinux.cfg/default
DEFAULT talos
LABEL talos
KERNEL talos/vmlinuz-amd64
INITRD talos/initramfs-amd64.xz
APPEND talos.platform=metal talos.config=http://192.168.1.1:8080/config.yaml
Host Configuration
Set up HTTP server to host machine configs:# Serve configs on port 8080
python3 -m http.server 8080
Boot Nodes
Configure servers to boot via PXE (network boot) in BIOS/UEFI.
PXE Configuration Server
For dynamic configuration, use URL templating:
# Boot with UUID-based config URL
talos.config=http://config-server:8080/config?uuid=${uuid}&mac=${mac}
The Talos provisioner includes built-in DHCP and TFTP servers:
// From pkg/provision/providers/vm/dhcpd.go
// Automatic DHCP server for PXE boot
type DHCPd struct {
Listener *net.UDPConn
TFTPServer string
IPXEBootFilename string
}
Console Configuration
Bare metal uses different consoles based on architecture:
machine:
install:
extraKernelArgs:
- console=ttyS0 # Serial console
- console=tty0 # VGA console
Disk Configuration
Specify installation disk:
machine:
install:
disk: /dev/sda
image: ghcr.io/siderolabs/installer:latest
wipe: false
Network Configuration
Configure static networking:
machine:
network:
hostname: node1
interfaces:
- interface: eth0
addresses:
- 192.168.1.10/24
routes:
- network: 0.0.0.0/0
gateway: 192.168.1.1
nameservers:
- 8.8.8.8
- 1.1.1.1
Post-Installation
After installation completes:
Bootstrap Kubernetes
On the first control plane node:
talosctl bootstrap --nodes 192.168.1.10
Retrieve kubeconfig
talosctl kubeconfig --nodes 192.168.1.10
Verify Cluster
Advanced Options
UEFI Boot
For UEFI systems, use UEFI-compatible boot:
# UEFI PXE boot uses grub.cfg instead of pxelinux
Secure Boot
Talos supports UEFI Secure Boot with signed kernels.
Custom Image
Build custom installer images with additional drivers:
docker run --rm -i \
-v /dev:/dev --privileged \
ghcr.io/siderolabs/imager:latest \
iso --arch amd64 \
--system-extension-image ghcr.io/siderolabs/amd-ucode:latest
Troubleshooting
Boot Issues
- Verify BIOS/UEFI boot order
- Check serial console connection
- Review kernel parameters
Network Issues
- Verify network cable connection
- Check DHCP server logs
- Test PXE server connectivity
Installation Failures
- Check disk availability:
talosctl disks --insecure --nodes <ip>
- Review logs:
talosctl logs --insecure --nodes <ip>
- Verify configuration:
talosctl validate --config controlplane.yaml
Next Steps
Configuration
Learn about machine configuration
Networking
Configure advanced networking