Node Roles
| Node | Planned role | Workload intent | Storage / accelerator |
|---|---|---|---|
| NucBox G5 | RKE2 server, control plane, etcd | Cluster management only; may also physically host external Forgejo | Intel N97, ~12 GB RAM |
| Sager laptop | RKE2 worker | General workloads, secondary game-server worker, Jellyfin candidate, GTX 1070 workloads | GTX 1070; local Jellyfin cache/transcode; shared TrueNAS game storage planned |
| OptiPlex 5070 | RKE2 worker | Primary game-server worker, shared with Sager where practical | Existing local PVs initially; shared TrueNAS-backed game storage planned |
| Media server | RKE2 GPU worker | ComfyUI and other approved GPU workloads | RTX 3080 Ti; ~786 GB of node-local ComfyUI assets |
| TrueNAS SCALE | External storage appliance | Shared and Kubernetes-managed persistent storage | Existing ZFS datasets under /mnt/homelab/apps/ and /mnt/homelab/media |
Scheduling policy
NucBox control plane
The NucBox carries a control-plane taint that normal application workloads do not tolerate. Cluster components that legitimately require the server remain allowed. This protects the relatively small control-plane node from application resource pressure.
Forgejo remains outside Kubernetes initially but may still run on the same physical NucBox. It is therefore outside the Kubernetes failure boundary, not necessarily the NucBox hardware failure boundary.
Sager and OptiPlex game-server placement
The OptiPlex is the initial primary game-server worker and may continue using existing local PVs during early migration. The target is to move suitable game-server persistent data to shared TrueNAS-backed storage so workloads can schedule across the OptiPlex and Sager where practical.
Scheduling policy should distinguish between:
- Game servers still tied to OptiPlex local data
- Game servers using shared TrueNAS storage and eligible for either worker
- Workloads that should not consume game-server capacity
Labels, taints, tolerations, and required affinity must reflect the selected storage placement. A toleration alone is not a placement guarantee.
Sager workload intent
The Sager is planned as:
- A secondary game-server worker
- A Jellyfin candidate
- A GTX 1070 workload host where useful
- The owner of local Jellyfin cache/transcode data if Jellyfin moves there
Jellyfin media remains on the existing TrueNAS media dataset.
Media-server GPU placement
The media server advertises its RTX 3080 Ti as a schedulable resource. ComfyUI remains tied to this node because both the GPU and approximately 786 GB of model assets are local. Those assets use a node-affined local PV.
Sager GPU
The GTX 1070 is a possible secondary GPU resource. It should be enabled only if driver compatibility and useful workload demand justify the added operational surface.
Failure considerations
Node-local data does not gain high availability merely because it is represented by a Kubernetes PV. Local-PV workloads require documented backup, node-loss recovery, and restoration procedures. Moving suitable game-server state to TrueNAS improves placement flexibility but does not remove the need for application-aware backup and recovery.
Homelab Wiki
- Home
- Homelab Operations Status
- Application Delivery Automation
- RKE2 Control Plane Setup
- RKE2 Worker Setup
- MetalLB Layer 2 Load Balancing
- TrueNAS CSI Storage Integration
- UDS Core Prerequisites and Readiness
- UDS Application Delivery and Repository Architecture
- Final Architecture
- Node Roles
- Storage Strategy
- Migration Roadmap
- Mat Homelab Application Migration Plan
- Security and Secrets
- Homelab Roadmap
- Platform issues