Skip to main content

Talos production cluster

The production cluster is the primary Kubernetes cluster of the homelab. It runs the bulk of workloads: media (Jellyfin, Immich, Tube Archivist), productivity (Nextcloud, Outline, Paperless), DevOps (Gitea, n8n, Keycloak), and observability.

This page is a top-down overview that links into every layer.

Stack​

Versions​

ComponentVersionDeclared in
Talos Linuxv1.14.3talos/talos/topf.yaml
Kubernetesv1.37.1talos/talos/topf.yaml
Fluxv2.9.6k8s/clusters/talos/flux-system/gotk-components.yaml

These are the versions declared in Git. Flux updates itself as soon as its manifests merge; a Talos or Kubernetes bump only reaches the nodes with the next topf upgrade.

Layers at a glance​

LayerWhatDoc
HardwareIntel NUC × 4 — three NUC 13 Pro (i5-1340P, 64 GB RAM, 2 TB NVMe) and one NUC 14 (Core Ultra)hardware/talos
HypervisorProxmox VE (4-node cluster proxmox1–4); 3 control-plane VMs + 4 worker VMs + 4 NetBird LXCs, all VMs SecureBoot (OVMF + vTPM)foundation/proxmox
Cluster OSTalos Linux, configured by topffoundation/talos
GitOpsFlux pulling from Gitea, decrypting secrets via SOPSfoundation/flux
NetworkCilium (kube-proxy replacement, WireGuard, L2 announcements)platform/cilium
StorageLonghorn (cluster-native block) + NFS to TrueNAS (bulk media)platform/longhorn · hardware/nas
IngressEnvoy Gateway with PROXY-protocol-v2 from the edge clusterplatform/envoy-gateway · topics/envoy-gateway-proxy-protocol-v2
SecretsExternal Secrets + SOPSplatform/external-secrets · operations/sops
Backupsk8up Schedule → Restic → Hetzner S3 (warm) → Synology NAS (hot) → encrypted WD drives (cold)operations/

Cluster machines​

RoleNameHostNotes
Control planetalos-cp-01proxmox1etcd member
Control planetalos-cp-02proxmox2etcd member
Control planetalos-cp-04proxmox4etcd member; pinned to the NUC 14's E-cores
Workertalos-worker-01proxmox1extra NICs into VLAN 104+105, GPU passthrough
Workertalos-worker-02proxmox2extra NICs into VLAN 104+105, GPU passthrough
Workertalos-worker-03proxmox3extra NICs into VLAN 104+105, GPU passthrough; the host keeps CPUs 0–3 free as the control-plane failover slot
Workertalos-worker-04proxmox4extra NICs into VLAN 104+105, 12 cores, no GPU passthrough today (gpu: false in talos.tf)

Networking summary​

PlaneWhat
Pod CIDR10.100.0.0/16
Service CIDRdefault (10.96.0.0/12)
Node mgmtVLAN 100 (192.168.100.0/24) — control planes + workers
StorageVLAN 104 (192.168.104.0/24) — workers only, for NFS to TrueNAS
PublicVLAN 105 (192.168.105.0/24) — workers only, for ingress
Inter-siteNetBird mesh — production network exposes those VLANs to peers

Full network map: Fabric overview · NetBird · UniFi.

What runs here​

  • All persistent apps with stateful PVCs (Longhorn-backed).
  • Anything GPU-accelerated — the worker nodes carry the Intel iGPU passthrough.
  • The control plane for Flux's primary GitRepository and the SOPS keys.

The edge cluster handles only public-facing ingress + sidecar workloads; everything stateful lives here.

Reconciliation order​

Flux applies the cluster as a set of Kustomizations from k8s/clusters/talos/. Most of the platform has no ordering at all; what is ordered funnels through infra-configs, the gate every app waits for.

18 platform Kustomizations and 55 apps. An arrow means "has to be ready before"; the 12 entries without an incoming arrow start as soon as Flux is running.

Lifecycle commands​

# Render for review, diff against the live nodes, apply (from talos/talos)
topf render
topf apply --dry-run
topf apply

# Upgrade
topf upgrade

# Build or replace a node: the VM boots the nocloud image (maintenance mode),
# the config joins it, and only the upgrade installs the metal image it is
# meant to run — never skip the last step (see Talos › Bootstrap flow)
topf apply --nodes-filter '^<host>$'
topf upgrade --nodes-filter '^<host>$'

# Reconcile Flux
flux reconcile kustomization flux-system

# Inspect
kubectl get nodes -o wide
kubectl get pods -A | grep -v Running | grep -v Completed
flux get all -A

See also​