Commit d48722a
authored
fix(helm): correct chart docs, examples, and dead config across the board (#5907)
* fix(helm): correct chart docs, examples, and dead config across the board
Audit-driven accuracy pass over the chart's entire documentation surface,
verified by rendering every example against the templates:
- migrations run as an init container on the app pod, not a Job — fix the
README component list, troubleshooting commands, and sim-helm skill refs;
drop the dead migrations-job NetworkPolicy ingress rule
- referenced-but-never-created resources: document the GKE ManagedCertificate
creation (values-gcp), comment out the key-file Secret mount that stuck all
pods in ContainerCreating (values-gcp), enable certManager for the postgres
TLS issuerRef (values-production), add the cert-manager cluster-issuer
annotation nginx needs (values-azure)
- values-external-db: networkPolicy.egress is a list, not a map (the map
rendered an invalid manifest); fill schema-failing placeholder host/username
- realtime >1 replica requires REDIS_URL (Socket.IO Redis adapter) — default
examples to 1 replica with the scaling note, and warn where autoscaling
HPAs override replicaCount
- pod anti-affinity selectors matched nothing (simstudio vs sim name label)
- kubernetes.mdx: install commands were missing required CRON_SECRET and
postgresql password (failed at template time), wrong deployment name in
port-forward, stale version requirements, unsupported key-remapping claim
- remove unimplemented app.secrets.existingSecret.keys from values + schema;
fix README PDB default, cronjob list, /metrics caveat, NOTES secret count,
Azure-only StorageClass in generic examples, dead SOCKET_SERVER_URL and
GOOGLE_CLOUD_* env, ESO apiVersion mismatch, and skill-reference drift
- bump chart to 1.0.1
* fix(helm): review round 1 — scoped example egress, in-tab secret note, copilot Job wording
- external-db example egress scopes to a placeholder database CIDR instead of
to: [] (which allowed every destination on 5432, defeating the isolation
the example teaches)
- kubernetes.mdx cloud tabs state explicitly that they reuse the variables
generated in the Installation block
- Copilot migrations really do run as a Helm-hook Job — restore Job wording
there (only the app migrations are an init container)
* fix(helm): template-sweep fixes — telemetry validity, ESO rollout checksums, dead passwordKey knob
- telemetry: memory_limiter gets the required check_interval (collector
failed startup validation whenever telemetry.enabled=true); the jaeger
exporter was removed from collector-contrib in v0.86 — export to Jaeger
via its native OTLP endpoint instead (otlp/jaeger, default port 4317)
- app/realtime rollout checksums now hash the ExternalSecret manifest too,
mirroring the copilot pattern — with ESO enabled the inline Secret renders
empty, so remoteRefs changes never rolled the pods
- remove the unimplemented existingSecret.passwordKey knob (values, schema,
README, dead helpers): nothing consumed it, and a non-default value
silently produced a DATABASE_URL with an unexpandable placeholder; secrets
must use the standard POSTGRES_PASSWORD / EXTERNAL_DB_PASSWORD keys
- drop the orphaned sim.migrations.labels helper (its only consumer was the
dead NetworkPolicy rule removed earlier)
- helm test pod image resolves through sim.image so global.imageRegistry
mirroring applies; NetworkPolicy realtime-ingress comment reflects actual
traffic direction; smoke unittest suite loads the newly referenced
external-secret template
* chore(helm): bump chart to 1.1.0 with upgrade notes
Removing (inert) documented values keys and changing the rollout-checksum
inputs is a values-surface change — per SemVer chart conventions that is
more than a patch. Adds an Upgrading section documenting the one-time pod
roll, the removed no-op keys, and the Jaeger-over-OTLP change.
* fix(helm): review round — external-db NP opt-in with real-CIDR-first flow, prod Jaeger OTLP endpoint
- external-db example ships networkPolicy disabled so a verbatim install
always reaches the database; the scoped egress rule stays as the documented
opt-in (set your CIDR first, then enable)
- values-production still pointed telemetry.jaeger at the legacy 14250
collector port — now Jaeger's OTLP gRPC endpoint to match the otlp/jaeger
exporter
* feat(helm): autoscaling.realtime.enabled toggle so examples can scale the app without unsafe realtime replicas
Cursor correctly flagged that comment-level warnings didn't stop a verbatim
production/external-db install from running the realtime HPA at minReplicas 2
without REDIS_URL (silent cross-pod event loss). Adds an opt-out toggle
(default true — existing deployments unchanged): the realtime HPA renders only
when autoscaling.realtime.enabled, and the realtime Deployment keeps
spec.replicas under its control when the HPA is excluded. The three
autoscaling examples set it false with the Redis rationale; README and
upgrade notes document the toggle.
* fix(helm): review round — whitelabeled realtime HPA opt-out, external-db isolation on with required CIDR in install flow
- values-whitelabeled now actually sets autoscaling.realtime.enabled: false
(the earlier batch aborted before reaching this file — Cursor caught it)
- external-db keeps networkPolicy enabled (no isolation regression); the DB
egress CIDR is marked REQUIRED and wired into both documented install
commands via --set, so the copy-paste flow sets the real subnet in the same
breath as the DB host
* fix(helm): use a syntactically valid example CIDR in the external-db install commands
An unreplaced <YOUR_DB_CIDR> literal fails Kubernetes CIDR validation and
aborts the install; every sibling placeholder in the same command (host,
username) installs fine and simply doesn't connect until replaced. The CIDR
now behaves the same way: valid example value (10.20.0.0/24), explicitly
marked as the operator's database subnet in both commands and the values
comment.
* fix(helm): remove text after continuation backslashes in external-db install commands
A trailing comment after the line-continuation backslash (and equally a
comment line spliced mid-command) breaks the shell command when copied —
the remaining --set overrides run as separate commands and required-value
validation fails. Both documented commands now reconstruct to bash-clean
multi-line invocations (verified with bash -n); the CIDR guidance lives in
the networkPolicy section comment.
* fix(docs): cloud-tab installs are alternatives via helm upgrade --install
Following Installation and then a cloud tab ran helm install twice for the
same release and failed on the second. The tabs now state they replace the
generic install and use helm upgrade --install, which is idempotent and also
converts an existing generic install to the cloud values.
* fix(docs): honest conversion caveat for cloud-tab upgrades over an existing install
The cloud values rename the bundled Postgres database to simstudio, which
Postgres only applies at first initialization — an in-place conversion of a
generic install would point DATABASE_URL at a nonexistent database. Document
the two safe paths: keep the original name via --set, or uninstall + delete
PVCs and install fresh.
* fix(helm): external-db header install command declares its secrets and includes CRON_SECRET
The primary documented command failed the chart's required-value validation
(missing app.env.CRON_SECRET with cronjobs default-on) and referenced an
undeclared DB_PASSWORD. It now shows the export lines for every variable it
uses and sets CRON_SECRET; both commands verified with bash -n.
* chore(helm): restore values.schema.json formatting — surgical deletions only
The earlier programmatic edit reformatted the whole file (~390 lines of
whitespace churn hiding the 12 real deleted lines). Re-applied the removal
of the dead keys/passwordKey properties as text-level deletions preserving
the original style.
* fix(helm+docs): explicit secret exports in external-db header; conversion must reuse original secrets
- all five export lines are written out (three were only named in a trailing
comment, so a verbatim copy passed empty required values)
- the cloud-conversion caveat now leads with reusing the original secret
values (helm get values) — a regenerated ENCRYPTION_KEY makes previously
encrypted credentials undecryptable1 parent ca2ea00 commit d48722a
27 files changed
Lines changed: 254 additions & 174 deletions
File tree
- apps/docs/content/docs/en/platform/self-hosting
- helm/sim
- .claude/skills/sim-helm
- references
- examples
- templates
- tests
- tests
Lines changed: 19 additions & 7 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
9 | 9 | | |
10 | 10 | | |
11 | 11 | | |
12 | | - | |
13 | | - | |
| 12 | + | |
| 13 | + | |
14 | 14 | | |
15 | 15 | | |
16 | 16 | | |
| |||
23 | 23 | | |
24 | 24 | | |
25 | 25 | | |
| 26 | + | |
| 27 | + | |
26 | 28 | | |
27 | 29 | | |
28 | 30 | | |
29 | 31 | | |
30 | 32 | | |
31 | 33 | | |
| 34 | + | |
| 35 | + | |
32 | 36 | | |
33 | 37 | | |
34 | 38 | | |
35 | 39 | | |
36 | 40 | | |
| 41 | + | |
| 42 | + | |
37 | 43 | | |
38 | 44 | | |
39 | 45 | | |
40 | | - | |
| 46 | + | |
41 | 47 | | |
42 | 48 | | |
43 | 49 | | |
44 | 50 | | |
| 51 | + | |
| 52 | + | |
45 | 53 | | |
46 | 54 | | |
47 | 55 | | |
48 | 56 | | |
49 | 57 | | |
50 | 58 | | |
51 | | - | |
| 59 | + | |
52 | 60 | | |
53 | 61 | | |
54 | 62 | | |
55 | 63 | | |
| 64 | + | |
| 65 | + | |
56 | 66 | | |
57 | 67 | | |
58 | 68 | | |
59 | 69 | | |
60 | 70 | | |
61 | 71 | | |
62 | | - | |
| 72 | + | |
63 | 73 | | |
64 | 74 | | |
65 | 75 | | |
66 | 76 | | |
| 77 | + | |
| 78 | + | |
67 | 79 | | |
68 | 80 | | |
69 | 81 | | |
| |||
115 | 127 | | |
116 | 128 | | |
117 | 129 | | |
118 | | - | |
| 130 | + | |
119 | 131 | | |
120 | 132 | | |
121 | 133 | | |
| |||
130 | 142 | | |
131 | 143 | | |
132 | 144 | | |
133 | | - | |
| 145 | + | |
134 | 146 | | |
135 | 147 | | |
136 | 148 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
121 | 121 | | |
122 | 122 | | |
123 | 123 | | |
124 | | - | |
| 124 | + | |
125 | 125 | | |
126 | 126 | | |
127 | 127 | | |
| |||
136 | 136 | | |
137 | 137 | | |
138 | 138 | | |
139 | | - | |
| 139 | + | |
140 | 140 | | |
141 | 141 | | |
142 | 142 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
24 | 24 | | |
25 | 25 | | |
26 | 26 | | |
27 | | - | |
| 27 | + | |
28 | 28 | | |
29 | 29 | | |
30 | 30 | | |
| |||
Lines changed: 6 additions & 6 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
11 | 11 | | |
12 | 12 | | |
13 | 13 | | |
14 | | - | |
| 14 | + | |
15 | 15 | | |
16 | 16 | | |
17 | 17 | | |
| |||
63 | 63 | | |
64 | 64 | | |
65 | 65 | | |
66 | | - | |
| 66 | + | |
67 | 67 | | |
68 | | - | |
| 68 | + | |
69 | 69 | | |
70 | 70 | | |
71 | 71 | | |
| |||
112 | 112 | | |
113 | 113 | | |
114 | 114 | | |
115 | | - | |
| 115 | + | |
116 | 116 | | |
117 | 117 | | |
118 | 118 | | |
| |||
153 | 153 | | |
154 | 154 | | |
155 | 155 | | |
156 | | - | |
| 156 | + | |
157 | 157 | | |
158 | 158 | | |
159 | 159 | | |
| |||
172 | 172 | | |
173 | 173 | | |
174 | 174 | | |
175 | | - | |
| 175 | + | |
176 | 176 | | |
177 | 177 | | |
178 | 178 | | |
| |||
Lines changed: 2 additions & 2 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
27 | 27 | | |
28 | 28 | | |
29 | 29 | | |
30 | | - | |
| 30 | + | |
31 | 31 | | |
32 | 32 | | |
33 | 33 | | |
| |||
63 | 63 | | |
64 | 64 | | |
65 | 65 | | |
66 | | - | |
| 66 | + | |
67 | 67 | | |
68 | 68 | | |
69 | 69 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2 | 2 | | |
3 | 3 | | |
4 | 4 | | |
5 | | - | |
| 5 | + | |
6 | 6 | | |
7 | 7 | | |
8 | 8 | | |
| |||
0 commit comments