Skip to content

Commit a101040

Browse files
authored
Merge pull request kubernetes#1266 from deads2k/prevent-perma-beta
Require Transition from Beta
2 parents 1fe7599 + 4a74c8f commit a101040

File tree

2 files changed

+168
-0
lines changed

2 files changed

+168
-0
lines changed
Lines changed: 143 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,143 @@
1+
2+
# KEP-1635: Require Transition from Beta
3+
4+
<!-- toc -->
5+
- [Release Signoff Checklist](#release-signoff-checklist)
6+
- [Summary](#summary)
7+
- [Motivation](#motivation)
8+
- [Goals](#goals)
9+
- [Non-Goals](#non-goals)
10+
- [Proposal](#proposal)
11+
- [Impacted APIs](#impacted-apis)
12+
- [sig-apps](#sig-apps)
13+
- [sig-auth](#sig-auth)
14+
- [sig-instrumentation](#sig-instrumentation)
15+
- [sig-network](#sig-network)
16+
- [sig-node](#sig-node)
17+
- [sig-scheduling](#sig-scheduling)
18+
- [Drawbacks](#drawbacks)
19+
<!-- /toc -->
20+
21+
## Release Signoff Checklist
22+
23+
<!--
24+
**ACTION REQUIRED:** In order to merge code into a release, there must be an
25+
issue in [kubernetes/enhancements] referencing this KEP and targeting a release
26+
milestone **before the [Enhancement Freeze](https://git.k8s.io/sig-release/releases)
27+
of the targeted release**.
28+
29+
For enhancements that make changes to code or processes/procedures in core
30+
Kubernetes i.e., [kubernetes/kubernetes], we require the following Release
31+
Signoff checklist to be completed.
32+
33+
Check these off as they are completed for the Release Team to track. These
34+
checklist items _must_ be updated for the enhancement to be released.
35+
-->
36+
37+
- [ ] Enhancement issue in release milestone, which links to KEP dir in [kubernetes/enhancements] (not the initial KEP PR)
38+
- [ ] KEP approvers have approved the KEP status as `implementable`
39+
- [ ] Design details are appropriately documented
40+
- [ ] Test plan is in place, giving consideration to SIG Architecture and SIG Testing input
41+
- [ ] Graduation criteria is in place
42+
- [ ] "Implementation History" section is up-to-date for milestone
43+
- [ ] User-facing documentation has been created in [kubernetes/website], for publication to [kubernetes.io]
44+
- [ ] Supporting documentation e.g., additional design documents, links to mailing list discussions/SIG meetings, relevant PRs/issues, release notes
45+
46+
<!--
47+
**Note:** This checklist is iterative and should be reviewed and updated every time this enhancement is being considered for a milestone.
48+
-->
49+
50+
[kubernetes.io]: https://kubernetes.io/
51+
[kubernetes/enhancements]: https://git.k8s.io/enhancements
52+
[kubernetes/kubernetes]: https://git.k8s.io/kubernetes
53+
[kubernetes/website]: https://git.k8s.io/website
54+
55+
## Summary
56+
57+
k8s.io REST APIs should not languish in beta. They should take feedback and progress towards GA by either
58+
1. meeting GA criteria and getting promoted, or
59+
2. having a new beta and deprecating the previous beta
60+
61+
This must happen within nine months (three releases). If it does not,
62+
the REST API will be deprecated with an announced intent to remove the API per the [deprecation policy](https://kubernetes.io/docs/reference/using-api/deprecation-policy/).
63+
64+
## Motivation
65+
66+
When a REST API reaches beta, it is turned on by default. This is great for getting feedback, but it can also lead to state
67+
where users and vendors start building important infrastructure against APIs that are not considered stable.
68+
In addition, once a REST API is on by default, the incentive to further stabilize appears to diminish.
69+
See the REST API that have been beta for a long time: CSRs and Ingresses as examples.
70+
If we're honest with ourselves, a single actor has been cleaning up behind a lot of the project to unstick perma-beta APIs.
71+
72+
[experience reports]: https://github.com/golang/go/wiki/ExperienceReports
73+
74+
### Goals
75+
76+
1. Prevent k8s.io REST APIs from being in a single beta version for more than nine months.
77+
2. Prevent beta APIs from being treated as GA by users and vendors.
78+
79+
### Non-Goals
80+
81+
1. Promote APIs to GA before they are ready.
82+
2. Control non-k8s.io REST APIs.
83+
3. Control features that are not REST APIs.
84+
4. Control fields on otherwise GA REST APIs.
85+
This will likely be a future goal, but it isn't the goal of this KEP.
86+
87+
## Proposal
88+
89+
Once a REST API reaches beta, it has nine months to
90+
1. reach GA and deprecate the beta or
91+
2. have a new beta version and deprecate the previous beta.
92+
93+
If neither of those conditions met, the beta REST API is deprecated in the third release with a stated intent to remove the REST API entirely.
94+
To avoid removal, the REST API must create a new beta version (it cannot go directly from deprecated to GA).
95+
96+
This means that every beta API will be deprecated in nine months and removed in 18 months.
97+
98+
For example, in v1.16, v1beta1 is released. Sample release note and API doc:
99+
> * "The v1beta1 version of this API will be evaluated during v1.16, v1.17, and v1.18, then deprecated in v1.19 (in favor of a new beta version, a GA version, or with no replacement), then removed in v1.22"
100+
101+
Scenario A - progression to v1beta2 in v1.19. Sample release note and API doc:
102+
> * "The v1beta1 version of this API is deprecated in favor of v1beta2, and will be removed in v1.22"
103+
> * "The v1beta2 version of this API will be evaluated during v1.19, v1.20, and v1.21, then deprecated in v1.22 (in favor of a new beta version, a GA version, or with no replacement), then removed in v1.25"
104+
105+
Scenario B - progression to v1 in v1.19. Sample release note and API doc:
106+
> * "The v1beta1 version of this API is deprecated in favor of v1, and will be removed in v1.22"
107+
108+
Scenario C - deprecation with no replacement. Sample release note and API doc:
109+
> * "The v1beta1 version of this API is deprecated with no replacement, and will be removed in v1.22"
110+
111+
By regularly having new beta versions, we can ensure that consumers will not grow long running dependencies on particular betas which could pin design decisions.
112+
It will also create an incentive for REST API authors to push their APIs to GA instead of letting them live in a permanent beta state.
113+
114+
## Impacted APIs
115+
These sigs will need to announce in 1.19 that these APIs will be deprecated no later than 1.22 and removed no later than 1.25.
116+
This is the same as the standard for new beta APIs introduced in 1.19.
117+
118+
### sig-apps
119+
1. cronjobs.v1beta1.batch
120+
121+
### sig-auth
122+
1. certificatesigningrequests.v1beta1.certificates.k8s.io
123+
2. podsecuritypolicies.v1beta1.policy
124+
125+
### sig-instrumentation
126+
1. events.v1beta1.events.k8s.io
127+
128+
### sig-network
129+
1. endpointslices.v1beta1.discovery.k8s.io
130+
2. ingresses.v1beta1.networking.k8s.io
131+
3. ingressclasses.v1beta1.networking.k8s.io
132+
133+
### sig-node
134+
1. runtimeclasses.v1beta1.node.k8s.io
135+
136+
### sig-scheduling
137+
1. poddisruptionbudgets.v1beta1.policy
138+
139+
## Drawbacks
140+
141+
1. Consumers of beta APIs will be made aware of the status of the APIs and be given clear dates in documentation about
142+
when they will have to update. If the maintainers of these beta APIs do not graduate their API, a new beta version will
143+
need to exist within 18-ish months and early adopters will have to update their manifests to the new version.
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
title: Require Transition from Beta
2+
kep-number: 1635
3+
authors:
4+
- "@deads2k"
5+
owning-sig: sig-architecture
6+
participating-sigs:
7+
- sig-api-machinery
8+
- sig-apps
9+
- sig-architecture
10+
- sig-auth
11+
- sig-instrumentation
12+
- sig-network
13+
- sig-node
14+
- sig-scheduling
15+
status: implementable
16+
creation-date: 2019-10-01
17+
reviewers:
18+
- "@bgrant0607"
19+
- "@liggitt"
20+
- "@smarterclayton"
21+
approvers:
22+
- "@derekwaynecarr"
23+
- "@johnbelamaric"
24+
see-also:
25+
replaces:

0 commit comments

Comments
 (0)