Full lab documentation and infrastructure as code

- Trino catalogs, Grafana, Spark jobs, LDAP LDIF, NPM compose
- Airflow DAG scripts, Proxmox VM inventory, network docs
- Ansible playbook, Gitea CI validate workflow
- Backup and health-check scripts, cron documentation
- Homepage DOCS tab with links to all documentation
- Extended collect-fleet-config.sh and populate-repo.py
This commit is contained in:
Lakehouse Admin
2026-05-19 23:12:41 +02:00
parent 3c8993a41e
commit df5ec93dc3
46 changed files with 1809 additions and 74 deletions
+64
View File
@@ -0,0 +1,64 @@
# Network — ATC Lakehouse lab
## Subnets
```mermaid
flowchart TB
subgraph mgmt [10.0.10.0/24 — Management]
PVE[pve01 · 10.0.10.65]
IDRAC[iDRAC · 10.0.41.102]
end
subgraph data20 [10.0.20.0/24 — Storage & legacy]
OS[ObjectScale · 10.0.20.111]
DB1[atc-db01 · 10.0.20.112]
MGT[atc-mgt01 · 10.0.20.104]
GF[atc-grafana · 10.0.20.103]
end
subgraph lake21 [10.0.21.0/24 — Lakehouse compute]
D1[atc-docker01 · 10.0.21.45]
D2[atc-docker02 · 10.0.21.47]
KF[atc-kafka01 · 10.0.21.36]
LK[atc-lake01 · 10.0.21.50]
DB2[atc-db02 · 10.0.21.51]
AF[atc-airflow01 · 10.0.21.55]
EL[atc-elastic01 · 10.0.21.46]
end
PVE --> D1 & D2 & KF & LK & DB2 & OS & DB1 & MGT
```
## DNS
Internal names: `*.dell-atc.lan` (see `config/hosts/atc-lab.hosts`).
| Pattern | Example |
|---------|---------|
| Short hostname | `atc-lake01` |
| FQDN | `atc-lake01.dell-atc.lan` |
## Key ports (east-west)
| Service | Port | Protocol |
|---------|------|----------|
| Kafka | 9092 | TCP |
| Debezium Connect | 8083 | HTTP |
| Spark UI | 8080 | HTTP |
| Trino | 8089 | HTTP |
| PostgreSQL | 5432 | TCP |
| ObjectScale S3 | 9020 | HTTP |
| ObjectScale UI | 443 | HTTPS |
| Homepage | 80 | HTTP |
## SSH mesh
All lab VMs: `/root/.ssh/atc_cluster` — see [ssh-mesh.md](ssh-mesh.md).
ObjectScale uses `admin@` for initial bootstrap; `root@` after key install.
## Firewall notes
- Lab assumes flat L2/L3 trust within `10.0.10/20/21.x`.
- ObjectScale `management_clients: 0.0.0.0/0` in deploy.yml — tighten for production.
- Proxmox API `:8006` reachable from docker01 for homepage widget.
+29 -42
View File
@@ -1,46 +1,33 @@
# Recommendations — next steps for documentation & IaC
# Recommendations — status
Prioritized ideas to make the lab fully reproducible and operable.
## Completed
## High priority
- [x] Trino catalog properties
- [x] Grafana ini + dashboard provisioning
- [x] Spark jobs (`/opt/spark-jobs`)
- [x] Airflow `airflow.cfg` + DAG scripts
- [x] Kafka KRaft `server.properties`
- [x] ObjectScale `deploy.yml`
- [x] Elasticsearch `elasticsearch.yml`
- [x] Docker compose per host
- [x] LDAP LDIF exports (mgt01)
- [x] NPM compose (mgt01)
- [x] Proxmox VM inventory JSON
- [x] SSH mesh (12 hosts + ObjectScale)
- [x] Architecture diagram page
- [x] `collect-fleet-config.sh` + `populate-repo.py`
- [x] Backup script
- [x] Health check script
- [x] Cron documentation
- [x] Ansible playbook + inventory
- [x] Gitea CI validate workflow
- [x] Network documentation
- [x] Homepage DOCS tab
| Item | Host | Why |
|------|------|-----|
| **Trino catalog properties** | atc-lake01 | `etc/catalog/*.properties` — documents federated queries |
| **Grafana `grafana.ini` + datasources** | atc-grafana | Monitoring as code |
| **Kibana / ES keystore note** | atc-elastic01 | Passwords in keystore — document enrollment, not files |
| **Proxmox VM notes** | pve01 | VMID → hostname → IP table (API export script) |
| **Backup script** | docker01 | Nightly `git pull` + volume tarballs to ObjectScale |
## Optional next steps
## Medium priority
| Item | Host | Why |
|------|------|-----|
| **Spark jobs** | atc-lake01 | `/opt/spark-jobs/` in git |
| **Airflow `dags/scripts/`** | atc-airflow01 | Supporting Python for DAGs |
| **Nginx Proxy Manager** | atc-mgt01 | Export NPM config (if used for TLS) |
| **LDAP/LDIF exports** | atc-mgt01 | `*.ldif` already on host — useful for LDAP rebuild |
| **MinIO / S3 buckets** | objectscale | Bucket layout + IAM policy docs |
| **Network diagram** | docs | VLAN / firewall rules (10.0.10/20/21.x) |
## Automation
| Item | Description |
|------|-------------|
| **CI on Forgejo** | Lint YAML, validate compose, dry-run `docker compose config` |
| **Ansible playbook** | `ansible-playbook deploy-lakehouse.yml` from git |
| **Health check script** | Cron: curl all `siteMonitor` URLs, alert via Grafana |
| **Monthly collect cron** | `collect-fleet-config.sh` + auto-commit branch |
## Security hardening (lab → prod path)
- Move all secrets to `.env` / Vault; git only `*.example`
- Rotate `atc_cluster` SSH key periodically
- Restrict ObjectScale `management_clients` from `0.0.0.0/0`
- Enable TLS on Kafka (`SASL_SSL`) if exposed beyond lab VLAN
## Dashboard enhancements
- Homepage widget: link to architecture diagram in header logo
- Add **DOCS** tab with bookmarks to all `docs/*.md` on Forgejo
- Version badge in footer (git commit SHA from build arg)
- [ ] Kibana `kibana.yml` export
- [ ] TLS certificates inventory (NPM letsencrypt paths)
- [ ] Automated weekly git commit via cron (install from `scripts/cron/README.md`)
- [ ] Vault/external secrets instead of redacted files
- [ ] Reach remaining hosts: `10.0.21.52`, `.37`, `.38` (no SSH key yet)