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
-[Risk: Increased cost in test due to the need to test changes against the e2e tests of multiple release branches](#risk-increased-cost-in-test-due-to-the-need-to-test-changes-against-the-e2e-tests-of-multiple-release-branches)
98
99
-[Risk: Increased maintenance burden on Kubernetes maintainers](#risk-increased-maintenance-burden-on-kubernetes-maintainers)
99
100
-[Risk: Unintended and out-of-allowance compatibility skew](#risk-unintended-and-out-of-allowance-compatibility-skew)
100
101
-[Design Details](#design-details)
@@ -171,6 +172,16 @@ available to cluster administrators. The "compatibility version" is distinct fro
171
172
the binary version of a Kubernetes component, and can be used to emulate the
172
173
behavior (APIs, features, ...) of a prior Kubernetes release version.
173
174
175
+
"Compatibility version" is not a bug-for-bug compatibility model. It specifically
176
+
controls which APIs, feature gates, configs and flags are enabled to match
177
+
that of a previous release version.
178
+
179
+
The [Version skew policy](https://kubernetes.io/releases/version-skew-policy/)
180
+
will apply to compatibility versions, not binary versions, allowing binary
181
+
versions to be skipped when performing skip version upgrades, so long the
182
+
upgrade transitions incrementally through compatibility versions according
183
+
to the supported version skew constraints.
184
+
174
185
## Motivation
175
186
176
187
The notion of more granular steps in Kubernetes upgrades is attractive because
@@ -241,6 +252,9 @@ Benefits to upgrading binary version independent of compatibility version:
241
252
242
253
### Non-Goals
243
254
255
+
- Support compatibility version for Alpha features. Alpha feature are not
256
+
designed to be upgradable, so we will not allow alpha features to be used in
257
+
conjunction with compatibility version.
244
258
- Changes to Cluster API/kubeadm/KIND/minikube to absorb the compatibility versions
245
259
will be addressed separate from this KEP
246
260
@@ -316,31 +330,34 @@ The lifecycle of the feature would be:
316
330
All feature gating and tracking must remain in code through 1.30 for N-3
| 1.33 | - | **Feature implementation and feature tracking information may be removed from code** |
343
357
358
+
(Features that are deleted before reaching Beta do not require n-3 compatibility
359
+
support since we don't support compatibility version for alpha features)
360
+
344
361
Note that this respects a 1yr deprecation policy.
345
362
346
363
All feature gating and tracking must remain in code through 1.32 for N-3
@@ -473,12 +490,14 @@ removed) at.
473
490
GA APIs should match the exact set of APIs enabled in GA for the Kubernetes version
474
491
the compatibility version is set to.
475
492
476
-
All Alpha and Beta APIs (both off-by-default and on-by-default, if any of those
493
+
All Beta APIs (both off-by-default and on-by-default, if any of those
477
494
still exist) need to behave exactly as they did for the Kubernetes version
478
495
the compatibility version is set to. I.e. `--runtime-config=api/<version>` needs
479
496
to be able to turn on APIs exactly like it did for each Kubernetes version that
480
497
compatibility version can be set to.
481
498
499
+
Alpha APIs may not be enabled in conjunction with compatibility version.
500
+
482
501
### User Stories (Optional)
483
502
484
503
<!--
@@ -529,6 +548,10 @@ This might be a good place to talk about core concepts and how they relate.
529
548
530
549
### Risks and Mitigations
531
550
551
+
### Risk: Increased cost in test due to the need to test changes against the e2e tests of multiple release branches
552
+
553
+
TODO: Establish a plan for this for Alpha. Implement for Beta.
554
+
532
555
#### Risk: Increased maintenance burden on Kubernetes maintainers
533
556
534
557
Why we think this is manageable:
@@ -623,11 +646,11 @@ For Alpha we will add integration test to ensure `--compatibility-version` behav
623
646
624
647
**Transition**|**N-1 Behavior**|**N Behavior**|**Expect when compatibility-version=N-1**|**Expect when compatibility-version=N (or is unset)**
625
648
-----|-----|-----|-----|-----
626
-
Alpha feature introduced|-|off-by-default|feature does not exist, feature gate may not be set|feature enabled only when `--feature-gates=<feature>=true`
649
+
Alpha feature introduced|-|off-by-default|feature does not exist, feature gate may not be set|alpha features may not be used in conjunction with compatibility version
627
650
Alpha feature graduated to Beta|off-by-default|on-by-default|feature enabled only when `--feature-gates=<feature>=true`|feature enabled unless `--feature-gates=<feature>=false`
628
651
Beta feature graduated to GA|on-by-default|on|feature enabled unless `--feature-gates=<feature>=false`|feature always enabled, feature gate may not be set
629
652
Beta feature removed|on-by-default|-|feature enabled unless `--feature-gates=<feature>=false`|feature does not exist
630
-
Alpha API introduced|-|off-by-default|API does not exist|API available only when `--runtime-config=api/v1alpha1=true`
653
+
Alpha API introduced|-|off-by-default|API does not exist|alpha APIs may not be used in conjunction with compatibility version
631
654
Beta API graduated to GA|off-by-default|on|API available only when `--runtime-config=api/v1beta1=true`|API `api/v1` available
632
655
Beta API removed|off-by-default|-|API available only when `--runtime-config=api/v1beta1=true`|API `api/v1beta1` does not exist
633
656
on-by-default Beta API removed|on-by-default|-|API available unless `--runtime-config=api/v1beta1=false`|API `api/v1beta1` does not exist
0 commit comments