The lab

Five Proxmox nodes, two NAS boxes and a 100 GbE switch in a rack. Everything on it is defined in one repo — Packer builds the images, OpenTofu provisions the VMs, Ansible configures the hosts, and ArgoCD syncs the cluster — so the interesting question is never "what did I click" but "which commit did that". Most of the posts here start as something in this list breaking.

proxmox 9.2k3s 1.35.77-node cluster89 argocd apps100 GbE core287 GB VRAM283 TB raw

01 · Hardware

NodeSpecRole
pve1 – pve3i9-13900H · 96 GB · NVMe · 100 GbEk3s + compute
pve4i5-1240P · 16 GB · 2.5 GbEquorum
pve5EPYC 7313P · 256 GB · 2× RTX PRO 6000 + 3× RTX 4090 + RTX 3090GPU + desktops
pve-qnapVM inside the NAS hypervisorDR witness
bignasQNAP TVS-AIh1688ATX · QuTS hero · 12-wide raidz2 + NVMe poolbulk + S3
Synology DS1821+8-bay, separate power and switch portsecond copy
CRS520-4XS-16XQ16× 100 GbE QSFP28 + 4× 25 GbE SFP28, MTU 9000core switch
UDM SErouting, firewall, DNS, VLANsgateway
Raspberry Pi 5Zigbee + Z-Wave sticks, MQTT brokerradios

02 · What's running

ServiceWhat it doesState
Proxmox VEthe hypervisor cluster9.2.3
k3swhere apps landstable
ArgoCDapp-of-apps GitOps89 apps
CloudNativePGpostgres for 14 appsstable
Longhornreplicated volumesstable
Traefikingress and TLSstable
AuthentikSSO for everythingstable
Cloudflare Tunnelthe public hostnamesstable
LiteLLMone API for every modelstable
vLLMlocal model servingtuned by hand
SigNoztraces, metrics, logsstable
Prometheus + Grafanathe VM-side halfstable
Actions Runner Controllerself-hosted CIstable
Zotregistry + build cachestable
Immichphotosstable
Paperless-ngxscans and OCRstable
Plex + arr stackmediastable
TdarrGPU transcode queuefiddly
Home Assistantthe housestable
n8nworkflow automationqueue mode
CNPG backupsnightly to S3-on-HDDslow on purpose

Hand-updated when something changes. Not a status page — this blog is deliberately hosted somewhere else.

03 · Models

ModelWhat it's forSize
DeepSeek V4 Flash Visionreasoning, vision, 512k context285B-A13B MoE
Qwen3.8 27Beveryday chat and code, 256k context27B · AWQ INT4
QwenPaw Flash 9Btool-calling agents, always resident9B
Qwen3 Embeddingembeddings for RAG and search0.6B
Parakeet TDT v3speech to text0.6B
Kokorotext to speech82M

Served with vLLM behind llama-swap, which loads and evicts them across the cards on demand. A LiteLLM gateway puts these and the hosted frontier models behind one OpenAI-compatible API, so anything I build can move between them by changing a string.

04 · Coming soon

Still deciding what belongs here — most likely the decisions behind all of the above, including the ones I reversed.