docs(helm): describe dev chart's OverlayFS isolation in README + Chart.yaml

The dev chart's overlay-isolation layer (added in 9765fa2) was not
called out in helm/README.md or zddc-server-dev/Chart.yaml. Readers
comparing the two charts saw "same shape but tracks main" without
learning that the dev chart wraps the data PVC in OverlayFS so its
writes never mutate the underlying store.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
ZDDC 2026-05-05 08:33:04 -05:00
parent c6eaa77c6e
commit 13ae1498e4
2 changed files with 18 additions and 9 deletions

View file

@ -11,11 +11,15 @@ alpine + the freshly built static binary.
| Chart | When to use | | Chart | When to use |
|---|---| |---|---|
| **`zddc-server-prod/`** | Production. Pin `zddc.gitRef` to a stable tag (`zddc-server-vX.Y.Z`). Slower probe cadence; image-pull policy `IfNotPresent`. | | **`zddc-server-prod/`** | Production. Pin `zddc.gitRef` to a stable tag (`zddc-server-vX.Y.Z`). Slower probe cadence; image-pull policy `IfNotPresent`. Mounts the data PVC directly RW at `ZDDC_ROOT`. |
| **`zddc-server-dev/`** | Development / soak. Tracks `main` by default; `helm upgrade` triggers a pod recreate so each rollout pulls the latest commit. Faster probes; debug-level logging (request headers logged — sensitive). | | **`zddc-server-dev/`** | Development / soak. Tracks `main` by default; `helm upgrade` triggers a pod recreate so each rollout pulls the latest commit. Faster probes; debug-level logging (request headers logged — sensitive). Wraps the data PVC in **OverlayFS** (lower = PVC mounted RO, upper = ephemeral `emptyDir`) so dev-side writes never mutate the underlying store. Use this shape when the dev replica points at the same data as prod. |
The chart values are nearly identical between the two; the differences The chart values are nearly identical between the two; the differences
are encoded as defaults in each chart's `values.yaml.example`. are encoded as defaults in each chart's `values.yaml.example`. The
dev chart's overlay-isolation layer is a structural difference, not a
values-level toggle — see `zddc-server-dev/templates/deployment.yaml`
for the privileged init container and the `data-readonly` /
`overlay-scratch` / `data` volume sandwich.
## Quick start ## Quick start
@ -55,7 +59,9 @@ helm upgrade zddc-server-dev helm/zddc-server-dev/ -f my-dev-values.yaml
and starts the main container against that binary. and starts the main container against that binary.
- Wires the `ZDDC_*` environment-variable contract (root path, addr, - Wires the `ZDDC_*` environment-variable contract (root path, addr,
email header, CORS allowlist, log level, index path). email header, CORS allowlist, log level, index path).
- Mounts a caller-supplied PersistentVolumeClaim at `ZDDC_ROOT`. - Mounts a caller-supplied PersistentVolumeClaim at `ZDDC_ROOT` (prod
chart) or as the OverlayFS lowerdir behind a merged `ZDDC_ROOT`
(dev chart).
- Optionally creates an Ingress (`ingress.enabled: true`). - Optionally creates an Ingress (`ingress.enabled: true`).
**Does not:** **Does not:**

View file

@ -1,11 +1,14 @@
apiVersion: v2 apiVersion: v2
name: zddc-server-dev name: zddc-server-dev
description: | description: |
Development deployment of zddc-server. Same shape as zddc-server-prod Development deployment of zddc-server. Tracks main HEAD (rebuilt on
but tracks main HEAD (rebuilt on every pod restart), runs at debug every pod restart), runs at debug log level, has faster probe
log level, has faster probe cadence for quick feedback, and uses cadence for quick feedback, and uses smaller resource limits.
smaller resource limits. Intended for ephemeral / soak / preview Wraps the data PVC in OverlayFS — lower (PVC) mounted RO, upper an
environments — not for production traffic. ephemeral emptyDir — so dev-side writes never mutate the underlying
store, making it safe to point at the same data PVC as prod.
Intended for ephemeral / soak / preview environments — not for
production traffic.
type: application type: application
version: 0.1.0 version: 0.1.0
appVersion: "main" appVersion: "main"