Background
Spun out of the review on #337 (per reviewer request — future work, not folded into that PR).
Problem
The restore agent ships a single compiled etcdutl (3.6.x in the current build). At restore time it rebuilds the data dir with that bundled etcdutl regardless of the cluster's spec.version. So restore is silently pinned to the operator's own etcd minor: for any cluster running a different minor, spec.bootstrap.restore is effectively unsupported, and a mismatched binary could rebuild the data dir in the wrong format before etcd boots on it.
This is documented today as a constraint (docs say spec.version and the bundled etcdutl must share a minor), but it blocks supporting multiple etcd versions.
Proposal
If the operator is to support running multiple etcd versions, the restore agent must run an etcdutl matching the target spec.version (or the observed version from #338), not the single compiled-in one — e.g. select/fetch a version-matched etcdutl, or run restore from a per-version image.
Why it matters
Without this, restore-on-bootstrap is only safe for clusters on the operator's own etcd minor. Pairs naturally with #338 (observed version) as the inputs for selecting the right etcdutl.
Refs: #337, #338
Background
Spun out of the review on #337 (per reviewer request — future work, not folded into that PR).
Problem
The restore agent ships a single compiled
etcdutl(3.6.x in the current build). At restore time it rebuilds the data dir with that bundledetcdutlregardless of the cluster'sspec.version. So restore is silently pinned to the operator's own etcd minor: for any cluster running a different minor,spec.bootstrap.restoreis effectively unsupported, and a mismatched binary could rebuild the data dir in the wrong format before etcd boots on it.This is documented today as a constraint (docs say
spec.versionand the bundledetcdutlmust share a minor), but it blocks supporting multiple etcd versions.Proposal
If the operator is to support running multiple etcd versions, the restore agent must run an
etcdutlmatching the targetspec.version(or the observed version from #338), not the single compiled-in one — e.g. select/fetch a version-matchedetcdutl, or run restore from a per-version image.Why it matters
Without this, restore-on-bootstrap is only safe for clusters on the operator's own etcd minor. Pairs naturally with #338 (observed version) as the inputs for selecting the right
etcdutl.Refs: #337, #338