Resources¶
VM and node sizing. Container-level CPU/memory limits are not set in any
compose template in this repository — every container in the stack runs
unbounded, sized only by its host VM/node's total resources. Add
deploy.resources.limits/reservations to a stack's compose.yml.j2 if a
specific service ever needs to be capped or guaranteed.
Proxmox VMs¶
| Host | Cores | Memory | Disk | Notes |
|---|---|---|---|---|
| swarm-core | 4 | 8192 MB | 100G | Sized above the generic default: runs every Core and Apps ("Important") stack |
| pihole | 1 | 1024 MB | 20G (template default) | Single-purpose DNS appliance, sized down from the generic default |
| nextcloud | 4 | 6144 MB | 20G (template default) | Nextcloud AIO bundles several containers (office, Talk, imaginary) |
| unifi | 2 (default) | 4096 MB (default) | 40G | Cores/memory left at the generic default (UniFi OS Server's stated minimum is met); disk grown because the installer wants ≥15GB free under /home |
| homeassistant | 2 | 4096 MB | Set by the HAOS image, not the cloud-init template | No host_vars file — sizing comes entirely from home_assistant role defaults |
Generic proxmox_vm role defaults (used unless a host overrides them in its
own host_vars/<host>.yml): 2 cores / 4096 MB / 20G disk. The cloud-init
template itself (cloud_init_template role) is built at 2 cores / 2048 MB
/ 20G, then the clone step resizes per-VM via proxmox_vm_disk_size.
Physical / non-Ansible-managed nodes¶
| Host | Notes |
|---|---|
| pve | Proxmox hypervisor. Sizing is whatever the physical hardware provides; not managed by this repository. |
| swarm-media | Physical Docker Swarm worker. Holds the NVIDIA GPU used by Emby (transcode) and would be needed for GPU-backed Immich ML if that were ever moved to this tier. Shut down when its workload isn't required — a worker can leave the Swarm this way without affecting manager quorum, which only counts managers. |
GPU¶
docker_install_nvidia_toolkit (role default:
{{ (swarm_node_labels|default({})).tier|default('') == 'media' }}, i.e.
"on by default for any tier=media node") is explicitly overridden to
false in host_vars/swarm-media.yml — no GPU is physically fitted yet.
Emby runs CPU transcoding until then. Once fitted: remove that override (or
set it true) and re-deploy; the docker role installs the NVIDIA driver
and nvidia-container-toolkit, and Emby's GPU reservation block picks up the
change automatically (see Emby).
Swarm quorum¶
A single Swarm manager (swarm-core) has no fault-tolerant quorum: losing it
stops scheduling until it returns. This is accepted for the current scale;
more managers will be added once there are enough nodes for a real
odd-numbered quorum (3+). swarm-media, as a worker rather than a manager,
can be shut down without affecting quorum at all.