Start using KEPs for new features or breaking changes
This commit is contained in:
parent
589c9a20f9
commit
cb33c4ed26
4 changed files with 245 additions and 0 deletions
28
docs/enhancements/README.md
Normal file
28
docs/enhancements/README.md
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
# Kubernetes Enhancement Proposals (KEPs)
|
||||||
|
|
||||||
|
A Kubernetes Enhancement Proposal (KEP) is a way to propose, communicate and coordinate on new efforts for the Kubernetes project. For this reason, the `ingress-nginx` project is adopting it.
|
||||||
|
|
||||||
|
## Quick start for the KEP process
|
||||||
|
|
||||||
|
Follow the process outlined in the [KEP template](YYYYMMDD-kep-template.md)
|
||||||
|
|
||||||
|
### Do I have to use the KEP process?
|
||||||
|
|
||||||
|
No... but we hope that you will.
|
||||||
|
Over time having a rich set of KEPs in one place will make it easier for people to track what is going on in the community and find a structured historic record.
|
||||||
|
|
||||||
|
KEPs are only required when the changes are wide ranging and impact most of the project.
|
||||||
|
|
||||||
|
### Why would I want to use the KEP process?
|
||||||
|
|
||||||
|
Our aim with KEPs is to clearly communicate new efforts to the Kubernetes contributor community.
|
||||||
|
As such, we want to build a well curated set of clear proposals in a common format with useful metadata.
|
||||||
|
|
||||||
|
Benefits to KEP users (in the limit):
|
||||||
|
|
||||||
|
* Exposure on a kubernetes blessed web site that is findable via web search engines.
|
||||||
|
* Cross indexing of KEPs so that users can find connections and the current status of any KEP.
|
||||||
|
* A clear process with approvers and reviewers for making decisions.
|
||||||
|
This will lead to more structured decisions that stick as there is a discoverable record around the decisions.
|
||||||
|
|
||||||
|
We are inspired by IETF RFCs, Python PEPs, and Rust RFCs.
|
182
docs/enhancements/YYYYMMDD-kep-template.md
Normal file
182
docs/enhancements/YYYYMMDD-kep-template.md
Normal file
|
@ -0,0 +1,182 @@
|
||||||
|
---
|
||||||
|
title: KEP Template
|
||||||
|
authors:
|
||||||
|
- "@janedoe"
|
||||||
|
reviewers:
|
||||||
|
- TBD
|
||||||
|
- "@alicedoe"
|
||||||
|
approvers:
|
||||||
|
- TBD
|
||||||
|
- "@oscardoe"
|
||||||
|
editor: TBD
|
||||||
|
creation-date: yyyy-mm-dd
|
||||||
|
last-updated: yyyy-mm-dd
|
||||||
|
status: provisional|implementable|implemented|deferred|rejected|withdrawn|replaced
|
||||||
|
see-also:
|
||||||
|
- "/docs/enhancements/20190101-we-heard-you-like-keps.md"
|
||||||
|
- "/docs/enhancements/20190102-everyone-gets-a-kep.md"
|
||||||
|
replaces:
|
||||||
|
- "/docs/enhancements/20181231-replaced-kep.md"
|
||||||
|
superseded-by:
|
||||||
|
- "/docs/enhancements/20190104-superceding-kep.md"
|
||||||
|
---
|
||||||
|
|
||||||
|
# Title
|
||||||
|
|
||||||
|
This is the title of the KEP.
|
||||||
|
Keep it simple and descriptive.
|
||||||
|
A good title can help communicate what the KEP is and should be considered as part of any review.
|
||||||
|
|
||||||
|
The title should be lowercased and spaces/punctuation should be replaced with `-`.
|
||||||
|
|
||||||
|
To get started with this template:
|
||||||
|
|
||||||
|
1. **Make a copy of this template.**
|
||||||
|
Create a copy of this template and name it `YYYYMMDD-my-title.md`, where `YYYYMMDD` is the date the KEP was first drafted.
|
||||||
|
1. **Fill out the "overview" sections.**
|
||||||
|
This includes the Summary and Motivation sections.
|
||||||
|
These should be easy if you've preflighted the idea of the KEP in an issue.
|
||||||
|
1. **Create a PR.**
|
||||||
|
Assign it to folks that are sponsoring this process.
|
||||||
|
1. **Create an issue**
|
||||||
|
When filing an enhancement tracking issue, please ensure to complete all fields in the template.
|
||||||
|
1. **Merge early.**
|
||||||
|
Avoid getting hung up on specific details and instead aim to get the goal of the KEP merged quickly.
|
||||||
|
The best way to do this is to just start with the "Overview" sections and fill out details incrementally in follow on PRs.
|
||||||
|
View anything marked as a `provisional` as a working document and subject to change.
|
||||||
|
Aim for single topic PRs to keep discussions focused.
|
||||||
|
If you disagree with what is already in a document, open a new PR with suggested changes.
|
||||||
|
|
||||||
|
The canonical place for the latest set of instructions (and the likely source of this file) is [here](/keps/YYYYMMDD-kep-template.md).
|
||||||
|
|
||||||
|
The `Metadata` section above is intended to support the creation of tooling around the KEP process.
|
||||||
|
This will be a YAML section that is fenced as a code block.
|
||||||
|
See the KEP process for details on each of these items.
|
||||||
|
|
||||||
|
## Table of Contents
|
||||||
|
|
||||||
|
A table of contents is helpful for quickly jumping to sections of a KEP and for highlighting any additional information provided beyond the standard KEP template.
|
||||||
|
|
||||||
|
Ensure the TOC is wrapped with <code><!-- toc --&rt;<!-- /toc --&rt;</code> tags, and then generate with `hack/update-toc.sh`.
|
||||||
|
|
||||||
|
<!-- toc -->
|
||||||
|
- [Summary](#summary)
|
||||||
|
- [Motivation](#motivation)
|
||||||
|
- [Goals](#goals)
|
||||||
|
- [Non-Goals](#non-goals)
|
||||||
|
- [Proposal](#proposal)
|
||||||
|
- [User Stories [optional]](#user-stories-optional)
|
||||||
|
- [Story 1](#story-1)
|
||||||
|
- [Story 2](#story-2)
|
||||||
|
- [Implementation Details/Notes/Constraints [optional]](#implementation-detailsnotesconstraints-optional)
|
||||||
|
- [Risks and Mitigations](#risks-and-mitigations)
|
||||||
|
- [Design Details](#design-details)
|
||||||
|
- [Test Plan](#test-plan)
|
||||||
|
- [Removing a deprecated flag](#removing-a-deprecated-flag)
|
||||||
|
- [Implementation History](#implementation-history)
|
||||||
|
- [Drawbacks [optional]](#drawbacks-optional)
|
||||||
|
- [Alternatives [optional]](#alternatives-optional)
|
||||||
|
<!-- /toc -->
|
||||||
|
|
||||||
|
## Summary
|
||||||
|
|
||||||
|
The `Summary` section is incredibly important for producing high quality user-focused documentation such as release notes or a development roadmap.
|
||||||
|
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.
|
||||||
|
|
||||||
|
A good summary is probably at least a paragraph in length.
|
||||||
|
|
||||||
|
## Motivation
|
||||||
|
|
||||||
|
This section is for explicitly listing the motivation, goals and non-goals of this KEP.
|
||||||
|
Describe why the change is important and the benefits to users.
|
||||||
|
The motivation section can optionally provide links to [experience reports][] to demonstrate the interest in a KEP within the wider Kubernetes community.
|
||||||
|
|
||||||
|
[experience reports]: https://github.com/golang/go/wiki/ExperienceReports
|
||||||
|
|
||||||
|
### Goals
|
||||||
|
|
||||||
|
List the specific goals of the KEP.
|
||||||
|
How will we know that this has succeeded?
|
||||||
|
|
||||||
|
### Non-Goals
|
||||||
|
|
||||||
|
What is out of scope for this KEP?
|
||||||
|
Listing non-goals helps to focus discussion and make progress.
|
||||||
|
|
||||||
|
## Proposal
|
||||||
|
|
||||||
|
This is where we get down to the nitty gritty of what the proposal actually is.
|
||||||
|
|
||||||
|
### User Stories [optional]
|
||||||
|
|
||||||
|
Detail the things that people will be able to do if this KEP is implemented.
|
||||||
|
Include as much detail as possible so that people can understand the "how" of the system.
|
||||||
|
The goal here is to make this feel real for users without getting bogged down.
|
||||||
|
|
||||||
|
#### Story 1
|
||||||
|
|
||||||
|
#### Story 2
|
||||||
|
|
||||||
|
### Implementation Details/Notes/Constraints [optional]
|
||||||
|
|
||||||
|
What are the caveats to the implementation?
|
||||||
|
What are some important details that didn't come across above.
|
||||||
|
Go in to as much detail as necessary here.
|
||||||
|
This might be a good place to talk about core concepts and how they releate.
|
||||||
|
|
||||||
|
### Risks and Mitigations
|
||||||
|
|
||||||
|
What are the risks of this proposal and how do we mitigate.
|
||||||
|
Think broadly.
|
||||||
|
For example, consider both security and how this will impact the larger kubernetes ecosystem.
|
||||||
|
|
||||||
|
How will security be reviewed and by whom?
|
||||||
|
How will UX be reviewed and by whom?
|
||||||
|
|
||||||
|
Consider including folks that also work outside project.
|
||||||
|
|
||||||
|
## Design Details
|
||||||
|
|
||||||
|
### Test Plan
|
||||||
|
|
||||||
|
**Note:** *Section not required until targeted at a release.*
|
||||||
|
|
||||||
|
Consider the following in developing a test plan for this enhancement:
|
||||||
|
|
||||||
|
- Will there be e2e and integration tests, in addition to unit tests?
|
||||||
|
- How will it be tested in isolation vs with other components?
|
||||||
|
|
||||||
|
No need to outline all of the test cases, just the general strategy.
|
||||||
|
Anything that would count as tricky in the implementation and anything particularly challenging to test should be called out.
|
||||||
|
|
||||||
|
All code is expected to have adequate tests (eventually with coverage expectations).
|
||||||
|
Please adhere to the [Kubernetes testing guidelines][testing-guidelines] when drafting this test plan.
|
||||||
|
|
||||||
|
[testing-guidelines]: https://git.k8s.io/community/contributors/devel/sig-testing/testing.md
|
||||||
|
|
||||||
|
#### Removing a deprecated flag
|
||||||
|
|
||||||
|
- Announce deprecation and support policy of the existing flag
|
||||||
|
- Two versions passed since introducing the functionality which deprecates the flag (to address version skew)
|
||||||
|
- Address feedback on usage/changed behavior, provided on GitHub issues
|
||||||
|
- Deprecate the flag
|
||||||
|
|
||||||
|
## Implementation History
|
||||||
|
|
||||||
|
Major milestones in the life cycle of a KEP should be tracked in `Implementation History`.
|
||||||
|
Major milestones might include
|
||||||
|
|
||||||
|
- the `Summary` and `Motivation` sections being merged signaling acceptance
|
||||||
|
- the `Proposal` section being merged signaling agreement on a proposed design
|
||||||
|
- the date implementation started
|
||||||
|
- the first Kubernetes release where an initial version of the KEP was available
|
||||||
|
- the version of Kubernetes where the KEP graduated to general availability
|
||||||
|
- when the KEP was retired or superseded
|
||||||
|
|
||||||
|
## Drawbacks [optional]
|
||||||
|
|
||||||
|
Why should this KEP _not_ be implemented.
|
||||||
|
|
||||||
|
## Alternatives [optional]
|
||||||
|
|
||||||
|
Similar to the `Drawbacks` section the `Alternatives` section is used to highlight and record other possible approaches to delivering the value proposed by a KEP.
|
|
@ -21,5 +21,6 @@ limitations under the License.
|
||||||
package tools
|
package tools
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
_ "github.com/tallclair/mdtoc"
|
||||||
_ "k8s.io/code-generator"
|
_ "k8s.io/code-generator"
|
||||||
)
|
)
|
||||||
|
|
34
hack/update-toc.sh
Executable file
34
hack/update-toc.sh
Executable file
|
@ -0,0 +1,34 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Copyright 2019 The Kubernetes Authors.
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
|
||||||
|
set -o errexit
|
||||||
|
set -o nounset
|
||||||
|
set -o pipefail
|
||||||
|
|
||||||
|
export KUBE_ROOT=$(dirname "${BASH_SOURCE}")/..
|
||||||
|
|
||||||
|
# Install tools we need, but only from vendor/...
|
||||||
|
cd ${KUBE_ROOT}
|
||||||
|
go install ./vendor/github.com/tallclair/mdtoc
|
||||||
|
if ! which mdtoc >/dev/null 2>&1; then
|
||||||
|
echo "Can't find mdtoc - is your GOPATH 'bin' in your PATH?" >&2
|
||||||
|
echo " GOPATH: ${GOPATH}" >&2
|
||||||
|
echo " PATH: ${PATH}" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Update tables of contents if necessary.
|
||||||
|
grep --include='*.md' -rl docs/enhancements/* -e '<!-- toc -->' | xargs mdtoc --inplace
|
Loading…
Reference in a new issue