Files

Observability Local PersistentVolumes

This kustomization reserves six workload-specific Local PV binding contracts on the root SSD. Each owner has a dedicated kubernetes.io/no-provisioner StorageClass with WaitForFirstConsumer, Retain, and volume expansion disabled. Every PV is ReadWriteOnce, retains its data after claim deletion, and is affined to donghyeon-system-product-name.

Owner Host path Capacity StorageClass Directory owner
Prometheus /srv/k3s/ssd/observability/prometheus 20Gi ssd-local-observability-prometheus-retain 1000:2000
Grafana /srv/k3s/ssd/observability/grafana 2Gi ssd-local-observability-grafana-retain 472:472
Alertmanager /srv/k3s/ssd/observability/alertmanager 1Gi ssd-local-observability-alertmanager-retain 1000:2000
Alloy /srv/k3s/ssd/observability/alloy 2Gi ssd-local-observability-alloy-retain 473:473
Loki /srv/k3s/ssd/observability/loki 5Gi ssd-local-observability-loki-retain 10001:10001
Tempo /srv/k3s/ssd/observability/tempo 5Gi ssd-local-observability-tempo-retain 10001:10001

The declared 35 GiB is a Kubernetes binding contract, not an ext4 directory quota. Project quota is not active. All six directories share root-filesystem free space, so the later operational protections remain mandatory:

  • Prometheus retentionSize=16GB is not a whole-filesystem cap and does not cap WAL plus head data.
  • Loki's 512 MB setting limits WAL replay RAM; it is not a disk quota.
  • Loki disk_full_threshold=0.90 uses Statfs on the WAL filesystem.
  • Tempo 2.10.7 has no WAL byte limit or disk-full guard.
  • Root-filesystem 75%, 85%, and 90% alerts, apply/smoke du and df caps, and acceptance of the root-90%-full ingest-stop runbook are still required.

Run bash scripts/bootstrap/prepare-observability-local-paths.sh to inspect the read-only plan. The separately confirmed --execute mode prepares the exact paths at mode 0770; it does not apply Kubernetes resources.