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
+28
View File
@@ -1,5 +1,33 @@
# Changelog
## 2026-09-30 11:05 CEST — lab1 workers on both PVE nodes, balanced autoscaling
- **PVE cluster.** It is now the 2-node cluster `homelab`: `pv1-1` plus `pv1-2` (192.168.0.10).
- `vmbr0` on `pv1-2` is VLAN-aware.
- Template 101 is copied to `pv1-2` as 9101 (clone + offline migrate). `local-lvm` can't clone
across nodes.
- **lab1 workers.** One MachineDeployment per PVE node: `lab1-workers-pv1-1` (max 6) and
`lab1-workers-pv1-2` (max 12).
- Each is pinned by `allowedNodes`.
- The node IP pool is `.31–.50`.
- The control plane stays on `pv1-1`.
- The old `lab1-workers` was replaced to get symmetric names.
- **cluster-autoscaler.** Balances the two groups (a scale-up of 16 pods gave 4 + 4).
- Settings: `balancing-label: node.cluster.x-k8s.io/pool`, `scan-interval: 1m` and `v: 2`.
- The MDs got the pool label, `capacity…/labels` (os/arch) and `maxPods`.
- The request rate is left at the default. `scan-interval` cuts the discovery calls the
clusterapi provider makes without a cache.
- **Findings.** Three CA 1.35.2 clusterapi bugs: uncached discovery, labels read from a wrong
v1beta2 path, and empty os/arch labels for CAPMOX. They are worked around in config and logged
in `docs/future-tasks.md` for reporting upstream.
- **Files:**
- `configs/capi/lab1.yaml`, `configs/cluster-autoscaler/values.yaml`,
`configs/capi/clusterctl.yaml.example`
- `docs/phase-1-proxmox-capi.md`, `docs/image-builder-proxmox.md`, `docs/decisions.md` (#18, #19;
#7 superseded), `docs/future-tasks.md`
- plan, execution log and session note
- `README.md`, `CLAUDE.md`, `AGENTS.md`
## 2026-09-27 10:40 CEST — Management cluster running, built by an idempotent Ansible playbook
- Phase 1 Step 2 done: `ansible/mgmt.yml` creates VM 201 `lab-mgmt` (192.168.4.21) on `pv1-1`