Closes: #399 - Migrate away from bitnami/elasticsearch - #445
Conversation
|
@monotek this is mostly a suggestion from Claude. Could you have a first look to see if this goes in the right direction? I need to do some manual testing. |
There was a problem hiding this comment.
Pull request overview
Migrates the Zammad Helm chart’s bundled Elasticsearch deployment from the Bitnami subchart to Elastic’s official ECK-based eck-elasticsearch chart, updating chart wiring, documentation, and CI to reflect the new operator-managed setup.
Changes:
- Replaced the
bitnami/elasticsearchdependency withelastic/eck-elasticsearch(breaking change; requires ECK operator + CRDs). - Updated Helm templates/helpers to derive Elasticsearch host/user/secret references for the ECK-managed service/credentials.
- Updated README upgrade notes and CI validation to install the operator and validate CRD-backed manifests.
Reviewed changes
Copilot reviewed 11 out of 11 changed files in this pull request and generated 5 comments.
Show a summary per file
| File | Description |
|---|---|
zammad/values.yaml |
Replaced Bitnami Elasticsearch values with ECK Elasticsearch CR values and updated Elasticsearch config defaults/comments. |
zammad/templates/job-init.yaml |
Adjusted init job to source Elasticsearch password via helper-based secret key selection. |
zammad/templates/configmap-init.yaml |
Switched Elasticsearch URL/user composition to helper-based host/user resolution. |
zammad/templates/_helpers.tpl |
Added helpers for ECK host/user/secret name/key resolution used across templates. |
zammad/README.md |
Documented new ECK operator prerequisite and added upgrade notes for 16.x → 17.0.0. |
zammad/ci/full-values.yaml |
Removed now-irrelevant “existingSecret” config for bundled Elasticsearch in CI values. |
zammad/Chart.yaml |
Swapped chart dependency to eck-elasticsearch (aliased as elasticsearch) and bumped chart version to 17.0.0. |
.github/workflows/ci.yaml |
Installs ECK operator in CI before rendering/testing the chart. |
.github/kubeconform.sh |
Added CRD schema location to allow kubeconform validation of CRD-based kinds (ECK resources). |
.github/ct.yaml |
Added Elastic chart repo for chart-testing. |
.editorconfig |
Added shell indentation rules. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
34fde4e to
646097f
Compare
646097f to
dd5582d
Compare
|
@monotek can you take another look at this one, please? I will wait a bit with the merging, but your feedback would be very welcome, especially if you want some changes. I'd probably release this after the upcoming 7.1.3 security release. @fl feel free to also review this, if you have time / tokens. :D |
monotek
left a comment
There was a problem hiding this comment.
LGTM. Have not tested it though...
|
Had a look, here are my thoughts. Short version: I think the direction is right and this is in better shape than most subchart migrations. ECK is genuinely Elastic's supported path, routing the names through helpers is the correct shape, and the CI is doing real work here — the init script calls Most of what I found is documentation and robustness rather than architecture. Things I'd fix before merging1. The TLS instructions in the README don't work as written. The README tells users to set 2. The Elasticsearch version isn't pinned anywhere. It comes from the subchart's own 3. No minimum ECK operator version is documented. The operator's webhook validates the Elasticsearch version against its own supported range ( 4. Long release names will break. ECK caps the 5. Small correctness nit in The fallback is Honestly I'd drop the mirroring altogether: set Worth documenting, not blocking
Two process pointsThe
One questionRequiring a cluster-wide operator with CRDs is a significant new burden for chart users: it needs cluster-admin to install, it can conflict with another team already running ECK at a different version, and it makes our chart no longer self-contained. The ECK operator is also Elastic License 2.0. Given that PostgreSQL went to cloudpirates rather than to an operator, could we write down in #399 why a plain-StatefulSet Elasticsearch chart wasn't viable? I suspect the answer is simply "no well-maintained option exists post-bitnami", which is a perfectly good answer — but this is the decision people will push back on, so having the reasoning on record would help. |
Improved / corrected docs to point out unsupported self-signed.
That's on purpose. I don't want to manage this on my own.
Added to docs.
Improved in the code. Default nameOverride shortened to 'es', added explicit failure for unsupported long names.
Rejected. This would drop support for release-specific names.
Added request for
Since it's a default value change, it would require its own major release. That's why I combined them here.
Comment added. |
|
Thanks, that's a good round of fixes — the fail-fast on the 36-character limit reads well, and the TLS section is much more honest now. Conceded on Two things though: The Fine with not pinning the ES version — that's your call to make, and the failure mode is a loudly failing init job rather than anything that damages data. But could you still add the Zammad-side constraint to the comment in Minor, and entirely up to you: with Also, did you see the |
Just didn't push it - now it's there.
I consider this obsolete. As soon as somebody tries that, CI will catch it, so we can avoid the redundancy.
Added.
Added. |
|
Checked Fair enough on the updatecli note. I verified the CI path does hold: a subchart bump marks the chart changed, One leftover from my first comment that I think just got lost rather than rejected: there's still no note that the Otherwise the only thing I'd still want before this leaves draft is one manual 17 → 18 run against a populated instance, since |
3e307ae to
0e6140e
Compare
Added.
Full manual update test with a long release name conducted successfully. I added one more breaking change: removal of initJob.random name, which was obsolete by today's 17.0.1 release. Review this as well. |
|
Checked The LGTM. Only nit, take it or leave it: the "harmless one-time replacement" line holds unless someone upgrades while the init Job is still running, since Helm prunes the old one and a long migration would be cut off. Narrow enough that I wouldn't bother. |
Which issue this PR fixes
fsGroupChangePolicy: Alwayscauses very slow pod start #378initJob.randomNamesetting nameSpecial notes for your reviewer
Checklist