Skip to content

Configuration

A cluster directory holds two files that taloscluster reads together. cluster.yaml describes the desired state and is safe to commit. secrets.yaml holds credentials and is gitignored. taloscluster init [--openstack|--proxmox] NAME scaffolds both, and the core loader validates required fields and supported values. A top-level key neither core nor an installed plugin owns is refused — a misspelled or unsupported section is caught instead of silently ignored. A miscapped or unsupported key inside a fixed-schema section is refused too, including in nested fixed-schema blocks such as proxmox.networktalos.extensons, network.dnss, openstack.regoin or proxmox.network.clustr no longer load quietly (a typo like openstack.regoin used to silently fall back to the RegionOne default). Freeform maps are left open: cluster and pool tags are arbitrary label maps, security host labels are free-form, and config_patches hold arbitrary YAML. Sections owned by an installed plugin (e.g. argocd, rancher) are retained as valid; each plugin's validate hook runs in converge's validate phase for every installed plugin before any mutation, so a malformed or contradictory plugin section is refused up front instead of being checked only when the plugin's hooks run later.

All example addresses and hostnames in these pages are placeholders (RFC 5737 documentation ranges and example.edu).

cluster.yaml

Key Required What it is Details
name yes Cluster name, prefix of every hostname General
tags no Extra Kubernetes node labels for every node General
talos yes Talos version, extra extensions, machine-config patches General
kubernetes yes Kubernetes version General
controlplane yes Control plane pool: count and sizing Pools
workers no Worker pools by name: count, sizing, extensions, tags Pools
openstack one of OpenStack endpoint, availability zone, external network, optional region OpenStack
proxmox one of Proxmox endpoint, storages, placement, networks Proxmox
network yes Private CIDR, DNS and NTP servers Network
security no Named ingress allowlists per port Security
tailscale no Opt into the tailscale extension, login server Tailscale
rancher no Rancher plugin: members to grant access Rancher
argocd no ArgoCD plugin: project roles, repositories, per-app settings ArgoCD

Exactly one of openstack or proxmox must be present. It selects the backend and decides which pool sizing keys are required.

Minimal Proxmox example:

name: mycluster

talos:
  version: v1.13.8
kubernetes:
  version: v1.36.1

controlplane:
  count: 3
  cores: 4
  memory: 8
  disk: 40

workers:
  worker:
    count: 3
    cores: 8
    memory: 16
    disk: 100

proxmox:
  url: https://pve.example.edu:8006
  storage: local-lvm
  iso_storage: local
  network:
    cluster:
      bridge: vmbr0
      kubeapi_vip: 10.0.0.10

network:
  cidr: 10.0.0.0/24
  dns: [192.0.2.53]
  ntp: [ntp.example.edu]

security:
  kubernetes:
    office vpn: 198.51.100.0/24
  talos:
    office vpn: 198.51.100.0/24

secrets.yaml

Never commit this file. taloscluster init writes it with mode 0600 and adds it to .gitignore. The provider block must match the provider chosen in cluster.yaml, and the other provider's block may not be present. Each credential value must be a real, non-empty string: a null, non-string, or still-scaffolded CHANGE-ME placeholder is refused at secrets load time (see init and the provider/Tailscale pages) instead of failing later as an opaque 401.

Key Required What it is Details
openstack on OpenStack Application credential id and secret OpenStack
proxmox on Proxmox API token id and secret Proxmox
tailscale no Pre-auth key nodes register with Tailscale
rancher no Rancher server URL and token Rancher
argocd no How to reach the ArgoCD cluster ArgoCD
proxmox:
  token_id: "taloscluster@pve!provider"
  token_secret: "CHANGE-ME"

tailscale:
  auth_key: "CHANGE-ME"

Other files in the directory

talossecrets.yaml is the cluster's cryptographic identity, generated on the first converge and gitignored. It cannot be regenerated for a running cluster, so back it up out of band. talosconfig is derived from it and refreshed by converge. kubeconfig is fetched during bootstrap or an API endpoint move and is otherwise retained. Keep both client files with the cluster directory, especially when moving the API endpoint.