Skip to content

Commit

Permalink
feat(scheduling): initialize kep for graduating schedule daemonset pods
Browse files Browse the repository at this point in the history
  • Loading branch information
draveness committed Oct 11, 2019
1 parent 6885aec commit 14aebbd
Showing 1 changed file with 126 additions and 0 deletions.
126 changes: 126 additions & 0 deletions keps/sig-scheduling/20191011-graduate-schedule-daemonset-pods-to-ga.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,126 @@
---
title: Graduate ScheduleDaemonSetPods to GA
authors:
- "@draveness"
owning-sig: sig-scheduling
participating-sigs:
- sig-apps
reviewers:
- @k82cn
- TBD
approvers:
- @k82cn
- TBD
editor: @draveness
creation-date: 2019-10-11
last-updated: 2019-10-11
status: provisional
see-also:
- "https://docs.google.com/document/d/10Ch3dhD88mnHYTq9q4jtX3e9e6gpndC78g5Ea6q4JY4/edit#heading=h.dtxm02f9bgaw"
---

# Graduate ScheduleDaemonSetPods to GA

## 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>&lt;!-- toc --&rt;&lt;!-- /toc --&rt;</code> tags, and then generate with `hack/update-toc.sh`.

<!-- toc -->
- [Release Signoff Checklist](#release-signoff-checklist)
- [Summary](#summary)
- [Motivation](#motivation)
- [Goals](#goals)
- [Non-Goals](#non-goals)
- [Proposal](#proposal)
- [Implementation Details/Notes/Constraints](#implementation-detailsnotesconstraints)
- [Risks and Mitigations](#risks-and-mitigations)
- [Design Details](#design-details)
- [Test Plan](#test-plan)
- [Existing Tests](#existing-tests)
- [Needed Tests](#needed-tests)
- [Graduation Criteria](#graduation-criteria)
- [Implementation History](#implementation-history)
<!-- /toc -->

## Release Signoff Checklist

**ACTION REQUIRED:** In order to merge code into a release, there must be an issue in [kubernetes/enhancements] referencing this KEP and targeting a release milestone **before [Enhancement Freeze](https://github.com/kubernetes/sig-release/tree/master/releases)
of the targeted release**.

For enhancements that make changes to code or processes/procedures in core Kubernetes i.e., [kubernetes/kubernetes], we require the following Release Signoff checklist to be completed.

Check these off as they are completed for the Release Team to track. These checklist items _must_ be updated for the enhancement to be released.

- [ ] kubernetes/enhancements issue in release milestone, which links to KEP (this should be a link to the KEP location in kubernetes/enhancements, not the initial KEP PR)
- [ ] KEP approvers have set the KEP status to `implementable`
- [ ] Design details are appropriately documented
- [ ] Test plan is in place, giving consideration to SIG Architecture and SIG Testing input
- [ ] Graduation criteria is in place
- [ ] "Implementation History" section is up-to-date for milestone
- [ ] User-facing documentation has been created in [kubernetes/website], for publication to [kubernetes.io]
- [ ] Supporting documentation e.g., additional design documents, links to mailing list discussions/SIG meetings, relevant PRs/issues, release notes

**Note:** Any PRs to move a KEP to `implementable` or significant changes once it is marked `implementable` should be approved by each of the KEP approvers. If any of those approvers is no longer appropriate than changes to that list should be approved by the remaining approvers and/or the owning SIG (or SIG-arch for cross cutting KEPs).

**Note:** This checklist is iterative and should be reviewed and updated every time this enhancement is being considered for a milestone.

[kubernetes.io]: https://kubernetes.io/
[kubernetes/enhancements]: https://github.com/kubernetes/enhancements/issues
[kubernetes/kubernetes]: https://github.com/kubernetes/kubernetes
[kubernetes/website]: https://github.com/kubernetes/website

## Summary

ScheduleDaemonSetPods has been created in the past to schedule DaemonSet Pods by the default scheduler. We wish to graduate ScheduleDaemonSetPods feature to make scheduling decisions only in the scheduler and remove the scheduling related code in the DaemonSetController.

## Motivation

ScheduleDaemonSetPods has been beta'ed in 1.12.

### Goals

+ Plan to promote ScheduleDaemonSetPods to the stable version.
+ Remove scheduling related codes in DaemonSetController.

### Non-Goals

+ Changing API field or meaning

## Proposal

### Implementation Details/Notes/Constraints

ScheduleDaemonSetPods attaches node affinity to DaemonSet pods, which let the default kubernetes scheduler to schedule pods on specific nodes. The DaemonSet controller uses several scheduler predicates to calculate the nodes which need to schedule DaemonSet pods and create pods with specific NodeAffinity.

### Risks and Mitigations

The major concern for graduating ScheduleDaemonSetPods to the stable version could be the overhead to the scheduler and the startup time of daemons. After we graduate this feature, the scheduler would select nodes for all of the DaemonSet pods, which may cause a lot of pods with NodeAffinity to be processed.

## Design Details

### Test Plan

#### Existing Tests

ScheduleDaemonSetPods currently has multiple tests in various components that use the feature.

#### Needed Tests

As a non-optional feature, there should be a conformance test for ScheduleDaemonSetPods.

### Graduation Criteria

**Note:** *Section not required until targeted at a release.*

- [ ] Graduate ScheduleDaemonSetPods to GA
- [ ] Remove suspenedDaemonPods which handles Pod deleted on the nodes.
- [ ] Refactor nodeShouldRunDaemonPod to remove useless return values
- [ ] Needs a conformance test
- [ ] Update documents to reflect the changes

## Implementation History

+ ScheduleDaemonSetPods was introduced in Kubernetes 1.11 as an alpha version.
+ ScheduleDaemonSetPods was graduated to beta in Kubernetes 1.12.

0 comments on commit 14aebbd

Please sign in to comment.