Documentation audit: refresh README, resolve stale PLAN.md items, list open items
This commit is contained in:
47
README.md
47
README.md
@@ -1,20 +1,43 @@
|
||||
# planck — 20-node Raspberry Pi 4 home lab
|
||||
|
||||
20× Raspberry Pi 4 Model B (8GB), each booting a 240GB USB SSD. Named
|
||||
`planck001`–`planck020`. Network: Ubiquiti UDM Pro, 2 switches, one router.
|
||||
Synology NAS on the same LAN for shared storage.
|
||||
20× Raspberry Pi 4 (8GB, ARM64), each booting a 240GB NVMe-in-USB stick.
|
||||
Fresh Raspberry Pi OS Lite (Debian 13) everywhere, running a k3s Kubernetes
|
||||
cluster: servers planck002/003/004 (embedded etcd), workers 001 + 005–020.
|
||||
|
||||
## Docs
|
||||
**Home page: https://carr.pub** (served by this cluster).
|
||||
|
||||
- `docs/INVENTORY.md` — hardware inventory (regenerate: `./scripts/inventory.sh > docs/INVENTORY.md`)
|
||||
- `docs/MACS.txt` — eth0 MAC addresses (for DHCP reservations)
|
||||
- `docs/PLAN.md` — the rebuild plan and decisions log
|
||||
## The map
|
||||
|
||||
## Scripts
|
||||
| Path | What it is |
|
||||
|------|-----------|
|
||||
| `docs/PLAN.md` | Full history: what was built, every bug and its fix, postmortems. READ FIRST |
|
||||
| `docs/IPS.md` | Node ↔ IP ↔ MAC table (static IPs, pinned on nodes) |
|
||||
| `docs/INVENTORY.md` | Hardware inventory per node |
|
||||
| `scripts/flash-one.sh` | Reimage a node's NVMe stick (run on laptop via pkexec) |
|
||||
| `scripts/k3s-join.sh` | Join servers/agents to the cluster (needs K3S_TOKEN) |
|
||||
| `scripts/loadtest.sh` | Spawn a k6 load swarm across N nodes |
|
||||
| `scripts/inventory.sh` | Regenerate hardware inventory |
|
||||
| `manifests/monitoring/` | Prometheus, node-exporter, Grafana, DDNS CronJob |
|
||||
| `manifests/loadtest/` | k6 rig + practice target |
|
||||
| `manifests/web/` | The carr.pub site + Ingress |
|
||||
| `manifests/cluster-issuer.yaml` | Let's Encrypt issuer |
|
||||
| `configs/` | Node password (gitignored), installer internals, retired netboot servers |
|
||||
|
||||
- `scripts/inventory.sh` — collects hardware/network inventory from all nodes
|
||||
## Daily operations
|
||||
|
||||
## Node access
|
||||
- kubectl on the laptop: `~/.local/bin/kubectl` (kubeconfig `~/.kube/config`)
|
||||
- SSH any node: `ssh adamcarr@planck0NN.local` (passwordless sudo)
|
||||
- Grafana: `kubectl -n monitoring port-forward svc/grafana 3000:3000`
|
||||
- Load test: `scripts/loadtest.sh <url> [pods] [vus-per-pod] [duration]`
|
||||
- New public site: Ingress in `web` namespace on `<name>.carr.pub` with the
|
||||
`cert-manager.io/cluster-issuer: letsencrypt-prod` annotation + DNSimple
|
||||
record
|
||||
|
||||
SSH: `ssh adamcarr@planck0NN.local` (key auth set up 2026-09-19). mDNS
|
||||
resolves `planck0NN.local` across subnets.
|
||||
Agent documentation lives in `~/.agents/skills/planck-cluster/SKILL.md`
|
||||
(loaded automatically by opencode sessions).
|
||||
|
||||
## Safety rules
|
||||
|
||||
- Never reboot more than ONE of planck002/003/004 at once (etcd quorum)
|
||||
- Images must be linux/arm64 multi-arch
|
||||
- The cluster room switch shares a PSU with nodes 011–015
|
||||
|
||||
Reference in New Issue
Block a user