Date: 2026-08-12 UTC
drg-k8s-worker-01.auth.home.lan joined the production kubeadm cluster as a schedulable worker.
192.168.1.231/24, gateway/DNS 192.168.1.138:7c:76:4b:68:6d and retains interface name enp1s0drgadmin; password authentication disableddrgadmin/mnt/fastdata and /mnt/bigdata use NFSv4.2 sec=sys systemd automountsnode-role.kubernetes.io/worker, storage.autocoder.dev/fastdata=true, storage.autocoder.dev/bigdata=true, workload.autocoder.dev/gitea-runner=trueKryptovisor exports now grant 192.168.1.231 the same sec=sys,all_squash access as the control plane, mapped to UID 1240000012 and GID 1240000009.
The stale public kubeadm discovery endpoint was corrected from 192.168.1.216:6443 to the live API endpoint 192.168.1.9:6443 before enrollment. Temporary bootstrap tokens used during diagnosis and enrollment were deleted afterward.
The installer had mounted the entire 2 TB NVMe at /boot. Before repurposing it:
/var/backups/boot-before-nvme-20260812/boot was moved onto the SATA root filesystem /dev/sda2/dev/sda1 was reinstalledThe Force MP600 NVMe (serial 2044823000012856432A) was then repartitioned as one ext4 filesystem labeled runner-storage, UUID 2423c64a-d1d7-4872-9c77-bd5b048567b8, mounted at /mnt/runner-storage. Its fstab mount is required rather than nofail, preventing a worker with missing scratch storage from silently writing CI layers to the root disk.
The deployment runner pool now contains six runners on drg-k8s-worker-01:
gitea-act-runnergitea-act-runner-2gitea-act-runner-3gitea-act-runner-rust-1gitea-act-runner-rust-2gitea-act-runner-rust-3Managed manifests select only nodes labeled workload.autocoder.dev/gitea-runner=true. Durable runner identity and cache remain under /mnt/fastdata/k8s-pvcs/gitea/; isolated Docker state is under /mnt/runner-storage/gitea-act-runner/. Docker hostPaths require pre-created directories, preventing accidental root-disk fallback.
AutoCoder-Engine requirements and manifests were merged through PRs 2514, 2515, and 2516. Live verification showed every runner Ready and online, each Docker mount resolving to /dev/nvme0n1p1, and every runner data mount resolving to the corresponding fastdata NFS path. A no-deploy workflow dispatch ran task 7902 on drg-k8s-runner-2 and completed successfully from 20:16:04–20:16:41 UTC.
PRs 2517–2520 expanded the pool from four to six runners and added a repeatable manual runner capacity check workflow.
500m CPU and 512Mi memory; memory limit 4Gi each1 CPU and 2Gi memory; memory limit 10Gi eachCapacity workflow run 5118 passed all six jobs. All six registered runners were busy simultaneously; observed peak node use was 71% CPU and 4% memory, with MemoryPressure, DiskPressure, PIDPressure, and NetworkUnavailable all false.
Revisit capacity periodically and after sustained queueing. Use the manual workflow plus Gitea queue wait, concurrent demand, node CPU/memory pressure, and /mnt/runner-storage utilization to decide whether more runners or larger ceilings can be committed safely.
The node was cordoned, rebooted, and recovered without manual intervention. After reboot:
enp1s0 returned at 192.168.1.231FreeIPA client packages are installed, but directory enrollment is not complete. The current operator principal lacks permission to create/enroll host entries. This does not block Kubernetes scheduling or the node's squashed NFS access. Complete enrollment later using an IPA principal authorized to add hosts.