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>
3.6 KiB
3.6 KiB
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-1pluspv1-2(192.168.0.10).vmbr0onpv1-2is VLAN-aware.- Template 101 is copied to
pv1-2as 9101 (clone + offline migrate).local-lvmcan't clone across nodes.
- lab1 workers. One MachineDeployment per PVE node:
lab1-workers-pv1-1(max 6) andlab1-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-workerswas replaced to get symmetric names.
- Each is pinned by
- 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: 1mandv: 2. - The MDs got the pool label,
capacity…/labels(os/arch) andmaxPods. - The request rate is left at the default.
scan-intervalcuts the discovery calls the clusterapi provider makes without a cache.
- Settings:
- 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.mdfor reporting upstream. - Files:
configs/capi/lab1.yaml,configs/cluster-autoscaler/values.yaml,configs/capi/clusterctl.yaml.exampledocs/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.ymlcreates VM 201lab-mgmt(192.168.4.21) onpv1-1from 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 reportschanged=0. clusterctl initis gone from the runbook;clusterctl(v1.12.11 in~/bin) is used only forgenerate/describe/get kubeconfig. Proxmox credentials moved toansible/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/withmake-kubeconfig.sh(applies RBAC once, mints a short-lived TokenRequest token, writes gitignoredkubeconfigs/<name>.kubeconfig, runscan-ichecks) and a setup README. - Dropped the long-lived
service-account-tokenSecret; tokens default to 7 days, refresh by re-running. cluster-inspectoragent now reads only.claude/cluster-inspector/kubeconfigs/*;.gitignorecovers 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) anddocs/sessions/. - Git flow: docs straight to
main, phase-3 code viafeat/branch +teaMR;/shipcommand. - Files:
CLAUDE.md,docs/decisions.md,docs/sessions/,.claude/.