Skip to main content

Cluster and node

These files define your cluster's topology and hardware configuration. They serve as a source-of-truth for:

How It Works​

Volumes and Disks​

Each hardware type defines volumes that will be created on the node. Volumes are logical groupings of storage, each mapped to a block device.

Two volumes should be configured on every node:

  • SYSTEM - Where Talos OS boots from.
  • EPHEMERAL - Temporary storage for Talos operations.

Additional volumes can be defined for application storage requirements (e.g., persistent storage via container storage interface). Multiple volumes can share the same device, effectively partitioning that device across different uses.

Image Configuration and Schematics​

Talos Image Factory and Schematics

Images are generated via the Talos image factory using schematics. Schematics allow you to customize the base Talos OS image with system extensions, boot parameters, and hardware-specific overlays.

Define schematics in your hardware configuration, then use homelab generate-talos-images [version] to generate install media URLs and container images from the factory. You can then reference these container images in the image field.

Just Getting Started?

The image field is required during schema validation, but you may not know its value yet. Start with image: "" and populate it after running homelab generate-talos-images ....

Schematic customizations include:

  • System extensions - Additional kernel modules or tools (e.g., siderolabs/drbd for distributed block storage)
  • Overlays - Hardware-specific configurations (e.g., Raspberry Pi boot parameters, GPU memory allocation)

Base Talos Configuration​

Configuration Merging

The homelab CLI dynamically creates Talos machine configuration by performing merges on several 'layers' of configuration (default configuration → base talos config → node configuration).

Base Talos configuration expresses settings that apply to all nodes, such as:

  • CNI configuration (e.g., cluster.network.cni.name)
  • Kernel module parameters
  • Kubelet mounts and features
  • Proxy settings

Node-specific settings override cluster-wide settings during generation.

Node Enabling and Disabling​

When enabled: false, a node is excluded from any homelab activity that relies upon a node list.

This is useful for temporarily taking nodes offline without removing their configuration.

Example Configuration​

Cluster Configuration (config/cluster.yaml)​

This example shows a minimal cluster configuration with a single hardware type and an assortment of settings:

name: my-cluster
endpoint: cluster.com
kubernetes: 1.34.2

hardware:
one-hw-config:
image: ""
disks:
SYSTEM:
device: /dev/nvme0n1
EPHEMERAL:
device: /dev/nvme0n1
imageConfig:
filename: metal-amd64.iso
schematic:
customization:
systemExtensions:
officialExtensions:
- siderolabs/drbd

baseTalosConfig:
cluster:
network:
cni:
name: none

Node Configuration (config/node-*.yaml)​

Node files define individual nodes within the cluster:

# Control plane node
hostname: node-one.cluster.com
hardware: one-hw-config
role: controlplane

# Worker node
hostname: node-two.cluster.com
hardware: one-hw-config
role: worker

Schema​

Cluster Configuration​

File: config/cluster.yaml

FieldTypeRequiredDescription
namestring✓Cluster name identifier
endpointstring✓Kubernetes API endpoint (FQDN or IP with port, e.g., cluster.fiola.dev)
kubernetesstring✓Kubernetes version to deploy (e.g., 1.34.2)
baseTalosConfigobject✓Talos OS configuration applied cluster-wide (merged with generated node config)
hardwareobject✓Hardware type definitions by name (e.g., rb, tc)

Hardware Definition​

Location: config/cluster.yaml → hardware[name]

Each hardware type (e.g., rb, tc) defines storage volumes and image customization for that hardware:

FieldTypeRequiredDescription
imagestring✓Talos OS image URI (generated via image factory or direct image reference)
disksobject✓Volume definitions by name (e.g., SYSTEM, EPHEMERAL, linstor)
imageConfigobject✓Image factory configuration for generating customized Talos images
machineConfigobjectTalos machine configuration applied only to nodes of this hardware type (merged after base config, before per-node settings; e.g., hardware-specific kernel modules)

Disk/Volume Definition​

Location: config/cluster.yaml → hardware[name].disks[name]

Defines a volume and its storage device mapping:

FieldTypeRequiredDescription
devicestring✓Block device path (e.g., /dev/sda, /dev/nvme0n1, /dev/mmcblk0 for Raspberry Pi)
sizestringVolume size allocation (informational field for documentation, e.g., 200GiB, 1600GiB)

Image Configuration​

Location: config/cluster.yaml → hardware[name].imageConfig

Specifies how Talos images are generated via the image factory:

FieldTypeRequiredDescription
filenamestring✓Output filename for the generated image (e.g., metal-amd64.iso)
schematicobject✓Factory schematic for image customization (see Schematic Definition below)

Schematic Definition​

Location: config/cluster.yaml → hardware[name].imageConfig.schematic

Defines customizations applied to the Talos OS image:

FieldTypeRequiredDescription
customizationobjectCustomization options (system extensions, overlays, etc.)
overlayobjectHardware-specific overlay (e.g., SBC-specific boot parameters)

Customization Subfields​

FieldTypeRequiredDescription
systemExtensionsobjectOfficial Talos extensions to include in the image
systemExtensions.officialExtensionsarrayArray of extension names (e.g., siderolabs/drbd)

Overlay Subfields​

FieldTypeRequiredDescription
imagestring✓Overlay image reference (e.g., siderolabs/sbc-raspberrypi)
namestring✓Overlay name (e.g., rpi_generic)
optionsobject✓Overlay-specific options (e.g., Raspberry Pi configTxt boot parameters)

Node Configuration​

File: config/node-{name}.yaml

Defines an individual node's membership in the cluster:

FieldTypeRequiredDescription
hostnamestring✓Hostname for the node (FQDN or short name)
hardwarestring✓Hardware type reference (must match a key in config/cluster.yaml → hardware)
rolestring✓Node role: controlplane (control plane/etcd member) or worker (compute workload)
enabledbooleanWhether the node is enabled in cluster operations (default: true). Set to false to exclude from node listing and commands.