Infrastructure¶
Full homelab infrastructure map. Updated April 2026 after k3s migration.
Proxmox Host¶
| Property | Value |
|---|---|
| Hostname | pve |
| IP | 192.168.1.5 |
| Version | Proxmox VE 8.4.14 |
| RAM | 64 GB |
| node_exporter | :9100 (scraped by Prometheus on dockerrr) |
Storage¶
| Store | Type | Size | Purpose |
|---|---|---|---|
/dev/mapper/pve-root |
ext4 | 94 GB | OS |
vm |
LVM-thin | 1.84 TB | VM disks |
apps-nvme |
ZFS | 1.81 TB | Apps VM disks |
backups |
Directory | 364 GB | /mnt/backups → PBS |
Backup Schedule¶
Target: PBS at CT 105 (192.168.1.50) — keep-last=3, keep-daily=7, keep-weekly=4
Schedule: Daily at 02:30 and 22:30
VMs backed up: 100 (homeassistant), 104 (dockerrr), 511 (apps-app1), 512 (apps-data), 515 (apps-edge)
VMs NOT backed up: 102 (unraid), 513 (apps-dev1), 514 (apps-monitoring), 521 (apps-app2)
VMs and LXCs¶
| VMID | Name | Type | IP | VLAN | RAM | Status |
|---|---|---|---|---|---|---|
| 100 | homeassistant | VM | 192.168.2.86 | IOT (2) | 8 GB | running |
| 101 | plex | LXC | 192.168.2.10 | IOT (2) | — | running |
| 102 | unraid | VM | 192.168.2.6 | IOT (2) | 4 GB | running |
| 103 | (destroyed) | — | — | — | — | arr stack migrated to dockerrr |
| 104 | dockerrr | VM | 192.168.1.47 | Default | 10 GB | running |
| 105 | pbs | LXC | 192.168.1.50 | Default | 2 GB | running |
| 106 | (destroyed) | — | — | — | — | Immich (unused) |
| 511 | apps-app1 | VM | 192.168.51.10 | apps-prod (51) | 6 GB | running |
| 512 | apps-data | VM | 192.168.51.30 | apps-prod (51) | 16 GB (balloon=0) | running |
| 513 | apps-dev1 | VM | 192.168.51.40 | apps-prod (51) | 3 GB | running |
| 514 | apps-monitoring | VM | 192.168.51.20 | apps-prod (51) | 2 GB | running |
| 515 | apps-edge | VM | 192.168.51.50 | apps-prod (51) | 4 GB | running |
| 521 | apps-app2 | VM | 192.168.51.15 | apps-prod (51) | 6 GB | running |
Memory Balloon
Balloon is disabled (balloon: 0) on all k3s VMs. An April 2026 sev-1 MinIO outage was caused by balloon dynamically shrinking RAM and triggering OOMKills.
Docker Host (dockerrr, VM 104)¶
Standalone Docker host at 192.168.1.47, Default VLAN — can reach all VLANs.
Homelab stack (/opt/docker/homelab/docker-compose.yml):
| Service | Port/URL |
|---|---|
| Traefik v3.6 | ports 80/443, *.home.jlwaller.com |
| Homepage | home.jlwaller.com |
| Prometheus | prometheus.home.jlwaller.com :9090 |
| Grafana | grafana.home.jlwaller.com |
| Alertmanager | alertmanager.home.jlwaller.com :9093 |
| Mosquitto MQTT | :1883 |
Arr stack (/opt/docker/servarrr/): Sonarr, Radarr, Prowlarr, SABnzbd, Jellyseerr
Systemd services: node_exporter (:9100), infra-exporter (:9101), vault-unseal
k3s Cluster¶
Docker Swarm was fully decommissioned April 2026. All production apps now run on k3s.
Node Roles¶
| Node | VMID | IP | Role |
|---|---|---|---|
| apps-app1 | 511 | 192.168.51.10 | control-plane + worker |
| apps-data | 512 | 192.168.51.30 | worker (data namespace, all data services) |
| apps-dev1 | 513 | 192.168.51.40 | worker + build node |
| apps-monitoring | 514 | 192.168.51.20 | worker (cAdvisor) |
| apps-edge | 515 | 192.168.51.50 | worker (Traefik, ports 80/443) |
| apps-app2 | 521 | 192.168.51.15 | worker |
Namespaces¶
| Namespace | Services |
|---|---|
recipicity-production |
api (2×), frontend (2×), scheduler, images |
recipicity-staging |
api (2×), frontend (2×), scheduler, images |
apps |
jlwaller, quo-integration, uptime-kuma, docs |
data |
postgres, pgbouncer, redis, minio, vault, exporters, backup |
traefik |
traefik (hostNetwork on apps-edge) |
cert-manager |
cert-manager + ClusterIssuers |
Manifests¶
All manifest files live on dockerrr at /opt/docker/homelab/k3s-manifests/.
Apply via pipe (kubectl must run on apps-app1):
cat /opt/docker/homelab/k3s-manifests/<ns>/<file>.yaml | ssh john@192.168.51.10 "kubectl apply -f -"
Registry¶
Local Docker registry runs as a k3s pod on apps-app1, port 5000.
- URL:
registry.apps.jlwaller.com:5000 - Storage:
/opt/registry/on apps-app1 (hostPath) - Push: from apps-dev1 after building images
Network (UniFi)¶
Access Points¶
| AP | IP | 2.4 GHz | 5 GHz | 6 GHz |
|---|---|---|---|---|
| Family Room | 192.168.1.60 | ch 1 | ch 44 (160MHz) | ch 117 |
| Upstairs | 192.168.1.21 | ch 6 | ch 36 (80MHz) | ch 69 |
| Office | 192.168.1.8 | ch 11 | ch 149 (80MHz) | ch 37 |
| AC Mesh | 192.168.1.165 | ch 6 | ch 100 | — |
VLANs¶
| Name | VLAN | Subnet |
|---|---|---|
| Default | untagged | 192.168.1.0/24 |
| IOT | 2 | 192.168.2.0/24 |
| Guest | 3 | 192.168.3.0/24 |
| Office | 4 | 192.168.8.0/24 |
| apps-prod | 51 | 192.168.51.0/24 |
Firewall Rules¶
- IOT → Default/Office/apps: blocked
- Guest → all internal: blocked
- mDNS reflector: enabled (cross-VLAN discovery)