You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
An NVSentinel release can move the bundled Percona versions, and nothing coordinates, validates or announces it. The result is that adopting a release can silently perform a Percona upgrade path that Percona forbids, and can silently roll the operator's replica set.
This is the structural version of #1737. That issue reported the bundled subcharts as internally mismatched (operator 1.23.0 against crVersion 1.21.1) and #1741 fixed it by aligning them, which was the right call. But for a deployment already running the old values, that alignment became an unannounced two-minor jump (1.21 -> 1.23), and Percona's own upgrade docs forbid skipping a minor. A correct consistency fix upstream turned into an unsupported upgrade downstream.
The mechanics
Four version knobs, all independent, with no coordinating input:
Value
Location
operator image tag
psmdb-operator.image.tag
crVersion
psmdb-db.crVersion
mongod image tag
psmdb-db.image.tag
init image tag
psmdb-db.initImage.tag
Verified in the v1.22.0 chart: there is no psmdbVersion-style single input, and no template guard anywhere in charts/mongodb-store/ that validates these against each other.
Four consequences, each confirmed on a live 288-node GB200 cluster:
A release bump moves three of the four at once, because they are subchart defaults.
Two of them roll the replica set. Any change to a field in the PerconaServerMongoDB CR makes the operator run SmartUpdate over the whole replica set, and crVersion and initImage both live there. So a release adoption can include a datastore roll that appears nowhere in the release notes. We saw this concretely: a single added replication.oplogSizeMB restarted all three mongod pods.
Operator/mongod compatibility is a real matrix and nothing checks it. From Percona's version service, operator 1.22.0 certifies mongod up to 8.0.19-7; 8.0.26-11 appears only from 1.23.0. A chart that paired operator 1.22 with mongod 8.0.26-11 would render happily and run an uncertified combination.
The bundled psmdb version is not discoverable from the NVSentinel version. NVSentinel v1.22.0 bundles psmdb-db 1.23.0. The only way to know is to read the subchart's Chart.yaml inside the packaged tarball.
Separately, and quietly: leaving initImage unset lets the operator derive it, which can resolve to an unmirrored percona/percona-server-mongodb-operator:<crVersion> pulled from Docker Hub. On a mirror-only or air-gapped cluster that fails at pod start with no configuration having changed.
What it costs
To move one Percona minor safely on our cluster we ran a four-rung ladder: operator 1.21->1.22, then crVersion+initImage 1.21.1->1.22.0, then operator ->1.23, then crVersion+initImage ->1.23.0. Four PRs, two deliberate datastore rolls, and roughly a day, most of it spent establishing facts this issue is asking to be made explicit: which minor was reachable, which mongod each operator certifies, and which fields roll the datastore.
The two failure modes this creates:
For operators unaware of the coupling: adopting a release skips a Percona minor and rolls their datastore without warning. Neither is visible until something breaks, and the datastore holds every health event.
For operators who are aware: four pins to carry, a manual ladder per minor, and the pin set drifting further from the chart with every release deferred.
Requests, cheapest first
Call out bundled-psmdb version changes in the release notes, explicitly stating that crVersion or initImage changing will roll the replica set. This alone removes most of the surprise, and chore: upgrade percona database #1741's release note is a good precedent, since it did carry an upgrade warning, which is how we caught this in time.
Fail the render when the jump is unsupported. When the deployed crVersion is more than one minor behind the chart's operator version, refuse rather than proceed. There is good precedent for this pattern in the chart already: nvsentinel.pcAuth.enabled fails the render rather than guessing on a non-boolean.
Happy to take (1) or (2) as a PR if that helps. (2) in particular is a small named-template guard, and we have the deployed evidence to write a realistic test for it.
Prerequisites
Summary
An NVSentinel release can move the bundled Percona versions, and nothing coordinates, validates or announces it. The result is that adopting a release can silently perform a Percona upgrade path that Percona forbids, and can silently roll the operator's replica set.
This is the structural version of #1737. That issue reported the bundled subcharts as internally mismatched (operator 1.23.0 against
crVersion1.21.1) and #1741 fixed it by aligning them, which was the right call. But for a deployment already running the old values, that alignment became an unannounced two-minor jump (1.21 -> 1.23), and Percona's own upgrade docs forbid skipping a minor. A correct consistency fix upstream turned into an unsupported upgrade downstream.The mechanics
Four version knobs, all independent, with no coordinating input:
psmdb-operator.image.tagcrVersionpsmdb-db.crVersionpsmdb-db.image.tagpsmdb-db.initImage.tagVerified in the v1.22.0 chart: there is no
psmdbVersion-style single input, and no template guard anywhere incharts/mongodb-store/that validates these against each other.Four consequences, each confirmed on a live 288-node GB200 cluster:
PerconaServerMongoDBCR makes the operator run SmartUpdate over the whole replica set, andcrVersionandinitImageboth live there. So a release adoption can include a datastore roll that appears nowhere in the release notes. We saw this concretely: a single addedreplication.oplogSizeMBrestarted all three mongod pods.Chart.yamlinside the packaged tarball.Separately, and quietly: leaving
initImageunset lets the operator derive it, which can resolve to an unmirroredpercona/percona-server-mongodb-operator:<crVersion>pulled from Docker Hub. On a mirror-only or air-gapped cluster that fails at pod start with no configuration having changed.What it costs
To move one Percona minor safely on our cluster we ran a four-rung ladder: operator 1.21->1.22, then
crVersion+initImage1.21.1->1.22.0, then operator ->1.23, thencrVersion+initImage->1.23.0. Four PRs, two deliberate datastore rolls, and roughly a day, most of it spent establishing facts this issue is asking to be made explicit: which minor was reachable, which mongod each operator certifies, and which fields roll the datastore.The two failure modes this creates:
Requests, cheapest first
crVersionorinitImagechanging will roll the replica set. This alone removes most of the surprise, and chore: upgrade percona database #1741's release note is a good precedent, since it did carry an upgrade warning, which is how we caught this in time.crVersionis more than one minor behind the chart's operator version, refuse rather than proceed. There is good precedent for this pattern in the chart already:nvsentinel.pcAuth.enabledfails the render rather than guessing on a non-boolean.Happy to take (1) or (2) as a PR if that helps. (2) in particular is a small named-template guard, and we have the deployed evidence to write a realistic test for it.