Files
cluster-autoscaler-with-capi/CHANGELOG.md
T
kacerrandClaude Opus 5.5 6ef55778ff 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>
2026-09-30 11:07:17 +02:00

60 lines
3.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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/`.