# 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` from the pinned Ubuntu cloud image, installs k3s v1.35.8+k3s1, cert-manager v1.21.2 and cluster-api-operator 0.28.0, and CAPI v1.12.11 / CAPMOX v0.9.1 / IPAM v1.1.1 as operator Provider CRs (all READY). A second full run reports `changed=0`. - `clusterctl init` is gone from the runbook; `clusterctl` (v1.12.11 in `~/bin`) is used only for `generate`/`describe`/`get kubeconfig`. Proxmox credentials moved to `ansible/secrets.yml`. - cluster-inspector role can now read Provider CRs, HelmCharts and nodes. - Files: `ansible/`, `docs/phase-1-proxmox-capi.md`, `docs/versions.md`, `docs/decisions.md` (#12–14), `configs/capi/clusterctl.yaml.example`, `CLAUDE.md`, `README.md`. ## 2026-09-27 00:02 CEST — Read-only cluster-inspector credentials next to the agent - Moved inspector RBAC from `configs/rbac/` to `.claude/cluster-inspector/` with `make-kubeconfig.sh` (applies RBAC once, mints a short-lived TokenRequest token, writes gitignored `kubeconfigs/.kubeconfig`, runs `can-i` checks) and a setup README. - Dropped the long-lived `service-account-token` Secret; tokens default to 7 days, refresh by re-running. - `cluster-inspector` agent now reads only `.claude/cluster-inspector/kubeconfigs/*`; `.gitignore` covers that dir and `.claude/settings.local.json`. - Files: `.claude/cluster-inspector/`, `.claude/agents/cluster-inspector.md`, `CLAUDE.md`, `README.md`, `.gitignore`, `docs/decisions.md`. ## 2026-09-26 23:55 CEST — Project history conventions - Adopted plan / execution-log / prompt / review / changelog conventions from egress-proxies-operator, plus new `docs/decisions.md` (back-filled) and `docs/sessions/`. - Git flow: docs straight to `main`, phase-3 code via `feat/` branch + `tea` MR; `/ship` command. - Files: `CLAUDE.md`, `docs/decisions.md`, `docs/sessions/`, `.claude/`.