Declarative Talos + ARC on Unraid with a dedicated tainted KVM worker pool for heavy runtime jobs.
- Unraid host: 1 physical machine with
/dev/kvm - Talos cluster: 1 control plane + 1 general worker + 3 KVM workers
- ARC: two runner classes
arc-runners-containerfor normal workflowsarc-runners-dindfor runtime-real workloads on KVM nodes
- KVM worker pool: tainted and autoscaled to zero when idle
terraform/libvirt: VM infrastructure definitionstalos/: Talos cluster node configk8s/arc/: ARC controller + dual scale set valuesk8s/kvm-pool-autoscaler/: in-cluster scaler that starts/stops KVM VMs over SSH.github/workflows/: workflow-dispatch operations over Tailscale
- Terraform apply is manual-first (local operator action via
mise/.env/TF_VAR_*). - CI focuses on cluster-side installs and updates (ARC + autoscaler).
- Private infra access from CI is done via Tailscale.
- Manually apply Terraform when infra changes are needed.
- Bootstrap Talos and obtain kubeconfig/talosconfig.
- Run workflow
applywithrun_arc_install=true. - Run workflow
kvm-smokeon KVM-capable runner labels.
- Container class (
arc-runners-container): default low-cost jobs. - DIND class (
arc-runners-dind): KVM-specific runtime-real jobs, scheduled only on tainted KVM nodes.
- Every 2 minutes, reads active dind runner pods.
- Computes desired KVM VM count with min/max caps.
- Starts/stops pre-provisioned KVM worker VMs via
virshover SSH.
See SECRETS.md.
Comprehensive operational docs are available via GitHub Pages (VitePress):
- Source:
docs/ - Deploy workflow:
.github/workflows/docs-pages.yml - Expected URL:
https://syscode-labs.github.io/talos-arc-kvm-unraid/
Manuals included:
- Architecture manual
- User manual (operator-focused)
- Service manual (SRE/runbook-focused)