lab1 workers on both PVE nodes: per-node template + MD, balanced CA

PVE is now the 2-node cluster homelab (pv1-1 + pv1-2), no shared storage:
- template 101 copied to pv1-2 as 9101; MDs lab1-workers-pv1-1 (max 6) and
  lab1-workers-pv1-2 (max 12), PMTs pinned with allowedNodes; pool .31-.50;
  lab1-workers renamed for symmetry (decision #18, #7 superseded)
- CA: balancing-label node.cluster.x-k8s.io/pool (+ pool label, capacity labels
  with os/arch, maxPods on the MDs), scan-interval 1m, v 2, default QPS (#19).
  Scale test: 16 pods -> 4 + 4 across both nodes.
- runbook, image-builder copy procedure, fixes tables, future task to report
  three CA clusterapi bugs upstream, lab facts, changelog, execution log

Plan: docs/plans/2026-09-29-2315-pv1-2-workers.md

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-09-30 11:07:17 +02:00
co-authored by Claude Opus 5.5
parent 5e5b6c506a
commit 6ef55778ff
14 changed files with 476 additions and 50 deletions
+4 -1
View File
@@ -26,7 +26,7 @@ growing, in later phases, into a "poor man's Kubernetes-as-a-Service".
| Hypervisor type | Management API | CAPI infrastructure provider |
| --- | --- | --- |
| Proxmox VE (e.g. `pv1-1`, 192.168.0.8) | PVE REST API :8006 | CAPMOX (phase 1) |
| Proxmox VE cluster `homelab`: `pv1-1` 192.168.0.8, `pv1-2` 192.168.0.10 | PVE REST API :8006 | CAPMOX (phase 1) |
| Ubuntu 24.04 + KVM/libvirt | libvirt RPC (`qemu+ssh`/`qemu+tls`) | none mature upstream → phase 2 |
VM network: `vmbr0` (VLAN-aware), VLAN 4, build host 192.168.4.181.
@@ -118,3 +118,6 @@ Short summary; the full log with alternatives and status is [docs/decisions.md](
`status.capacity` on `ProxmoxMachineTemplate`.
6. **Management cluster from one idempotent Ansible playbook**, CAPI providers installed by
**cluster-api-operator** instead of `clusterctl init` — re-runs are no-ops, upgrades are version bumps.
7. **One template copy and one worker MachineDeployment per PVE node** (no shared storage):
`local-lvm` templates can't be cloned across nodes. cluster-autoscaler balances the groups on a
shared `node.cluster.x-k8s.io/pool` label.