Three changes, all about values that do not do what they promise: 1. values.schema.json (#68): additionalProperties: false on every chart-owned object level, so a key the chart does not read is rejected at render time instead of being silently ignored. 2. Ingress gate (#93): the Ingress template is wrapped in {{- if .Values.ingress.enabled }} and the key is added to values.yaml with default true, so behaviour is unchanged. As in rallly, ingress.domain is not a pure Ingress value: the StatefulSet also feeds it to CORE_DEFAULT_DOMAIN, the app's default domain for generated share links, and did so without required(). The guarantee only came from the ungated Ingress template, so the gate would have handed out unusable links silently. That read is now required() as well; only clusterIssuer becomes unnecessary. 3. Null-safety for hardening, probes and resources (#99): an erased block fell back to "securityContext: null" (unhardened), a vanished probe or a container without resource accounting. The rebuilt liveness probe keeps "/" rather than /api/healthcheck, so a database outage still does not restart the pod. config stays deliberately not null-safe: storage and storageClass are required(), which puts an erased block in the loud class #99 excludes. Apart from an added comment, the rendered manifest is unchanged.
89 lines
2.9 KiB
YAML
89 lines
2.9 KiB
YAML
# Scale the whole chart down without uninstalling it: scaleDown: true renders
|
|
# every Deployment/StatefulSet with replicas: 0 (and suspends CronJobs) and
|
|
# takes precedence over any per-workload replicas value. PVCs, Secrets and
|
|
# Services stay in place; scaleDown: false brings the workloads back up.
|
|
scaleDown: false
|
|
|
|
secrets:
|
|
databaseSecretRef: null
|
|
ziplineSecretRef: null
|
|
|
|
config:
|
|
storage: 50Gi
|
|
storageClass: longhorn
|
|
maxUploadFileSize: 30m
|
|
|
|
zipline:
|
|
# Replica count for this workload; 0 is allowed and scales it down.
|
|
# The chart-global scaleDown flag takes precedence.
|
|
replicas: 1
|
|
# The upstream image ships no dedicated user, but the Node.js server runs
|
|
# fine as an arbitrary non-root uid; fsGroup makes the uploads PVC writable.
|
|
securityContext:
|
|
pod:
|
|
runAsNonRoot: true
|
|
runAsUser: 1000
|
|
runAsGroup: 1000
|
|
fsGroup: 1000
|
|
fsGroupChangePolicy: Always
|
|
container:
|
|
allowPrivilegeEscalation: false
|
|
readOnlyRootFilesystem: true
|
|
runAsNonRoot: true
|
|
capabilities:
|
|
drop:
|
|
- ALL
|
|
# Zipline v4 exposes /api/healthcheck (checks server and database health);
|
|
# the endpoint is enabled by default (config.features.healthcheck). Since it
|
|
# includes the database, it is used for readiness/startup only; liveness
|
|
# uses "/" so a database outage does not restart the pod.
|
|
livenessProbe:
|
|
httpGet:
|
|
path: /
|
|
port: zipline-server
|
|
periodSeconds: 10
|
|
timeoutSeconds: 5
|
|
failureThreshold: 3
|
|
readinessProbe:
|
|
httpGet:
|
|
path: /api/healthcheck
|
|
port: zipline-server
|
|
periodSeconds: 10
|
|
timeoutSeconds: 5
|
|
failureThreshold: 3
|
|
# The startup probe gates liveness/readiness. Zipline runs database
|
|
# migrations on startup, so grant a generous budget: 10s * 30 = 300s.
|
|
startupProbe:
|
|
httpGet:
|
|
path: /api/healthcheck
|
|
port: zipline-server
|
|
periodSeconds: 10
|
|
timeoutSeconds: 5
|
|
failureThreshold: 30
|
|
resources:
|
|
# Limits are optional: memory and ephemeral-storage limits default to
|
|
# limitFactor x the request, an explicitly set limit always wins, and a
|
|
# CPU limit is only set when configured explicitly under "limits".
|
|
limitFactor: 3
|
|
requests:
|
|
cpu: 0.1
|
|
memory: 265Mi
|
|
ephemeralStorage: 100Mi
|
|
# Extra environment variables, appended to the ones the chart always sets.
|
|
# Rendered through tpl; value, secretKeyRef and configMapKeyRef forms are
|
|
# supported (see template-chart).
|
|
env: []
|
|
|
|
ingress:
|
|
# Set to false to omit the Ingress entirely. Note that ingress.domain stays
|
|
# required even then: it is also the app's default domain for generated
|
|
# share links (CORE_DEFAULT_DOMAIN), not just the Ingress host. Only
|
|
# clusterIssuer becomes unnecessary.
|
|
enabled: true
|
|
clusterIssuer: null
|
|
domain: null
|
|
className: nginx
|
|
# Extra annotations for the Ingress; merged with the cert-manager
|
|
# cluster-issuer and upload-size annotations the chart always sets.
|
|
annotations: {}
|