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>
60 lines
3.6 KiB
Markdown
60 lines
3.6 KiB
Markdown
# 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/<name>.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/`.
|