A simplified setup for deploying Talos Linux clusters using PXE boot and Terraform.
This repository provides an automated way to:
- Boot Talos machines via PXE using siderolabs/booter
- Bootstrap a Talos cluster with Terraform
- Deploy Cilium CNI with Terraform
- Docker
- Terraform
- Machines with UEFI PXE boot enabled on the same subnet
- Recommended boot order: disk first, then network
Run the booter container on the host network to enable PXE booting:
docker run --rm --network host \
ghcr.io/siderolabs/booter:v0.3.0 \
--talos-version=v1.12.1 \
--schematic-id=a28d86375cf9debe952efbcbe8e2886cf0a174b1f4dd733512600a40334977d7Power on your machines with PXE boot enabled. They will automatically boot Talos from the network.
Navigate to the bootstrap directory and apply the Terraform configuration:
cd bootstrap
terraform init
terraform applyAfter the cluster is bootstrapped, export the configuration files:
terraform output -raw kubeconfig > kubeconfig
terraform output -raw talosconfig > talosconfigSet the KUBECONFIG environment variable:
export KUBECONFIG=$(pwd)/kubeconfigNavigate to the CNI directory and deploy Cilium:
cd ../cni
terraform init
terraform apply.
├── bootstrap/ # Talos cluster bootstrap with Terraform
│ ├── files/
│ │ └── cp-scheduling.yaml
│ ├── templates/
│ │ └── install-disk-and-hostname.yaml.tmpl
│ ├── talos-main.tf
│ ├── variables.tf
│ ├── outputs.tf
│ └── versions.tf
├── cni/ # CNI deployment
│ └── cilium.tf
└── pxe.md # PXE boot instructions
The bootstrap configuration includes:
- Control plane scheduling configuration
- Install disk and hostname templating
- Talos cluster initialization
Currently configured to deploy Cilium as the Container Network Interface.
- Modify
--talos-versionto use a different Talos version - Update
--schematic-idfor custom Talos system extensions - Adjust Terraform variables in
bootstrap/variables.tf