Configuration
Every chart depends on one library chart, quench-common, so the operational knobs look the same whichever datastore you run. App-specific settings live under a config: (and where relevant auth:) block documented on each chart page; everything below is shared.
Image (pinned by digest)
The image is referenced by sha256 digest, never a tag. quench-common refuses a tag-only reference on purpose, so a chart can never deploy something unpinned. CI rewrites this to the latest signed digest on each image build, so you normally leave it alone.
image: repository: ghcr.io/quenchworks/images/postgresql digest: "sha256:..." # set by CI; override to pin a specific build pullPolicy: IfNotPresentPersistence
Stateful charts provision a PVC. Turn it off for ephemeral use, size it, choose a class, or bind an existing claim.
persistence: enabled: true size: 8Gi storageClass: "" # default class if empty accessModes: ["ReadWriteOnce"] existingClaim: "" # bind an existing PVC insteadResources
resources: requests: { cpu: 250m, memory: 256Mi } limits: { cpu: "1", memory: 1Gi }A few engines size their heap or memory from these (or from a dedicated value); their chart pages call that out.
Scheduling and placement
The usual Kubernetes controls are passed straight through: nodeSelector, affinity, tolerations, topologySpreadConstraints, priorityClassName, schedulerName, terminationGracePeriodSeconds, and updateStrategy.
Extra environment and volumes
Inject configuration without forking the chart:
extraEnvVars: - name: MY_FLAG value: "1"extraEnvVarsCM: "" # name of a ConfigMap to envFromextraEnvVarsSecret: "" # name of a Secret to envFromextraVolumes: []extraVolumeMounts: []initContainers: []sidecars: []Security context
The hardened defaults come from quench-common: runAsNonRoot (uid/gid/fsGroup 1001), seccomp RuntimeDefault, read-only root filesystem, no privilege escalation, all capabilities dropped. Anything you set merges over the defaults, so you only override what you need.
podSecurityContext: {} # your keys win over the hardened defaultscontainerSecurityContext: {}Probes
Each chart ships sensible liveness and readiness probes. Tune the timing, or replace a probe outright.
livenessProbe: { initialDelaySeconds: 30 } # merge timing overridesreadinessProbe: { periodSeconds: 10 }customLivenessProbe: {} # set to replace the probe entirelycustomReadinessProbe: {}customStartupProbe: {}Networking and availability
A NetworkPolicy is on by default and is the trust boundary for charts that ship without app-level auth. A PodDisruptionBudget guards voluntary disruptions.
networkPolicy: enabled: true allowExternal: false # restrict ingress to same-namespace podspodDisruptionBudget: enabled: true minAvailable: 1serviceAccount: { create: true, name: "", annotations: {} }rbac: { create: false }See the schema
Every chart ships a values.schema.json, so Helm validates what you pass and your editor can autocomplete it. Read a chart’s full values inline:
helm show values oci://ghcr.io/quenchworks/charts/postgresqlhelm show readme oci://ghcr.io/quenchworks/charts/postgresql