|
| 1 | +--- |
| 2 | +title: proposal Template |
| 3 | +authors: |
| 4 | + - "@janedoe" |
| 5 | +reviewers: |
| 6 | + - "@janedoe" |
| 7 | +creation-date: yyyy-mm-dd |
| 8 | +last-updated: yyyy-mm-dd |
| 9 | +status: provisional|implementable|implemented|deferred|rejected|withdrawn|replaced |
| 10 | +see-also: |
| 11 | + - "/docs/proposals/20190101-we-heard-you-like-proposals.md" |
| 12 | + - "/docs/proposals/20190102-everyone-gets-a-proposal.md" |
| 13 | +replaces: |
| 14 | + - "/docs/proposals/20181231-replaced-proposal.md" |
| 15 | +superseded-by: |
| 16 | + - "/docs/proposals/20190104-superceding-proposal.md" |
| 17 | +--- |
| 18 | + |
| 19 | +# Title |
| 20 | +- Keep it simple and descriptive. |
| 21 | +- A good title can help communicate what the proposal is and should be considered as part of any review. |
| 22 | + |
| 23 | +<!-- BEGIN Remove before PR --> |
| 24 | +To get started with this template: |
| 25 | +1. **Make a copy of this template.** |
| 26 | + Copy this template into `docs/proposals/` and name it `YYYYMMDD-my-title.md`, where `YYYYMMDD` is the date the proposal was first drafted. |
| 27 | +1. **Fill out the required sections.** |
| 28 | +1. **Create a PR.** |
| 29 | + Aim for single topic PRs to keep discussions focused. |
| 30 | + If you disagree with what is already in a document, open a new PR with suggested changes. |
| 31 | + |
| 32 | +The canonical place for the latest set of instructions (and the likely source of this file) is [here](/docs/proposals/YYYYMMDD-proposal-template.md). |
| 33 | + |
| 34 | +The `Metadata` section above is intended to support the creation of tooling around the proposal process. |
| 35 | +This will be a YAML section that is fenced as a code block. |
| 36 | +See the proposal process for details on each of these items. |
| 37 | + |
| 38 | +<!-- END Remove before PR --> |
| 39 | + |
| 40 | +## Table of Contents |
| 41 | + |
| 42 | +A table of contents is helpful for quickly jumping to sections of a proposal and for highlighting |
| 43 | +any additional information provided beyond the standard proposal template. |
| 44 | +[Tools for generating](https://github.com/ekalinin/github-markdown-toc) a table of contents from markdown are available. |
| 45 | + |
| 46 | +- [Title](#title) |
| 47 | + - [Table of Contents](#table-of-contents) |
| 48 | + - [Summary](#summary) |
| 49 | + - [Motivation](#motivation) |
| 50 | + - [Goals](#goals) |
| 51 | + - [Non-Goals](#non-goals) |
| 52 | + - [Proposal](#proposal) |
| 53 | + - [User Stories [optional]](#user-stories-optional) |
| 54 | + - [Story 1](#story-1) |
| 55 | + - [Story 2](#story-2) |
| 56 | + - [Implementation Details/Notes/Constraints [optional]](#implementation-detailsnotesconstraints-optional) |
| 57 | + - [Risks and Mitigations](#risks-and-mitigations) |
| 58 | + - [Design Details](#design-details) |
| 59 | + - [Test Plan](#test-plan) |
| 60 | + - [Graduation Criteria](#graduation-criteria) |
| 61 | + - [Examples](#examples) |
| 62 | + - [Alpha -> Beta Graduation](#alpha---beta-graduation) |
| 63 | + - [Beta -> GA Graduation](#beta---ga-graduation) |
| 64 | + - [Removing a deprecated flag](#removing-a-deprecated-flag) |
| 65 | + - [Upgrade / Downgrade Strategy](#upgrade--downgrade-strategy) |
| 66 | + - [Version Skew Strategy](#version-skew-strategy) |
| 67 | + - [Implementation History](#implementation-history) |
| 68 | + - [Drawbacks [optional]](#drawbacks-optional) |
| 69 | + - [Alternatives [optional]](#alternatives-optional) |
| 70 | + - [Infrastructure Needed [optional]](#infrastructure-needed-optional) |
| 71 | + |
| 72 | +## Summary |
| 73 | + |
| 74 | +The `Summary` section is incredibly important for producing high quality user-focused documentation such as release notes or a development roadmap. |
| 75 | +It should be possible to collect this information before implementation begins in order to avoid requiring implementors to split their attention between writing release notes and implementing the feature itself. |
| 76 | + |
| 77 | +A good summary is probably at least a paragraph in length. |
| 78 | + |
| 79 | +## Motivation |
| 80 | + |
| 81 | +This section is for explicitly listing the motivation, goals and non-goals of this proposal. |
| 82 | + |
| 83 | +- Describe why the change is important and the benefits to users. |
| 84 | +- The motivation section can optionally provide links to [experience reports](https://github.com/golang/go/wiki/ExperienceReports) |
| 85 | +to demonstrate the interest in a proposal within the wider Kubernetes community. |
| 86 | + |
| 87 | +### Goals |
| 88 | + |
| 89 | +- List the specific goals of the proposal. |
| 90 | +- How will we know that this has succeeded? |
| 91 | + |
| 92 | +### Non-Goals/Future Work |
| 93 | + |
| 94 | +- What is out of scope for this proposal? |
| 95 | +- Listing non-goals helps to focus discussion and make progress. |
| 96 | + |
| 97 | +## Proposal |
| 98 | + |
| 99 | +This is where we get down to the nitty gritty of what the proposal actually is. |
| 100 | + |
| 101 | +- What is the plan for implementing this feature? |
| 102 | +- What data model changes, additions, or removals are required? |
| 103 | +- Provide a scenario, or example. |
| 104 | +- Use diagrams to communicate concepts, flows of execution, and states. |
| 105 | + |
| 106 | +[PlantUML](http://plantuml.com) is the preferred tool to generate diagrams, |
| 107 | +place your `.plantuml` files under `images/` and run `make diagrams` from the docs folder. |
| 108 | + |
| 109 | +### User Stories |
| 110 | + |
| 111 | +- Detail the things that people will be able to do if this proposal is implemented. |
| 112 | +- Include as much detail as possible so that people can understand the "how" of the system. |
| 113 | +- The goal here is to make this feel real for users without getting bogged down. |
| 114 | + |
| 115 | +#### Story 1 |
| 116 | + |
| 117 | +#### Story 2 |
| 118 | + |
| 119 | +### Implementation Details/Notes/Constraints |
| 120 | + |
| 121 | +- What are some important details that didn't come across above. |
| 122 | +- What are the caveats to the implementation? |
| 123 | +- Go in to as much detail as necessary here. |
| 124 | +- Talk about core concepts and how they releate. |
| 125 | + |
| 126 | +### Risks and Mitigations |
| 127 | + |
| 128 | +- What are the risks of this proposal and how do we mitigate? Think broadly. |
| 129 | +- How will UX be reviewed and by whom? |
| 130 | +- How will security be reviewed and by whom? |
| 131 | +- Consider including folks that also work outside the SIG or subproject. |
| 132 | + |
| 133 | +## Alternatives |
| 134 | + |
| 135 | +The `Alternatives` section is used to highlight and record other possible approaches to delivering the value proposed by a proposal. |
| 136 | + |
| 137 | +## Upgrade Strategy |
| 138 | + |
| 139 | +If applicable, how will the component be upgraded? Make sure this is in the test plan. |
| 140 | + |
| 141 | +Consider the following in developing an upgrade strategy for this enhancement: |
| 142 | +- What changes (in invocations, configurations, API use, etc.) is an existing controller required to make on upgrade in order to keep previous behavior? |
| 143 | +- What changes (in invocations, configurations, API use, etc.) is an existing controller required to make on upgrade in order to make use of the enhancement? |
| 144 | + |
| 145 | +## Additional Details |
| 146 | + |
| 147 | +### Test Plan [optional] |
| 148 | + |
| 149 | +**Note:** *Section not required until targeted at a release.* |
| 150 | + |
| 151 | +Consider the following in developing a test plan for this enhancement: |
| 152 | +- Will there be e2e and integration tests, in addition to unit tests? |
| 153 | +- How will it be tested in isolation vs with other components? |
| 154 | + |
| 155 | +No need to outline all of the test cases, just the general strategy. |
| 156 | +Anything that would count as tricky in the implementation and anything particularly challenging to test should be called out. |
| 157 | + |
| 158 | +All code is expected to have adequate tests (eventually with coverage expectations). |
| 159 | +Please adhere to the [Kubernetes testing guidelines][testing-guidelines] when drafting this test plan. |
| 160 | + |
| 161 | +[testing-guidelines]: https://git.k8s.io/community/contributors/devel/sig-testing/testing.md |
| 162 | + |
| 163 | +### Graduation Criteria [optional] |
| 164 | + |
| 165 | +**Note:** *Section not required until targeted at a release.* |
| 166 | + |
| 167 | +Define graduation milestones. |
| 168 | + |
| 169 | +These may be defined in terms of API maturity, or as something else. Initial proposal should keep |
| 170 | +this high-level with a focus on what signals will be looked at to determine graduation. |
| 171 | + |
| 172 | +Consider the following in developing the graduation criteria for this enhancement: |
| 173 | +- [Maturity levels (`alpha`, `beta`, `stable`)][maturity-levels] |
| 174 | +- [Deprecation policy][deprecation-policy] |
| 175 | + |
| 176 | +Clearly define what graduation means by either linking to the [API doc definition](https://kubernetes.io/docs/concepts/overview/kubernetes-api/#api-versioning), |
| 177 | +or by redefining what graduation means. |
| 178 | + |
| 179 | +In general, we try to use the same stages (alpha, beta, GA), regardless how the functionality is accessed. |
| 180 | + |
| 181 | +[maturity-levels]: https://git.k8s.io/community/contributors/devel/sig-architecture/api_changes.md#alpha-beta-and-stable-versions |
| 182 | +[deprecation-policy]: https://kubernetes.io/docs/reference/using-api/deprecation-policy/ |
| 183 | + |
| 184 | +### Version Skew Strategy [optional] |
| 185 | + |
| 186 | +If applicable, how will the component handle version skew with other components? What are the guarantees? Make sure |
| 187 | +this is in the test plan. |
| 188 | + |
| 189 | +Consider the following in developing a version skew strategy for this enhancement: |
| 190 | +- Does this enhancement involve coordinating behavior in the control plane and in the kubelet? How does an n-2 kubelet without this feature available behave when this feature is used? |
| 191 | +- Will any other components on the node change? For example, changes to CSI, CRI or CNI may require updating that component before the kubelet. |
| 192 | + |
| 193 | +## Implementation History |
| 194 | + |
| 195 | +- [ ] MM/DD/YYYY: Proposed idea in an issue or [community meeting] |
| 196 | +- [ ] MM/DD/YYYY: Compile a Google Doc following the CAEP template (link here) |
| 197 | +- [ ] MM/DD/YYYY: First round of feedback from community |
| 198 | +- [ ] MM/DD/YYYY: Present proposal at a [community meeting] |
| 199 | +- [ ] MM/DD/YYYY: Open proposal PR |
| 200 | + |
| 201 | +<!-- Links --> |
| 202 | +[community meeting]: https://docs.google.com/document/d/1Ih-2cgg1bUrLwLVTB9tADlPcVdgnuMNBGbUl4D-0TIk |
0 commit comments