Added feature-gates deprecation guidelines and policy as per discussi… (#10294)
* Added feature-gates deprecation guidelines and policy as per discussion: SIG-architecture meeting * Update deprecation-policy.md Fixes and initial feedback incorporated. * Removed unneeded sentence Removed complicated sentence that is better phrased one sentence later. * Incorporated feedback - Sept 22nd. Re-structured following key ideas from the feedback. * Fixed nits 7th October Fixed nits 7th October * Incorporated feedback Oct 25th Incorporated 'invocation triggers warning' and what to do when disabling a no-op. * fixed "tide" Announced for completed * Incorporated feedback from sig docs
This commit is contained in:
committed by
k8s-ci-robot
parent
273ae81ff3
commit
0347d2388f
@@ -365,6 +365,56 @@ This applies only to significant, user-visible behaviors which impact the
|
|||||||
correctness of applications running on Kubernetes or that impact the
|
correctness of applications running on Kubernetes or that impact the
|
||||||
administration of Kubernetes clusters, and which are being removed entirely.
|
administration of Kubernetes clusters, and which are being removed entirely.
|
||||||
|
|
||||||
|
An exception to the above rule is _feature gates_. Feature gates are key=value
|
||||||
|
pairs that allow for users to enable/disable experimental features.
|
||||||
|
|
||||||
|
Feature gates are intended to cover the development life cycle of a feature - they
|
||||||
|
are not intended to be long-term APIs. As such, they are expected to be deprecated
|
||||||
|
and removed after a feature becomes GA or is dropped.
|
||||||
|
|
||||||
|
As a feature moves through the stages, the associated feature gate evolves.
|
||||||
|
The feature life cycle matched to its corresponding feature gate is:
|
||||||
|
|
||||||
|
* Alpha: the feature gate is disabled by default and can be enabled by the user.
|
||||||
|
* Beta: the feature gate is enabled by default and can be disabled by the user.
|
||||||
|
* GA: the feature gate is deprecated (see ["Deprecation"](#deprecation)) and becomes
|
||||||
|
non-operational.
|
||||||
|
* GA, deprecation window complete: the feature gate is removed and calls to it are
|
||||||
|
no longer accepted.
|
||||||
|
|
||||||
|
### Deprecation
|
||||||
|
|
||||||
|
Features can be removed at any point in the life cycle prior to GA. When features are
|
||||||
|
removed prior to GA, their associated feature gates are also deprecated.
|
||||||
|
|
||||||
|
When an invocation tries to disable a non-operational feature gate, the call fails in order
|
||||||
|
to avoid unsupported scenarios that might otherwise run silently.
|
||||||
|
|
||||||
|
In some cases, removing pre-GA features requires considerable time. Feature gates can remain
|
||||||
|
operational until their associated feature is fully removed, at which point the feature gate
|
||||||
|
itself can be deprecated.
|
||||||
|
|
||||||
|
When removing a feature gate for a GA feature also requires considerable time, calls to
|
||||||
|
feature gates may remain operational if the feature gate has no effect on the feature,
|
||||||
|
and if the feature gate causes no errors.
|
||||||
|
|
||||||
|
Features intended to be disabled by users should include a mechanism for disabling the
|
||||||
|
feature in the associated feature gate.
|
||||||
|
|
||||||
|
Versioning for feature gates is different from the previously discussed components,
|
||||||
|
therefore the rules for deprecation are as follows:
|
||||||
|
|
||||||
|
**Rule #8: Feature gates must be deprecated when the corresponding feature they control
|
||||||
|
transitions a lifecycle stage as follows. Feature gates must function for no less than:**
|
||||||
|
|
||||||
|
* **Beta feature to GA: 6 months or 2 releases (whichever is longer)**
|
||||||
|
* **Beta feature to EOL: 3 months or 1 release (whichever is longer)**
|
||||||
|
* **Alpha feature to EOL: 0 releases**
|
||||||
|
|
||||||
|
**Rule #9: Deprecated feature gates must respond with a warning when used. When a feature gate
|
||||||
|
is deprecated it must be documented in both in the release notes and the corresponding CLI help.
|
||||||
|
Both warnings and documentation must indicate whether a feature gate is non-operational.**
|
||||||
|
|
||||||
## Exceptions
|
## Exceptions
|
||||||
|
|
||||||
No policy can cover every possible situation. This policy is a living
|
No policy can cover every possible situation. This policy is a living
|
||||||
|
|||||||
Reference in New Issue
Block a user