|
| 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. |
0 commit comments