Skip to content

Commit 5da12d9

Browse files
committed
Apply feedback
1 parent c6c0d67 commit 5da12d9

File tree

1 file changed

+50
-25
lines changed
  • keps/sig-architecture/4330-compatibility-versions

1 file changed

+50
-25
lines changed

keps/sig-architecture/4330-compatibility-versions/README.md

Lines changed: 50 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@ tags, and then generate with `hack/update-toc.sh`.
8686
- [Component Flags](#component-flags)
8787
- [--emulation-version](#--emulation-version)
8888
- [--min-compatibility-version](#--min-compatibility-version)
89+
- [Skew](#skew)
8990
- [Changes to Feature Gates](#changes-to-feature-gates)
9091
- [Feature Gate Lifecycles](#feature-gate-lifecycles)
9192
- [Feature gating changes](#feature-gating-changes)
@@ -175,18 +176,24 @@ Items marked with (R) are required *prior to targeting to a milestone / release*
175176

176177
We intend to introduce version compatibility and emulation options to
177178
Kubernetes control plane components to make upgrades safer by increasing the
178-
granularity of steps available to cluster administrators. We will introduce
179-
`--emulation-version` flag to emulate the behavior (APIs, features, ...) of a
180-
prior Kubernetes release version. We will also introduce a
181-
`--min-compatibility-version` flag to control which prior versions of Kubernetes
182-
a control plane component is compatible with (in terms of APIs, features, ...)
183-
and can be rolled back to.
184-
185-
When a emulation version is provided, the [Version skew policy](https://kubernetes.io/releases/version-skew-policy/)
186-
will apply to the emulation version instead of the binary version, allowing binary
187-
versions to be skipped when performing skip version upgrades, so long the
188-
upgrade transitions incrementally through emulation versions according to the
189-
supported version skew constraints.
179+
granularity of steps available to cluster administrators.
180+
181+
We will introduce a `--emulation-version` flag to emulate the capabiliites
182+
(APIs, features, ...) of a prior Kubernetes release version. When used, the
183+
capabilities available will match the emulated version. Any capabilities present
184+
in the binary version that were introduced after the emulation version will be
185+
unavailable and any capabilities removed after the emulation version will be
186+
available. This enables a binary version to emulate the behavior of a previous
187+
version with sufficient fidelity that interoperability with other system
188+
components can be defined in terms of the emulated version.
189+
190+
We will also introduce a `--min-compatibility-version` flag to control the
191+
minimum version a control plane component is compatible with (in terms of
192+
storage versions, validation rules, ...). When used, the component tolerates
193+
workloads that expect the behavior of the specified minimum compatibility
194+
version, component skew ranges extend based on the minimum compatibility
195+
version, and rollbacks can be performed back to the specified minimum
196+
compatibility version.
190197

191198
## Motivation
192199

@@ -208,7 +215,7 @@ achieved failure) and (2) failures are more easily auto-reverted by upgrade
208215
orchestration as we are taking smaller and more incremental steps forward,
209216
which means there is less to “undo” on a failure condition.
210217

211-
that it would be possible to skip binary versions while still performing a
218+
It also becomes possible to skip binary versions while still performing a
212219
stepwise upgrade of Kubernetes control-plane. For example:
213220

214221
- (starting point) binary-version 1.28 (compat-version 1.28)
@@ -239,7 +246,7 @@ Benefits to upgrading binary version independent of emulation version:
239246
addressed before proceeding to subsequent steps. These failures can be
240247
addressed without the disruption and "noise" from failures in subsequent
241248
steps.
242-
- A emulation version rollback can be performed without changing binary version.
249+
- An emulation version rollback can be performed without changing binary version.
243250

244251
A dedicated `--min-compatibility-version` flag provides direct control of when
245252
deprecated features are removed from the API. If the `--min-compatibility-version`
@@ -277,7 +284,7 @@ release for features to settle in as is typically needed for rollback support.
277284
- Support `--emulation-version` for Alpha features. Alpha feature are not
278285
designed to be upgradable, so we will not allow alpha features to be enabled when
279286
`--emulation-version` is set.
280-
- `--min-compatibility-version` will only applies to Beta and GA features. Only
287+
- `--min-compatibility-version` will only apply to Beta and GA features. Only
281288
Alpha features available in the current binary version will be available for enablement
282289
and are allowed to change in behavior across releases in ways that are incompatible
283290
with previous versions.
@@ -316,6 +323,23 @@ version be <= the kube-apiserver binary version, it must also be <= the
316323
exit and report an invalid flag value error telling the user what versions are
317324
allowed.
318325

326+
### Skew
327+
328+
The [Version skew policy](https://kubernetes.io/releases/version-skew-policy/)
329+
rules be defined in terms of compatibility and emulation versions:
330+
331+
- kube-controller-manager, kube-scheduler, and cloud-controller-manager:
332+
- Previously: `1.{binaryMinorVersion-1}`..`{binaryVersion}`
333+
- With this enhancement: `{minCompatibilityVersion}..{emulationVersion}`
334+
335+
- kube-proxy, kubelet:
336+
- Previously: `1.{binaryMinorVersion-3}`..`{binaryVersion}`
337+
- With this enhancement: `{minCompatibilityVersion-2}..{emulationVersion}`
338+
339+
- kubectl:
340+
- Previously: `1.{binaryMinorVersion-1}`..`{binaryVersion+1}`
341+
- With this enhancement: `{minCompatibilityVersion-1}..{emulationVersion+1}`
342+
319343
### Changes to Feature Gates
320344

321345
Features will track version information, i.e.:
@@ -366,12 +390,12 @@ the emulation and compatibility version to determine which features to enable.
366390

367391
#### Feature Gate Lifecycles
368392

369-
`--feature-gates` must behave the same as it did for the Kubernetes version the
370-
emulation and compatibility versions are set to. For example, it must be
371-
possible to use `--feature-gates` to disable features that were beta at the
372-
emulation version. One important implication of this requirement is that feature
373-
gating must be kept in the Kubenetes codebase after a feature has reached GA (or
374-
been removed) to support the emulation and compatibility version ranges.
393+
`--feature-gates` must behave the same as it did for the emulation version. For
394+
example, it must be possible to use `--feature-gates` to disable features that
395+
were beta at the emulation version. One important implication of this
396+
requirement is that feature gating must be kept in the Kubenetes codebase after
397+
a feature has reached GA (or been removed) to support the emulation and
398+
compatibility version ranges.
375399

376400
A feature that is promoted once per release would look something like:
377401

@@ -997,13 +1021,14 @@ No other default behavior is changed.
9971021

9981022
###### Can the feature be disabled once it has been enabled (i.e. can we roll back the enablement)?
9991023

1000-
Yes. Note that when `--emulation-version` flags is defined, the feature flag
1001-
must be turned on (when feature is in Alpha). So to disable the feature, the
1002-
flag must also be removed.
1024+
Yes. Note that when the `--emulation-version` or `--min-compatibility-version` flags is
1025+
set, the feature flag must be turned on (when feature is in Alpha). So to
1026+
disable the feature, the flag must also be removed.
10031027

10041028
###### What happens if we reenable the feature if it was previously rolled back?
10051029

1006-
Behavior is as expected, `--emulation-version` may be set again.
1030+
Behavior is as expected, `--emulation-version` or `--min-compatibility-version`
1031+
may be set again.
10071032

10081033
###### Are there any tests for feature enablement/disablement?
10091034

0 commit comments

Comments
 (0)