22
33## Overview
44Each new release of Gateway API is defined with a "bundle version" that
5- represents the Git tag of a release, such as v0.4 .0. This contains the
5+ represents the Git tag of a release, such as v0.8 .0. This contains the
66following:
77
88* API Types (Go bindings for the resources)
99* CRDs (Kubernetes definitions of the resources)
10- * Validating Webhook
11-
12- ### API Versions (e.g. v1alpha2, v1beta1)
13- Within Gateway API, API versions are primarily used to indicate the stability of
14- a resource. For example, if a resource has not yet graduated to beta, it is
15- still possible that it could either be removed from the API or changed in
16- backwards incompatible ways. For more information on API versions, refer to the
17- [ full Kubernetes API versioning
18- documentation] ( https://kubernetes.io/docs/reference/using-api/#api-versioning ) .
19-
20- ![ Lifecycle of New Gateway API Resources] ( /images/lifecycle-new-resources.png )
21- <!-- Source: https://docs.google.com/presentation/d/1sfZTV-vlisDUIie_iK_B2HqKia_querT6m6T2_vbAk0/edit -->
22-
23- ### Release Channels (e.g. Experimental, Standard)
24- Gateway API provides 2 release channels: an Experimental one and a Standard one.
10+ * Validating Webhook (Will be deprecated in v1.0 release)
11+
12+ ### Release Channels
13+ Release channels are used to indicate feature stability within Gateway API. All
14+ new features and resources start in the Experimental release channel. From that
15+ point, these may graduate to the Standard release channel or be dropped from the
16+ API entirely.
17+
18+ The following diagram provides a high level overview of the lifecycle of a
19+ feature or resource proposed by a new [ GEP] ( /geps/overview/ ) (enhancement
20+ proposal) in Gateway API:
21+
22+ ``` mermaid
23+ flowchart TD
24+ 0([Implementable GEP]) --> A
25+ A>Experimental Channel] --> B([Widely used and working well?])
26+ B -->|Yes| C>Standard Channel]
27+ B -->|No| D([Could Changes Help?])
28+ D -->|Yes| E([Adjust and try again])
29+ D -->|No| F>Remove From API]
30+ E -->A
31+
32+ style A fill:#eeb
33+ style C fill:#beb
34+ style F fill:#ebb
35+ ```
2536
2637The Standard release channel includes:
2738
28- * Resources that have graduated to beta
29- * All fields that have graduated to standard and are no longer considered
30- experimental
39+ * Resources that have graduated to Beta or GA API Versions
40+ * All fields that have graduated to Standard from the Experimental channel
3141
3242The Experimental release channel includes everything in the Standard release
3343channel, plus:
3444
35- * Alpha API resources
36- * New fields that are considered experimental and have not yet graduated to the
37- standard channel
45+ * Resources with Alpha API Versions
46+ * All new fields before they graduate to Standard channel
3847
3948![ Release Channel Overlap] ( /images/release-channel-overlap.svg )
4049<!-- Source: https://docs.google.com/presentation/d/1sfZTV-vlisDUIie_iK_B2HqKia_querT6m6T2_vbAk0/edit -->
4150
42- Release channels are used to indicate feature stability within Gateway API. For
43- example, even if a resource has already graduated to beta, we need a way to test
44- out new fields and features before committing to their long term stability. With
45- upstream Kubernetes APIs, this is accomplished with [ feature
46- gates] ( https://kubernetes.io/docs/reference/command-line-tools-reference/feature-gates/ ) .
47- Unfortunately, CRDs do not have a similar concept yet.
48-
49- Instead of trying to recreate feature gates in this project, we've introduced
50- release channels. Starting in v0.5.0, all new fields and features will start in
51- the Experimental release channel. From that point, these may graduate to the
52- Standard release channel or be dropped from the API entirely. See
53- [ GEP-922] ( /geps/gep-922 ) for a more detailed discussion of this approach to new
54- fields and features.
55-
56- ![ Lifecycle of New Gateway API Fields] ( /images/lifecycle-new-fields.svg )
57- <!-- Source: https://docs.google.com/presentation/d/1sfZTV-vlisDUIie_iK_B2HqKia_querT6m6T2_vbAk0/edit -->
51+ We recommend using the "Standard" release channel by default as it will provide
52+ a stable experience. The "Experimental" feature enables us to iterate on new
53+ features quickly but may include breaking changes and should not be relied on
54+ in production environments.
55+
56+ ### API Versions
57+ Upstream Kubernetes APIs have 3 levels of stability, denoted by alpha, beta, and
58+ GA API versions. In Gateway API, we've narrowed this down to 2 levels of
59+ stability, expressed by our release channels as described above.
60+
61+ In general, this means that when resources graduate from the Experimental
62+ channel to the Standard channel, they'll also be graduating from an Alpha API
63+ Version (v1alpha2) to a GA API Version (v1).
64+
65+ #### Beta
66+ Some resources have already graduated to the Standard API Channel with a Beta
67+ API Version (v1beta1):
68+
69+ * HTTPRoute
70+ * Gateway
71+ * GatewayClass
72+ * ReferenceGrant
73+
74+ In the upcoming v1.0 release, HTTPRoute, Gateway, and GatewayClass will all
75+ graduate to a GA API Version (v1). All future resources that graduate to
76+ Standard channel will include a v1 API version as part of that process.
77+
78+ ReferenceGrant is a special case since it is in the process of [ transitioning
79+ into an upstream Kubernetes
80+ API] ( https://github.com/kubernetes/enhancements/issues/3766 ) that is owned by
81+ [ sig-auth] ( https://github.com/kubernetes/community/blob/master/sig-auth/README.md ) .
82+ Until that is resolved, it is likely that ReferenceGrant will be effectively
83+ frozen as beta in Gateway API. When it is widely available as a built-in
84+ Kubernetes API, we will likely remove it from the Standard Channel of Gateway
85+ API.
5886
5987## Version Indicators
6088Each CRD will be published with annotations that indicate their bundle version
@@ -67,74 +95,61 @@ gateway.networking.k8s.io/channel: standard|experimental
6795
6896## What can Change
6997When using or implementing this API, it is important to understand what can
70- change across API versions.
98+ change across bundle versions.
7199
72100### Patch version (e.g. v0.4.0 -> v0.4.1)
73- * Clarifications to godocs
74- * Updates to CRDs and/or code to fix a bug
75- * Conformance test fixes
76- * Additional conformance test coverage for existing features
77- * Fixes to typos
101+ * API Spec:
102+ * Clarifications
103+ * Correcting typos
104+ * Bug fixes:
105+ * Correcting validation
106+ * Fixes to release process or artifacts
107+ * Conformance tests:
108+ * Fixes for existing tests
109+ * Additional conformance test coverage for existing features
78110
79111### Minor version (e.g. v0.4.0 -> v0.5.0)
80112* Everything that is valid in a patch release
81- * New experimental API fields or resources
82- * Changes to recommended conditions or reasons in status
83- * Loosened validation
84- * Making required fields optional
85- * Removal of experimental fields
86- * Removal of experimental resources
87- * Graduation of fields or resources from experimental to standard track
88- * Changes to conformance tests to match spec updates
89- * Introduction of a new ** API version** , which may also include:
90- * Renamed fields
91- * Anything else that is valid in a new Kubernetes API version
92- * Removal/tombstoning of beta fields
93- * Removal of an API resource following [ Kubernetes deprecation
113+ * Experimental Channel:
114+ * Adding new API fields or resources
115+ * Breaking changes for existing API fields or resources
116+ * Removing API fields or resources without prior deprecation
117+ * Standard Channel:
118+ * Graduation of fields or resources from Experimental to Standard Channel
119+ * Removal of an API resource following [ Kubernetes deprecation
94120 policy] ( https://kubernetes.io/docs/reference/using-api/deprecation-policy/ )
121+ * All Channels:
122+ * Changes to recommended conditions or reasons in status
123+ * Loosened validation (including making required fields optional)
124+ * Changes to conformance tests to match spec updates
125+ * Introduction of a new API version which may include renamed fields or
126+ anything else that is valid in a [ new Kubernetes API
127+ version] ( https://kubernetes.io/docs/reference/using-api/#api-versioning )
95128
96129### Major version (e.g. v0.x to v1.0)
97130* There are no API compatibility guarantees when the major version changes.
98131
99132## Graduation Criteria
133+ For a resource, field, or feature to graduate from Experimental to Standard, it
134+ must meet the following criteria:
100135
101- ### Resources
102-
103- #### Alpha -> Beta
104- A resource to graduate from alpha to beta must meet the following criteria:
105-
106- * Implemented by several implementations.
107- * Conformance test framework is in place, with some coverage of basic
108- functionality.
109- * Validation is well thought out.
110- * Most of the API surface is being exercised by users.
111- * Approval from subproject owners + KEP reviewers.
112-
113- #### Beta -> GA
114-
115- A resource to graduate from beta to GA must meet the following criteria:
116-
117- * Almost all of the fields and behavior have conformance test coverage.
136+ * Full conformance test coverage.
118137* Multiple conformant implementations.
119138* Widespread implementation and usage.
120- * At least 6 months of soak time as a beta API.
139+ * At least 6 months of soak time as an alpha API.
140+ * No significant changes for at least 1 minor release and 3 months
121141* Approval from subproject owners + KEP reviewers.
122142
123- ### Fields
124-
125- #### Experimental -> Standard
126- As described above, field level stability is layered on top of beta and GA
127- resources (no fields in alpha resources can be considered standard). The
128- requirements for a field to graduate from experimental to standard depend on the
129- API version of the resource it is a part of. For a field to be considered
130- standard, it needs to meet the same criteria of the resource it is contained in.
143+ ## Supported Versions
144+ This project aims to provide support for a wide range of Kubernetes versions with
145+ consistent upgrade experiences across versions. To accomplish that, we commit to:
131146
132- If a resource has graduated to beta, an experimental field must meet all of the
133- beta graduation criteria before graduating to standard. Similarly, if a resource
134- has graduated to GA, a field must meet all of the beta and GA graduation
135- criteria. There is one slight variation here, instead of 6 months of soak time
136- as a beta API, a field graduating to standard requires 6 months of soak time as an
137- experimental field .
147+ 1 . Support a minimum of the most recent 5 Kubernetes minor versions.
148+ 2 . Ensure that all standard channel changes between v1beta1 and v1 are fully
149+ compatible and convertible.
150+ 3 . Take every possible effort to avoid introduction of a conversion webhook. If
151+ a conversion webhook needs to be introduced, it will be supported for the
152+ lifetime of the API, or at least until an alternative is available .
138153
139154## Out of Scope
140155### Unreleased APIs
@@ -148,15 +163,3 @@ this project.
148163We do not provide stability guarantees for source code imports. The Interfaces
149164and behavior may change in an unexpected and backwards-incompatible way in any
150165future release.
151-
152- ## Supported Versions
153-
154- This project aims to provide support for a wide range of Kubernetes versions with
155- consistent upgrade experiences across versions. To accomplish that, we commit to:
156-
157- 1 . Support a minimum of the most recent 5 Kubernetes minor versions.
158- 2 . Ensure that all standard channel changes between v1beta1 and v1 are fully
159- compatible and convertible.
160- 3 . Take every possible effort to avoid introduction of a conversion webhook. If
161- a conversion webhook needs to be introduced, it will be supported for the
162- lifetime of the API, or at least until an alternative is available.
0 commit comments