Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

contributing KEPs in SIG Node: best practices #8005

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
84 changes: 79 additions & 5 deletions sig-node/CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,24 +2,98 @@

Welcome!

## For Kubernetes Contributions
Thank you for your interest in contributing to SIG Node. SIG Node is one of the biggest SIGs in Kubernetes.
Reliability and performance of millions of nodes running critical applications in production rely on the quality of your contribution(s).
The diversity of workloads, environments, and the scale SIG Node needs to support makes every code change risky as all the side effects need to be evaluated.
And the contribution can realistically only be evaluated by a small set of maintainers.
Comment on lines +7 to +8

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not a huge fan of this clause and sentence

as all the side effects need to be evaluated.
And the contribution can realistically only be evaluated by a small set of maintainers.

I think the broader point you're trying to make is the bar is very high for a contributor and maintainers have low bandwidth to fully work through all the possible reprocussions of a contribution. I think that's true and it can be spelled out, but I think it's tricky to word it without fully discouraging contributions you know?

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

plus the first clause

The diversity of workloads, environments, and the scale SIG Node needs to support makes every code change risky

captures that intent


Please make sure you understand and are up to the challenge. The contributing instructions are designed to help you.

## For Kubernetes Code Contributions

Read the [Kubernetes Contributor Guide](https://github.com/kubernetes/community/tree/master/contributors/guide#contributor-guide).

If you aspire to grow scope in the SIG, please review the [SIG Node contributor ladder](./sig-node-contributor-ladder.md) for SIG specific guidance.

### For Enhancements

SIG Node enhancements are available in the <https://github.com/kubernetes/enhancements/tree/master/keps/sig-node>.
Find out if [your thing is an enhancement a.k.a KEP](https://github.com/kubernetes/enhancements/?tab=readme-ov-file#is-my-thing-an-enhancement).
SergeyKanzhelev marked this conversation as resolved.
Show resolved Hide resolved
A good way to do that is to open and issue and get feedback from node reviewers and approvers. You can even come present your idea at a weekly sig-node meeting.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

SIG Node* ?


If you plan to contribute an enhancement, please prepare yourself for at least 1 year of engagement.
A KEP takes at least 3 kubernetes releases to move from alpha to beta to GA. If there are API / kubelet skew considerations, it may take even longer.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this is now 4, as beta is commonly 2 stages now

SIG Node expects contributors to commit to land a KEP to GA stage to avoid [permanent betas](https://kubernetes.io/blog/2020/08/21/moving-forward-from-beta/#avoiding-permanent-beta).

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

WDYT of

SIG Node expects that contributors commit to taking a KEP to GA stage to avoid

It is always surprising how much work is needed to productize the feature after it seems complete.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

what do you mean by productize here?


If you are not ready for this commitment, you can consider teaming up with other contributors in the community or contribute
to a KEP driven by somebody else.

SIG Node enhancements are available:
- Committed KEPs [directory](https://github.com/kubernetes/enhancements/tree/master/keps/sig-node)
- All open KEPs [tracking issues](https://github.com/kubernetes/enhancements/issues?q=is%3Aissue+is%3Aopen+label%3Asig%2Fnode+)

Here are some best practices how to approach KEP development:
It is based on a [talk](https://kcsna2023.sched.com/event/1Sp9i/implementing-a-big-feature-on-an-example-of-a-sidecar-container-kep)
*"Implementing a big feature on an example of a Sidecar container KEP"*
([Recording](https://www.youtube.com/watch?v=c3iV8E8EDUA), [Slides](https://static.sched.com/hosted_files/kcsna2023/a0/KCS-NA-2023-ppt.pdf)).

#### Before Starting

* **Prove the need**: Clearly articulate the problem the KEP addresses, identify the target audience, and demonstrate the community-wide benefits.
* **Secure sponsorship and reviews**: Find sponsors, reviewers, and approvers early in the process to ensure alignment and avoid delays.
* **Show commitment**: Demonstrate dedication to the KEP's success by actively working on its implementation and ensuring code quality.
* **Manage expectations**: The KEP process takes time, anticipate at least two releases for beta and four for GA.

At this stage the expectation is that the proposal is written in general-enough terms as a Google Doc for easy commenting and fast collaborative editing.
Sharing the design document with `[email protected]` for commenting and with SIG members `[email protected]` for commenting or in some cases editing is a good practice.

It is also very helpful to attend SIG Node weekly meeting to present your proposal. Most of the time meeting agenda is open to discuss any proposals.
During the meeting you can gather initial feedback, find collaborators, and secure sponsorship.

#### API Design

* **Define use cases and scope**: Enumerate specific use cases and define the problem's boundaries to avoid scope creep.
* **Consider the bigger picture**: Illustrate how the KEP fits into the existing Kubernetes design and how it will handle future requests.
* **Document decisions**: Record all design decisions, including pros, cons, and responsible individuals.
* **Address potential misuse**: Anticipate potential abuse or misuse scenarios and design the API to mitigate them.
* **Engage reviewers**: Utilize SIG experts for API pre-reviews and PRR pre-reviews to gain support and streamline the review process.

Kubernetes API is a main interface many users experience Kubernetes. API approvers are often the most experienced
community members, who can help ensure the feature fit Kubernetes best practices, will not break compatibility,
and will fit nicely with other Kubernetes capabilities. Even if use cases were approved by SIG Node approvers,
API approvers may reject the proposal and ask to redesign it.

Some KEPs may go back and forth between use cases and API design for many iterations.
This often happens when use cases are not described completely or a lot of context is lost in written feedback.
If the KEP is going in those circles, the recommendation is to request a meeting between SIG Approvers and API approvers driven by KEP author.
It may be a dedicated meeting or an invite of API approvers to SIG Node weekly meeting or SIG Node approvers to API meeting.

Once API approval was received, SIG Node approvers will review it again as SIG always has the last word in the feature design.

Note, SIG approvers may request sign offs from other SIGs like Security, Instrumentation, Storage, Networking, Windows, etc.
The process of getting approval is generally the same.

#### Implementation

* **Structure the implementation**: Divide the implementation into pre-factoring, minimal complete product, and post-API changes for better organization and review.
* **Isolate feature gate logic**: Ensure the mainline code remains unaffected when the feature gate is disabled.
* **Adapt and adjust**: Be prepared to modify the KEP's scope or features based on implementation challenges.
* **Collaborate effectively**: Maintain communication through group chats or meetings and consider using a shared branch for better coordination.
* **Improve the codebase**: Leave the code in a better state than you found it to facilitate future maintenance and enhance your credibility.

By adhering to these best practices, you can increase the chances of your KEP being successfully implemented and accepted.

Sometimes SIG may over-commit on KEPs for the release. And if two big KEPs touching the same code path, SIG may decide to only take one KEP for a release.
Even if this is the case, properly structured KEP implementation will ensure that some progress was made for that release.

#### Helpful Links for Sig-Node
### Helpful Links for SIG Node

**Code**:

For general code organization, read [contributors/devel/README.md](../contributors/devel/README.md) for explaining things like
For general code organization, read [contributors/devel/README.md](../contributors/devel/README.md) to learn about things like
`vendor/`, `staging`, etc.

* Kubelet
* kubelet
* <https://github.com/kubernetes/kubernetes/tree/master/cmd/kubelet>
* <https://github.com/kubernetes/kubernetes/tree/master/pkg/kubelet>
* Probe: <https://github.com/kubernetes/kubernetes/tree/master/pkg/probe>
Expand Down