diff --git a/content/en/docs/concepts/configuration/pod-priority-preemption.md b/content/en/docs/concepts/configuration/pod-priority-preemption.md index 9bfc514257..65a4bc4f35 100644 --- a/content/en/docs/concepts/configuration/pod-priority-preemption.md +++ b/content/en/docs/concepts/configuration/pod-priority-preemption.md @@ -65,24 +65,20 @@ PriorityClasses have the option to set `preemptionPolicy: Never`. This will prevent pods of that PriorityClass from preempting other pods. {{< /note >}} -Preemption is controlled by a kube-scheduler flag `disablePreemption`, which is -set to `false` by default. -If you want to disable preemption despite the above note, you can set -`disablePreemption` to `true`. - -This option is available in component configs only and is not available in -old-style command line options. Below is a sample component config to disable -preemption: +Starting from Kubernetes 1.19, Preemption is controlled by a kube-scheduler +plugin: `DefaultPreemption`, which is enabled by default. +If you want to disable preemption despite the above note, below is a sample +component config: ```yaml -apiVersion: kubescheduler.config.k8s.io/v1alpha1 +apiVersion: kubescheduler.config.k8s.io/v1beta1 kind: KubeSchedulerConfiguration -algorithmSource: - provider: DefaultProvider - -... - -disablePreemption: true +profiles: + - schedulerName: default-scheduler + plugins: + postFilter: + disabled: + - name: DefaultPreemption ``` ## PriorityClass diff --git a/content/en/docs/concepts/scheduling-eviction/scheduling-framework.md b/content/en/docs/concepts/scheduling-eviction/scheduling-framework.md index b93a952c6c..1a81914fd9 100644 --- a/content/en/docs/concepts/scheduling-eviction/scheduling-framework.md +++ b/content/en/docs/concepts/scheduling-eviction/scheduling-framework.md @@ -75,6 +75,14 @@ node, the scheduler will call filter plugins in their configured order. If any filter plugin marks the node as infeasible, the remaining plugins will not be called for that node. Nodes may be evaluated concurrently. +### PostFilter {#post-filter} + +These plugins are called after Filter phase, but only when there is no feasible +node. Each plugin is called by their configured order. If any postFilter plugin +marks the node as `Schedulable`, the remaining plugins will not be called. +A typical PostFilter implementation is preemption, which tries to make the pod +schedulable by preempting other Pods. + ### PreScore {#pre-score} These plugins are used to perform "pre-scoring" work, which generates a sharable diff --git a/content/en/docs/reference/scheduling/config.md b/content/en/docs/reference/scheduling/config.md index 1b6e90f15d..035bf33bf7 100644 --- a/content/en/docs/reference/scheduling/config.md +++ b/content/en/docs/reference/scheduling/config.md @@ -158,6 +158,8 @@ extension points: Extension points: `QueueSort`. - `DefaultBinder`: Provides the default binding mechanism. Extension points: `Bind`. +- `DefaultPreemption`: Provides the default preemption mechanism. + Extension points: `PostFilter`. You can also enable the following plugins, through the component config APIs, that are not enabled by default: @@ -199,7 +201,7 @@ profiles: - schedulerName: default-scheduler - schedulerName: no-scoring-scheduler plugins: - prescore: + preScore: disabled: - name: '*' score: @@ -245,6 +247,8 @@ beware of the following changes, if applicable: - `DefaultPodTopologySpread` [plugin](#scheduling-plugins) is renamed to `SelectorSpread`. - `Unreserve` extension point is removed from Profile definition. All `Reserve` plugins implement an `Unreserve` call. +- `.disablePreemption` was removed. Users can disable preemption by disabling the + "DefaultPreemption" PostFilter plugin. ## {{% heading "whatsnext" %}} diff --git a/static/images/docs/scheduling-framework-extensions.png b/static/images/docs/scheduling-framework-extensions.png index 030cb49a5d..d27f89abc4 100644 Binary files a/static/images/docs/scheduling-framework-extensions.png and b/static/images/docs/scheduling-framework-extensions.png differ