docs(opensearch): fix the ES-to-OpenSearch migration guide - #826
Open
SuJinpei wants to merge 1 commit into
Open
Conversation
Corrections to How_to_Migrate_from_Elasticsearch_to_OpenSearch.md, found by reviewing it and then running both migration paths end to end against a real ES 7.10.2 / OpenSearch 2.19.6 / OpenSearch 3.3.1 / Elasticsearch 8.17.5 setup. Errors that break a reader following the guide verbatim: - The S3 endpoint was written as "<http://minio.example.com:9000>" in three samples. The angle brackets are markdown autolink syntax that leaked into the YAML value, so the S3 client is pointed at an invalid host. - The repository-s3 download URLs hardcoded versions, while the guide itself states the plugin version must match the node version exactly. Replaced with URL patterns plus the command that reads the running version. - The Elasticsearch init container used an image from an internal registry that customers cannot pull. - The keystore steps read as a single-pod action. The keystore is per-node and reload_secure_settings only reloads what is already on each node. - The snapshot request used "indices": "*" while the note below it advised excluding system indices. - The reindex step extracted mappings with sed, silently dropping the index settings, so any index with a custom analyzer could not be recreated. - OpenSearch was upgraded to 3.3.1 but OpenSearch Dashboards to 3.3.0. - The Phase 1 cluster resource could not start: it omitted spec.bootstrap.pluginsList (additionalConfig is rendered onto the bootstrap pod too, so s3.client.* is an unknown setting there without the plugin) and supplied no admin password (OpenSearch 2.12+ refuses to start without one, and the Operator has no dedicated field for it). - The verification step cited 7102099 as the version.created of an ES 7.10.2 index; the real value is 7100299. The check no longer names a literal, since the number varies with the patch release. Corrections to the explanations: - Reindex from Remote was presented as an ES 8.x-only method. It also works from ES 7.10 and can target OpenSearch 3.x directly, removing the need for an intermediate 2.x cluster. Added a "Choosing a Method" section covering the actual trade-off, including that reindex carries no settings, mappings or aliases. - The ES 8.x section blamed the snapshot incompatibility on a newer Lucene version. Measured, ES 8.17.5 and OpenSearch 2.19.6 are on the same Lucene minor, so that is not the cause; the text now states the behaviour without asserting a reason. - additionalConfig entries become environment variables on every pod, not entries in an opensearch.yml ConfigMap. Corrected everywhere it was described, including the troubleshooting step that told readers to grep ConfigMaps. Additions: - A Troubleshooting section for a node stuck in CrashLoopBackOff after an additionalConfig change, including that a bad key is only rejected at node boot and that the rollout halts at the first failed node. - A warning that reindex.remote.whitelist was removed in OpenSearch 3.x in favour of reindex.remote.allowlist, which is a real failure seen on 3.3.1. - Notes on what a restore does not carry over (index templates, ingest pipelines, ILM policies, users and roles, Kibana saved objects), replica counts on a smaller target, and taking a snapshot before a major upgrade. - Relative links to the sibling OpenSearch guides. The ES 7.10 path is renumbered Phase 0 / 1 / 2; the source-side snapshot steps previously sat in an unnumbered section between the phases. docs/zh is left untouched; it is regenerated from the English source by the pipeline. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
SuJinpei
force-pushed
the
docs/opensearch-migration-fixes
branch
from
August 7, 2026 09:58
4f55f43 to
818144e
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Fixes
How_to_Migrate_from_Elasticsearch_to_OpenSearch.md. The guide was reviewed, then both migration paths were run end to end on a real cluster — ES 7.10.2 (3 nodes) → snapshot to S3 → OpenSearch 2.19.6 → reindex → upgrade to OpenSearch 3.3.1, plus ECK-deployed Elasticsearch 8.17.5 → reindex from remote. Everything below is either a defect that breaks a reader following the guide, or an explanation the run showed to be wrong.Errors that break a reader following the guide verbatim
s3.client.default.endpoint: "<http://minio.example.com:9000>"in 3 samplesrepository-s3URLs hardcoded to specific versionsopensearch-plugin installrefuses a mismatch and the node will not start"indices": "*"while the note below advises excluding system indicessed3.3.1, Dashboards to3.3.0version.createdgiven as7102099for ES 7.10.27100299; the reader never sees the documented numberWhy Phase 1 could not start
spec.bootstrap.pluginsList. Everygeneral.additionalConfigentry is rendered onto the bootstrap pod too, ands3.client.*are only valid settings oncerepository-s3is installed, so the bootstrap pod dies withunknown setting [s3.client.default.region]. The other nodes are pinned to it viacluster.initial_master_nodes, so the cluster never forms. The prerequisites section already showed thebootstrap:block — Phase 1 did not.No custom admin password found.security.config.adminCredentialsSecretdoes not supply it — that is only the credential the Operator uses to reach the cluster — and the bootstrap pod has noenvfield, so it must go throughadditionalConfig.Explanations corrected
additionalConfigbecomes environment variables on every pod, not entries in anopensearch.ymlConfigMap. Corrected everywhere it was described.Added
CrashLoopBackOffafter anadditionalConfigchange: values there are not validated by the Operator, a bad key is only rejected at node boot, and the rollout halts at the first failed node while the rest keep serving the previous config.reindex.remote.whitelistwas removed in OpenSearch 3.x in favour ofreindex.remote.allowlist— a real failure observed on a 3.3.1 cluster:Structure
The ES 7.10 path is renumbered Phase 0 / Phase 1 / Phase 2. Previously the source-side snapshot steps sat in an unnumbered
Proceduresection betweenPrerequisitesandPhase 1, and step numbering restarted three times.Notes for reviewers
docs/zhis regenerated from the English source by the pipeline.7.10.2,2.19.3,3.3.1) are unchanged, but are now explicitly labelled as examples to substitute, with the command to read the running version. Aligning literal version numbers across the whole OpenSearch KB set is a separate change.additionalConfigstores it in plain text in the cluster resource — the warning says so and points atsecurityConfigSecretfor anything long-lived — but if there is a better supported route for OpenSearch 2.12+ on Operator 2.8.x, that belongs here instead.