mirror of
https://github.com/k3s-io/kubernetes.git
synced 2026-01-06 07:57:35 +00:00
Update scheduler framework plugins to align with the latest changes to the framework design
This commit is contained in:
@@ -17,7 +17,6 @@ limitations under the License.
|
||||
package scheduler
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
@@ -40,6 +39,7 @@ import (
|
||||
kubeschedulerconfig "k8s.io/kubernetes/pkg/scheduler/apis/config"
|
||||
"k8s.io/kubernetes/pkg/scheduler/core"
|
||||
"k8s.io/kubernetes/pkg/scheduler/factory"
|
||||
framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1"
|
||||
internalcache "k8s.io/kubernetes/pkg/scheduler/internal/cache"
|
||||
"k8s.io/kubernetes/pkg/scheduler/metrics"
|
||||
"k8s.io/kubernetes/pkg/scheduler/util"
|
||||
@@ -156,6 +156,7 @@ func New(client clientset.Interface,
|
||||
DisablePreemption: options.disablePreemption,
|
||||
PercentageOfNodesToScore: options.percentageOfNodesToScore,
|
||||
BindTimeoutSeconds: options.bindTimeoutSeconds,
|
||||
Registry: framework.NewRegistry(),
|
||||
})
|
||||
var config *factory.Config
|
||||
source := schedulerAlgorithmSource
|
||||
@@ -434,11 +435,7 @@ func (sched *Scheduler) bind(assumed *v1.Pod, b *v1.Binding) error {
|
||||
|
||||
// scheduleOne does the entire scheduling workflow for a single pod. It is serialized on the scheduling algorithm's host fitting.
|
||||
func (sched *Scheduler) scheduleOne() {
|
||||
plugins := sched.config.PluginSet
|
||||
// Remove all plugin context data at the beginning of a scheduling cycle.
|
||||
if plugins.Data().Ctx != nil {
|
||||
plugins.Data().Ctx.Reset()
|
||||
}
|
||||
fwk := sched.config.Framework
|
||||
|
||||
pod := sched.config.NextPod()
|
||||
// pod could be nil when schedulerQueue is closed
|
||||
@@ -455,6 +452,7 @@ func (sched *Scheduler) scheduleOne() {
|
||||
|
||||
// Synchronously attempt to find a fit for the pod.
|
||||
start := time.Now()
|
||||
pluginContext := framework.NewPluginContext()
|
||||
scheduleResult, err := sched.schedule(pod)
|
||||
if err != nil {
|
||||
// schedule() may have failed because the pod would not fit on any host, so we try to
|
||||
@@ -505,15 +503,12 @@ func (sched *Scheduler) scheduleOne() {
|
||||
}
|
||||
|
||||
// Run "reserve" plugins.
|
||||
for _, pl := range plugins.ReservePlugins() {
|
||||
if err := pl.Reserve(plugins, assumedPod, scheduleResult.SuggestedHost); err != nil {
|
||||
klog.Errorf("error while running %v reserve plugin for pod %v: %v", pl.Name(), assumedPod.Name, err)
|
||||
sched.recordSchedulingFailure(assumedPod, err, SchedulerError,
|
||||
fmt.Sprintf("reserve plugin %v failed", pl.Name()))
|
||||
metrics.PodScheduleErrors.Inc()
|
||||
return
|
||||
}
|
||||
if sts := fwk.RunReservePlugins(pluginContext, assumedPod, scheduleResult.SuggestedHost); !sts.IsSuccess() {
|
||||
sched.recordSchedulingFailure(assumedPod, sts.AsError(), SchedulerError, sts.Message())
|
||||
metrics.PodScheduleErrors.Inc()
|
||||
return
|
||||
}
|
||||
|
||||
// assume modifies `assumedPod` by setting NodeName=scheduleResult.SuggestedHost
|
||||
err = sched.assume(assumedPod, scheduleResult.SuggestedHost)
|
||||
if err != nil {
|
||||
@@ -534,29 +529,20 @@ func (sched *Scheduler) scheduleOne() {
|
||||
}
|
||||
|
||||
// Run "prebind" plugins.
|
||||
for _, pl := range plugins.PrebindPlugins() {
|
||||
approved, err := pl.Prebind(plugins, assumedPod, scheduleResult.SuggestedHost)
|
||||
if err != nil {
|
||||
approved = false
|
||||
klog.Errorf("error while running %v prebind plugin for pod %v: %v", pl.Name(), assumedPod.Name, err)
|
||||
prebindStatus := fwk.RunPrebindPlugins(pluginContext, assumedPod, scheduleResult.SuggestedHost)
|
||||
if !prebindStatus.IsSuccess() {
|
||||
var reason string
|
||||
if prebindStatus.Code() == framework.Unschedulable {
|
||||
reason = v1.PodReasonUnschedulable
|
||||
} else {
|
||||
metrics.PodScheduleErrors.Inc()
|
||||
reason = SchedulerError
|
||||
}
|
||||
if !approved {
|
||||
if forgetErr := sched.Cache().ForgetPod(assumedPod); forgetErr != nil {
|
||||
klog.Errorf("scheduler cache ForgetPod failed: %v", forgetErr)
|
||||
}
|
||||
var reason string
|
||||
if err == nil {
|
||||
msg := fmt.Sprintf("prebind plugin %v rejected pod %v.", pl.Name(), assumedPod.Name)
|
||||
klog.V(4).Infof(msg)
|
||||
err = errors.New(msg)
|
||||
reason = v1.PodReasonUnschedulable
|
||||
} else {
|
||||
reason = SchedulerError
|
||||
}
|
||||
sched.recordSchedulingFailure(assumedPod, err, reason, err.Error())
|
||||
return
|
||||
if forgetErr := sched.Cache().ForgetPod(assumedPod); forgetErr != nil {
|
||||
klog.Errorf("scheduler cache ForgetPod failed: %v", forgetErr)
|
||||
}
|
||||
sched.recordSchedulingFailure(assumedPod, prebindStatus.AsError(), reason, prebindStatus.Message())
|
||||
return
|
||||
}
|
||||
|
||||
err := sched.bind(assumedPod, &v1.Binding{
|
||||
|
||||
Reference in New Issue
Block a user