diff --git a/plugin/pkg/scheduler/scheduler.go b/plugin/pkg/scheduler/scheduler.go index 51858b7b790..e5110d05349 100644 --- a/plugin/pkg/scheduler/scheduler.go +++ b/plugin/pkg/scheduler/scheduler.go @@ -123,6 +123,11 @@ func (s *Scheduler) Run() { func (s *Scheduler) scheduleOne() { pod := s.config.NextPod() + if pod.DeletionTimestamp != nil { + s.config.Recorder.Eventf(pod, v1.EventTypeWarning, "FailedScheduling", "skip schedule deleting pod: %v/%v", pod.Namespace, pod.Name) + glog.V(3).Infof("Skip schedule deleting pod: %v/%v", pod.Namespace, pod.Name) + return + } glog.V(3).Infof("Attempting to schedule pod: %v/%v", pod.Namespace, pod.Name) start := time.Now() diff --git a/plugin/pkg/scheduler/scheduler_test.go b/plugin/pkg/scheduler/scheduler_test.go index fe44fd4e61d..d90f176d6e4 100644 --- a/plugin/pkg/scheduler/scheduler_test.go +++ b/plugin/pkg/scheduler/scheduler_test.go @@ -59,6 +59,16 @@ func podWithID(id, desiredHost string) *v1.Pod { } } +func deletingPod(id string) *v1.Pod { + deletionTimestamp := metav1.Now() + return &v1.Pod{ + ObjectMeta: metav1.ObjectMeta{Name: id, SelfLink: testapi.Default.SelfLink("pods", id), DeletionTimestamp: &deletionTimestamp}, + Spec: v1.PodSpec{ + NodeName: "", + }, + } +} + func podWithPort(id, desiredHost string, port int) *v1.Pod { pod := podWithID(id, desiredHost) pod.Spec.Containers = []v1.Container{ @@ -122,6 +132,10 @@ func TestScheduler(t *testing.T) { expectError: errB, expectErrorPod: podWithID("foo", ""), eventReason: "FailedScheduling", + }, { + sendPod: deletingPod("foo"), + algo: mockScheduler{"", nil}, + eventReason: "FailedScheduling", }, }