mirror of
https://github.com/k3s-io/kubernetes.git
synced 2026-01-13 11:25:19 +00:00
Merge pull request #71926 from wgliang/feature/modify-scheduler-result-and-add-log
[scheduler] Modify the scheduling result struct and improve logging f…
This commit is contained in:
@@ -289,15 +289,16 @@ func (sched *Scheduler) recordSchedulingFailure(pod *v1.Pod, err error, reason s
|
||||
})
|
||||
}
|
||||
|
||||
// schedule implements the scheduling algorithm and returns the suggested host.
|
||||
func (sched *Scheduler) schedule(pod *v1.Pod) (string, error) {
|
||||
host, err := sched.config.Algorithm.Schedule(pod, sched.config.NodeLister)
|
||||
// schedule implements the scheduling algorithm and returns the suggested result(host,
|
||||
// evaluated nodes number,feasible nodes number).
|
||||
func (sched *Scheduler) schedule(pod *v1.Pod) (core.ScheduleResult, error) {
|
||||
result, err := sched.config.Algorithm.Schedule(pod, sched.config.NodeLister)
|
||||
if err != nil {
|
||||
pod = pod.DeepCopy()
|
||||
sched.recordSchedulingFailure(pod, err, v1.PodReasonUnschedulable, err.Error())
|
||||
return "", err
|
||||
return core.ScheduleResult{}, err
|
||||
}
|
||||
return host, err
|
||||
return result, err
|
||||
}
|
||||
|
||||
// preempt tries to create room for a pod that has failed to schedule, by preempting lower priority pods if possible.
|
||||
@@ -472,7 +473,7 @@ func (sched *Scheduler) scheduleOne() {
|
||||
|
||||
// Synchronously attempt to find a fit for the pod.
|
||||
start := time.Now()
|
||||
suggestedHost, err := sched.schedule(pod)
|
||||
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
|
||||
// preempt, with the expectation that the next time the pod is tried for scheduling it
|
||||
@@ -511,7 +512,7 @@ func (sched *Scheduler) scheduleOne() {
|
||||
// Otherwise, binding of volumes is started after the pod is assumed, but before pod binding.
|
||||
//
|
||||
// This function modifies 'assumedPod' if volume binding is required.
|
||||
allBound, err := sched.assumeVolumes(assumedPod, suggestedHost)
|
||||
allBound, err := sched.assumeVolumes(assumedPod, scheduleResult.SuggestedHost)
|
||||
if err != nil {
|
||||
klog.Errorf("error assuming volumes: %v", err)
|
||||
metrics.PodScheduleErrors.Inc()
|
||||
@@ -520,7 +521,7 @@ func (sched *Scheduler) scheduleOne() {
|
||||
|
||||
// Run "reserve" plugins.
|
||||
for _, pl := range plugins.ReservePlugins() {
|
||||
if err := pl.Reserve(plugins, assumedPod, suggestedHost); err != nil {
|
||||
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()))
|
||||
@@ -528,8 +529,8 @@ func (sched *Scheduler) scheduleOne() {
|
||||
return
|
||||
}
|
||||
}
|
||||
// assume modifies `assumedPod` by setting NodeName=suggestedHost
|
||||
err = sched.assume(assumedPod, suggestedHost)
|
||||
// assume modifies `assumedPod` by setting NodeName=scheduleResult.SuggestedHost
|
||||
err = sched.assume(assumedPod, scheduleResult.SuggestedHost)
|
||||
if err != nil {
|
||||
klog.Errorf("error assuming pod: %v", err)
|
||||
metrics.PodScheduleErrors.Inc()
|
||||
@@ -549,7 +550,7 @@ func (sched *Scheduler) scheduleOne() {
|
||||
|
||||
// Run "prebind" plugins.
|
||||
for _, pl := range plugins.PrebindPlugins() {
|
||||
approved, err := pl.Prebind(plugins, assumedPod, suggestedHost)
|
||||
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)
|
||||
@@ -575,7 +576,7 @@ func (sched *Scheduler) scheduleOne() {
|
||||
ObjectMeta: metav1.ObjectMeta{Namespace: assumedPod.Namespace, Name: assumedPod.Name, UID: assumedPod.UID},
|
||||
Target: v1.ObjectReference{
|
||||
Kind: "Node",
|
||||
Name: suggestedHost,
|
||||
Name: scheduleResult.SuggestedHost,
|
||||
},
|
||||
})
|
||||
metrics.E2eSchedulingLatency.Observe(metrics.SinceInMicroseconds(start))
|
||||
@@ -583,6 +584,7 @@ func (sched *Scheduler) scheduleOne() {
|
||||
klog.Errorf("error binding pod: %v", err)
|
||||
metrics.PodScheduleErrors.Inc()
|
||||
} else {
|
||||
klog.V(2).Infof("pod %v/%v is bound successfully on node %v, %d nodes evaluated, %d nodes were found feasible", assumedPod.Namespace, assumedPod.Name, scheduleResult.SuggestedHost, scheduleResult.EvaluatedNodes, scheduleResult.FeasibleNodes)
|
||||
metrics.PodScheduleSuccesses.Inc()
|
||||
}
|
||||
}()
|
||||
|
||||
Reference in New Issue
Block a user