diff --git a/pkg/scheduler/framework/plugins/defaultpreemption/BUILD b/pkg/scheduler/framework/plugins/defaultpreemption/BUILD index 2159a2e9bb8..02fed7a58a6 100644 --- a/pkg/scheduler/framework/plugins/defaultpreemption/BUILD +++ b/pkg/scheduler/framework/plugins/defaultpreemption/BUILD @@ -24,6 +24,7 @@ go_library( "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", "//staging/src/k8s.io/client-go/informers:go_default_library", "//staging/src/k8s.io/client-go/kubernetes:go_default_library", + "//staging/src/k8s.io/client-go/listers/core/v1:go_default_library", "//staging/src/k8s.io/client-go/listers/policy/v1beta1:go_default_library", "//staging/src/k8s.io/kube-scheduler/extender/v1:go_default_library", "//vendor/k8s.io/klog/v2:go_default_library", diff --git a/pkg/scheduler/framework/plugins/defaultpreemption/default_preemption.go b/pkg/scheduler/framework/plugins/defaultpreemption/default_preemption.go index ac54d49bcea..f79141fa351 100644 --- a/pkg/scheduler/framework/plugins/defaultpreemption/default_preemption.go +++ b/pkg/scheduler/framework/plugins/defaultpreemption/default_preemption.go @@ -33,6 +33,7 @@ import ( utilfeature "k8s.io/apiserver/pkg/util/feature" "k8s.io/client-go/informers" "k8s.io/client-go/kubernetes" + corelisters "k8s.io/client-go/listers/core/v1" policylisters "k8s.io/client-go/listers/policy/v1beta1" extenderv1 "k8s.io/kube-scheduler/extender/v1" podutil "k8s.io/kubernetes/pkg/api/v1/pod" @@ -52,6 +53,7 @@ const ( // DefaultPreemption is a PostFilter plugin implements the preemption logic. type DefaultPreemption struct { fh framework.FrameworkHandle + podLister corelisters.PodLister pdbLister policylisters.PodDisruptionBudgetLister } @@ -66,6 +68,7 @@ func (pl *DefaultPreemption) Name() string { func New(_ runtime.Object, fh framework.FrameworkHandle) (framework.Plugin, error) { pl := DefaultPreemption{ fh: fh, + podLister: fh.SharedInformerFactory().Core().V1().Pods().Lister(), pdbLister: getPDBLister(fh.SharedInformerFactory()), } return &pl, nil @@ -106,8 +109,10 @@ func (pl *DefaultPreemption) preempt(ctx context.Context, state *framework.Cycle nodeLister := pl.fh.SnapshotSharedLister().NodeInfos() // 0) Fetch the latest version of . - // TODO(Huang-Wei): get pod from informer cache instead of API server. - pod, err := util.GetUpdatedPod(cs, pod) + // It's safe to directly fetch pod here. Because the informer cache has already been + // initialized when creating the Scheduler obj, i.e., factory.go#MakeDefaultErrorFunc(). + // However, tests may need to manually initialize the shared pod informer. + pod, err := pl.podLister.Pods(pod.Namespace).Get(pod.Name) if err != nil { klog.Errorf("Error getting the updated preemptor pod object: %v", err) return "", err diff --git a/pkg/scheduler/framework/plugins/defaultpreemption/default_preemption_test.go b/pkg/scheduler/framework/plugins/defaultpreemption/default_preemption_test.go index 463c21dc25a..4b2b165c1f8 100644 --- a/pkg/scheduler/framework/plugins/defaultpreemption/default_preemption_test.go +++ b/pkg/scheduler/framework/plugins/defaultpreemption/default_preemption_test.go @@ -85,17 +85,6 @@ var ( epochTime6 = metav1.NewTime(time.Unix(0, 6)) ) -func mergeObjs(pod *v1.Pod, pods []*v1.Pod) []runtime.Object { - var objs []runtime.Object - if pod != nil { - objs = append(objs, pod) - } - for i := range pods { - objs = append(objs, pods[i]) - } - return objs -} - func TestPostFilter(t *testing.T) { onePodRes := map[v1.ResourceName]string{v1.ResourcePods: "1"} tests := []struct { @@ -110,9 +99,9 @@ func TestPostFilter(t *testing.T) { }{ { name: "pod with higher priority can be made schedulable", - pod: st.MakePod().Name("p").UID("p").Priority(highPriority).Obj(), + pod: st.MakePod().Name("p").UID("p").Namespace(v1.NamespaceDefault).Priority(highPriority).Obj(), pods: []*v1.Pod{ - st.MakePod().Name("p1").UID("p1").Node("node1").Obj(), + st.MakePod().Name("p1").UID("p1").Namespace(v1.NamespaceDefault).Node("node1").Obj(), }, nodes: []*v1.Node{ st.MakeNode().Name("node1").Capacity(onePodRes).Obj(), @@ -125,9 +114,9 @@ func TestPostFilter(t *testing.T) { }, { name: "pod with tied priority is still unschedulable", - pod: st.MakePod().Name("p").UID("p").Obj(), + pod: st.MakePod().Name("p").UID("p").Namespace(v1.NamespaceDefault).Obj(), pods: []*v1.Pod{ - st.MakePod().Name("p1").UID("p1").Node("node1").Obj(), + st.MakePod().Name("p1").UID("p1").Namespace(v1.NamespaceDefault).Node("node1").Obj(), }, nodes: []*v1.Node{ st.MakeNode().Name("node1").Capacity(onePodRes).Obj(), @@ -140,9 +129,9 @@ func TestPostFilter(t *testing.T) { }, { name: "preemption should respect filteredNodesStatuses", - pod: st.MakePod().Name("p").UID("p").Priority(highPriority).Obj(), + pod: st.MakePod().Name("p").UID("p").Namespace(v1.NamespaceDefault).Priority(highPriority).Obj(), pods: []*v1.Pod{ - st.MakePod().Name("p1").UID("p1").Node("node1").Obj(), + st.MakePod().Name("p1").UID("p1").Namespace(v1.NamespaceDefault).Node("node1").Obj(), }, nodes: []*v1.Node{ st.MakeNode().Name("node1").Capacity(onePodRes).Obj(), @@ -155,10 +144,10 @@ func TestPostFilter(t *testing.T) { }, { name: "pod can be made schedulable on one node", - pod: st.MakePod().Name("p").UID("p").Priority(midPriority).Obj(), + pod: st.MakePod().Name("p").UID("p").Namespace(v1.NamespaceDefault).Priority(midPriority).Obj(), pods: []*v1.Pod{ - st.MakePod().Name("p1").UID("p1").Priority(highPriority).Node("node1").Obj(), - st.MakePod().Name("p2").UID("p2").Priority(lowPriority).Node("node2").Obj(), + st.MakePod().Name("p1").UID("p1").Namespace(v1.NamespaceDefault).Priority(highPriority).Node("node1").Obj(), + st.MakePod().Name("p2").UID("p2").Namespace(v1.NamespaceDefault).Priority(lowPriority).Node("node2").Obj(), }, nodes: []*v1.Node{ st.MakeNode().Name("node1").Capacity(onePodRes).Obj(), @@ -173,10 +162,10 @@ func TestPostFilter(t *testing.T) { }, { name: "preemption result filtered out by extenders", - pod: st.MakePod().Name("p").UID("p").Priority(highPriority).Obj(), + pod: st.MakePod().Name("p").UID("p").Namespace(v1.NamespaceDefault).Priority(highPriority).Obj(), pods: []*v1.Pod{ - st.MakePod().Name("p1").UID("p1").Node("node1").Obj(), - st.MakePod().Name("p2").UID("p2").Node("node2").Obj(), + st.MakePod().Name("p1").UID("p1").Namespace(v1.NamespaceDefault).Node("node1").Obj(), + st.MakePod().Name("p2").UID("p2").Namespace(v1.NamespaceDefault).Node("node2").Obj(), }, nodes: []*v1.Node{ st.MakeNode().Name("node1").Capacity(onePodRes).Obj(), @@ -196,9 +185,18 @@ func TestPostFilter(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - apiObjs := mergeObjs(tt.pod, tt.pods /*, tt.nodes */) - cs := clientsetfake.NewSimpleClientset(apiObjs...) + cs := clientsetfake.NewSimpleClientset() informerFactory := informers.NewSharedInformerFactory(cs, 0) + podInformer := informerFactory.Core().V1().Pods().Informer() + podInformer.GetStore().Add(tt.pod) + for i := range tt.pods { + podInformer.GetStore().Add(tt.pods[i]) + } + // As we use a bare clientset above, it's needed to add a reactor here + // to not fail Victims deletion logic. + cs.PrependReactor("delete", "pods", func(action clienttesting.Action) (bool, runtime.Object, error) { + return true, nil, nil + }) // Register NodeResourceFit as the Filter & PreFilter plugin. registeredPlugins := []st.RegisterPluginFunc{ st.RegisterQueueSortPlugin(queuesort.Name, queuesort.New), @@ -220,6 +218,11 @@ func TestPostFilter(t *testing.T) { if err != nil { t.Fatal(err) } + p := DefaultPreemption{ + fh: f, + podLister: informerFactory.Core().V1().Pods().Lister(), + pdbLister: getPDBLister(informerFactory), + } state := framework.NewCycleState() // Ensure is populated. @@ -227,10 +230,6 @@ func TestPostFilter(t *testing.T) { t.Errorf("Unexpected PreFilter Status: %v", status) } - p := DefaultPreemption{ - fh: f, - pdbLister: getPDBLister(informerFactory), - } gotResult, gotStatus := p.PostFilter(context.TODO(), state, tt.pod, tt.filteredNodesStatuses) if !reflect.DeepEqual(gotStatus, tt.wantStatus) { t.Errorf("Status does not match: %v, want: %v", gotStatus, tt.wantStatus) @@ -1105,7 +1104,7 @@ func TestPreempt(t *testing.T) { }{ { name: "basic preemption logic", - pod: st.MakePod().Name("p").UID("p").Priority(highPriority).Req(veryLargeRes).PreemptionPolicy(v1.PreemptLowerPriority).Obj(), + pod: st.MakePod().Name("p").UID("p").Namespace(v1.NamespaceDefault).Priority(highPriority).Req(veryLargeRes).PreemptionPolicy(v1.PreemptLowerPriority).Obj(), pods: []*v1.Pod{ st.MakePod().Name("p1.1").UID("p1.1").Node("node1").Priority(lowPriority).Req(smallRes).Obj(), st.MakePod().Name("p1.2").UID("p1.2").Node("node1").Priority(lowPriority).Req(smallRes).Obj(), @@ -1119,16 +1118,16 @@ func TestPreempt(t *testing.T) { }, { name: "preemption for topology spread constraints", - pod: st.MakePod().Name("p").UID("p").Label("foo", "").Priority(highPriority). + pod: st.MakePod().Name("p").UID("p").Namespace(v1.NamespaceDefault).Label("foo", "").Priority(highPriority). SpreadConstraint(1, "zone", v1.DoNotSchedule, st.MakeLabelSelector().Exists("foo").Obj()). SpreadConstraint(1, "hostname", v1.DoNotSchedule, st.MakeLabelSelector().Exists("foo").Obj()). Obj(), pods: []*v1.Pod{ - st.MakePod().Name("p-a1").UID("p-a1").Node("node-a").Label("foo", "").Priority(highPriority).Obj(), - st.MakePod().Name("p-a2").UID("p-a2").Node("node-a").Label("foo", "").Priority(highPriority).Obj(), - st.MakePod().Name("p-b1").UID("p-b1").Node("node-b").Label("foo", "").Priority(lowPriority).Obj(), - st.MakePod().Name("p-x1").UID("p-x1").Node("node-x").Label("foo", "").Priority(highPriority).Obj(), - st.MakePod().Name("p-x2").UID("p-x2").Node("node-x").Label("foo", "").Priority(highPriority).Obj(), + st.MakePod().Name("p-a1").UID("p-a1").Namespace(v1.NamespaceDefault).Node("node-a").Label("foo", "").Priority(highPriority).Obj(), + st.MakePod().Name("p-a2").UID("p-a2").Namespace(v1.NamespaceDefault).Node("node-a").Label("foo", "").Priority(highPriority).Obj(), + st.MakePod().Name("p-b1").UID("p-b1").Namespace(v1.NamespaceDefault).Node("node-b").Label("foo", "").Priority(lowPriority).Obj(), + st.MakePod().Name("p-x1").UID("p-x1").Namespace(v1.NamespaceDefault).Node("node-x").Label("foo", "").Priority(highPriority).Obj(), + st.MakePod().Name("p-x2").UID("p-x2").Namespace(v1.NamespaceDefault).Node("node-x").Label("foo", "").Priority(highPriority).Obj(), }, nodeNames: []string{"node-a/zone1", "node-b/zone1", "node-x/zone2"}, registerPlugin: st.RegisterPluginAsExtensions(podtopologyspread.Name, podtopologyspread.New, "PreFilter", "Filter"), @@ -1137,11 +1136,11 @@ func TestPreempt(t *testing.T) { }, { name: "Scheduler extenders allow only node1, otherwise node3 would have been chosen", - pod: st.MakePod().Name("p").UID("p").Priority(highPriority).Req(veryLargeRes).PreemptionPolicy(v1.PreemptLowerPriority).Obj(), + pod: st.MakePod().Name("p").UID("p").Namespace(v1.NamespaceDefault).Priority(highPriority).Req(veryLargeRes).PreemptionPolicy(v1.PreemptLowerPriority).Obj(), pods: []*v1.Pod{ - st.MakePod().Name("p1.1").UID("p1.1").Node("node1").Priority(midPriority).Req(smallRes).Obj(), - st.MakePod().Name("p1.2").UID("p1.2").Node("node1").Priority(lowPriority).Req(smallRes).Obj(), - st.MakePod().Name("p2.1").UID("p2.1").Node("node3").Priority(midPriority).Req(largeRes).Obj(), + st.MakePod().Name("p1.1").UID("p1.1").Namespace(v1.NamespaceDefault).Node("node1").Priority(midPriority).Req(smallRes).Obj(), + st.MakePod().Name("p1.2").UID("p1.2").Namespace(v1.NamespaceDefault).Node("node1").Priority(lowPriority).Req(smallRes).Obj(), + st.MakePod().Name("p2.1").UID("p2.1").Namespace(v1.NamespaceDefault).Node("node3").Priority(midPriority).Req(largeRes).Obj(), }, nodeNames: []string{"node1", "node2", "node3"}, extenders: []*st.FakeExtender{ @@ -1154,11 +1153,11 @@ func TestPreempt(t *testing.T) { }, { name: "Scheduler extenders do not allow any preemption", - pod: st.MakePod().Name("p").UID("p").Priority(highPriority).Req(veryLargeRes).PreemptionPolicy(v1.PreemptLowerPriority).Obj(), + pod: st.MakePod().Name("p").UID("p").Namespace(v1.NamespaceDefault).Priority(highPriority).Req(veryLargeRes).PreemptionPolicy(v1.PreemptLowerPriority).Obj(), pods: []*v1.Pod{ - st.MakePod().Name("p1.1").UID("p1.1").Node("node1").Priority(midPriority).Req(smallRes).Obj(), - st.MakePod().Name("p1.2").UID("p1.2").Node("node1").Priority(lowPriority).Req(smallRes).Obj(), - st.MakePod().Name("p2.1").UID("p2.1").Node("node2").Priority(midPriority).Req(largeRes).Obj(), + st.MakePod().Name("p1.1").UID("p1.1").Namespace(v1.NamespaceDefault).Node("node1").Priority(midPriority).Req(smallRes).Obj(), + st.MakePod().Name("p1.2").UID("p1.2").Namespace(v1.NamespaceDefault).Node("node1").Priority(lowPriority).Req(smallRes).Obj(), + st.MakePod().Name("p2.1").UID("p2.1").Namespace(v1.NamespaceDefault).Node("node2").Priority(midPriority).Req(largeRes).Obj(), }, nodeNames: []string{"node1", "node2", "node3"}, extenders: []*st.FakeExtender{ @@ -1170,11 +1169,11 @@ func TestPreempt(t *testing.T) { }, { name: "One scheduler extender allows only node1, the other returns error but ignorable. Only node1 would be chosen", - pod: st.MakePod().Name("p").UID("p").Priority(highPriority).Req(veryLargeRes).PreemptionPolicy(v1.PreemptLowerPriority).Obj(), + pod: st.MakePod().Name("p").UID("p").Namespace(v1.NamespaceDefault).Priority(highPriority).Req(veryLargeRes).PreemptionPolicy(v1.PreemptLowerPriority).Obj(), pods: []*v1.Pod{ - st.MakePod().Name("p1.1").UID("p1.1").Node("node1").Priority(midPriority).Req(smallRes).Obj(), - st.MakePod().Name("p1.2").UID("p1.2").Node("node1").Priority(lowPriority).Req(smallRes).Obj(), - st.MakePod().Name("p2.1").UID("p2.1").Node("node2").Priority(midPriority).Req(largeRes).Obj(), + st.MakePod().Name("p1.1").UID("p1.1").Namespace(v1.NamespaceDefault).Node("node1").Priority(midPriority).Req(smallRes).Obj(), + st.MakePod().Name("p1.2").UID("p1.2").Namespace(v1.NamespaceDefault).Node("node1").Priority(lowPriority).Req(smallRes).Obj(), + st.MakePod().Name("p2.1").UID("p2.1").Namespace(v1.NamespaceDefault).Node("node2").Priority(midPriority).Req(largeRes).Obj(), }, nodeNames: []string{"node1", "node2", "node3"}, extenders: []*st.FakeExtender{ @@ -1187,11 +1186,11 @@ func TestPreempt(t *testing.T) { }, { name: "One scheduler extender allows only node1, but it is not interested in given pod, otherwise node1 would have been chosen", - pod: st.MakePod().Name("p").UID("p").Priority(highPriority).Req(veryLargeRes).PreemptionPolicy(v1.PreemptLowerPriority).Obj(), + pod: st.MakePod().Name("p").UID("p").Namespace(v1.NamespaceDefault).Priority(highPriority).Req(veryLargeRes).PreemptionPolicy(v1.PreemptLowerPriority).Obj(), pods: []*v1.Pod{ - st.MakePod().Name("p1.1").UID("p1.1").Node("node1").Priority(midPriority).Req(smallRes).Obj(), - st.MakePod().Name("p1.2").UID("p1.2").Node("node1").Priority(lowPriority).Req(smallRes).Obj(), - st.MakePod().Name("p2.1").UID("p2.1").Node("node2").Priority(midPriority).Req(largeRes).Obj(), + st.MakePod().Name("p1.1").UID("p1.1").Namespace(v1.NamespaceDefault).Node("node1").Priority(midPriority).Req(smallRes).Obj(), + st.MakePod().Name("p1.2").UID("p1.2").Namespace(v1.NamespaceDefault).Node("node1").Priority(lowPriority).Req(smallRes).Obj(), + st.MakePod().Name("p2.1").UID("p2.1").Namespace(v1.NamespaceDefault).Node("node2").Priority(midPriority).Req(largeRes).Obj(), }, nodeNames: []string{"node1", "node2"}, extenders: []*st.FakeExtender{ @@ -1205,12 +1204,12 @@ func TestPreempt(t *testing.T) { }, { name: "no preempting in pod", - pod: st.MakePod().Name("p").UID("p").Priority(highPriority).Req(veryLargeRes).PreemptionPolicy(v1.PreemptNever).Obj(), + pod: st.MakePod().Name("p").UID("p").Namespace(v1.NamespaceDefault).Priority(highPriority).Req(veryLargeRes).PreemptionPolicy(v1.PreemptNever).Obj(), pods: []*v1.Pod{ - st.MakePod().Name("p1.1").UID("p1.1").Node("node1").Priority(lowPriority).Req(smallRes).Obj(), - st.MakePod().Name("p1.2").UID("p1.2").Node("node1").Priority(lowPriority).Req(smallRes).Obj(), - st.MakePod().Name("p2.1").UID("p2.1").Node("node2").Priority(highPriority).Req(largeRes).Obj(), - st.MakePod().Name("p3.1").UID("p3.1").Node("node3").Priority(midPriority).Req(mediumRes).Obj(), + st.MakePod().Name("p1.1").UID("p1.1").Namespace(v1.NamespaceDefault).Node("node1").Priority(lowPriority).Req(smallRes).Obj(), + st.MakePod().Name("p1.2").UID("p1.2").Namespace(v1.NamespaceDefault).Node("node1").Priority(lowPriority).Req(smallRes).Obj(), + st.MakePod().Name("p2.1").UID("p2.1").Namespace(v1.NamespaceDefault).Node("node2").Priority(highPriority).Req(largeRes).Obj(), + st.MakePod().Name("p3.1").UID("p3.1").Namespace(v1.NamespaceDefault).Node("node3").Priority(midPriority).Req(mediumRes).Obj(), }, nodeNames: []string{"node1", "node2", "node3"}, registerPlugin: st.RegisterPluginAsExtensions(noderesources.FitName, noderesources.NewFit, "Filter", "PreFilter"), @@ -1219,12 +1218,12 @@ func TestPreempt(t *testing.T) { }, { name: "PreemptionPolicy is nil", - pod: st.MakePod().Name("p").UID("p").Priority(highPriority).Req(veryLargeRes).Obj(), + pod: st.MakePod().Name("p").UID("p").Namespace(v1.NamespaceDefault).Priority(highPriority).Req(veryLargeRes).Obj(), pods: []*v1.Pod{ - st.MakePod().Name("p1.1").UID("p1.1").Node("node1").Priority(lowPriority).Req(smallRes).Obj(), - st.MakePod().Name("p1.2").UID("p1.2").Node("node1").Priority(lowPriority).Req(smallRes).Obj(), - st.MakePod().Name("p2.1").UID("p2.1").Node("node2").Priority(highPriority).Req(largeRes).Obj(), - st.MakePod().Name("p3.1").UID("p3.1").Node("node3").Priority(midPriority).Req(mediumRes).Obj(), + st.MakePod().Name("p1.1").UID("p1.1").Namespace(v1.NamespaceDefault).Node("node1").Priority(lowPriority).Req(smallRes).Obj(), + st.MakePod().Name("p1.2").UID("p1.2").Namespace(v1.NamespaceDefault).Node("node1").Priority(lowPriority).Req(smallRes).Obj(), + st.MakePod().Name("p2.1").UID("p2.1").Namespace(v1.NamespaceDefault).Node("node2").Priority(highPriority).Req(largeRes).Obj(), + st.MakePod().Name("p3.1").UID("p3.1").Namespace(v1.NamespaceDefault).Node("node3").Priority(midPriority).Req(mediumRes).Obj(), }, nodeNames: []string{"node1", "node2", "node3"}, registerPlugin: st.RegisterPluginAsExtensions(noderesources.FitName, noderesources.NewFit, "Filter", "PreFilter"), @@ -1236,8 +1235,14 @@ func TestPreempt(t *testing.T) { labelKeys := []string{"hostname", "zone", "region"} for _, test := range tests { t.Run(test.name, func(t *testing.T) { - apiObjs := mergeObjs(test.pod, test.pods) - client := clientsetfake.NewSimpleClientset(apiObjs...) + client := clientsetfake.NewSimpleClientset() + informerFactory := informers.NewSharedInformerFactory(client, 0) + podInformer := informerFactory.Core().V1().Pods().Informer() + podInformer.GetStore().Add(test.pod) + for i := range test.pods { + podInformer.GetStore().Add(test.pods[i]) + } + deletedPodNames := make(sets.String) client.PrependReactor("delete", "pods", func(action clienttesting.Action) (bool, runtime.Object, error) { deletedPodNames.Insert(action.(clienttesting.DeleteAction).GetName()) @@ -1277,7 +1282,6 @@ func TestPreempt(t *testing.T) { extenders = append(extenders, extender) } - informerFactory := informers.NewSharedInformerFactory(client, 0) fwk, err := st.NewFramework( []st.RegisterPluginFunc{ test.registerPlugin, @@ -1304,6 +1308,7 @@ func TestPreempt(t *testing.T) { // Call preempt and check the expected results. pl := DefaultPreemption{ fh: fwk, + podLister: informerFactory.Core().V1().Pods().Lister(), pdbLister: getPDBLister(informerFactory), } node, err := pl.preempt(context.Background(), state, test.pod, make(framework.NodeToStatusMap)) @@ -1332,7 +1337,6 @@ func TestPreempt(t *testing.T) { } } test.pod.Status.NominatedNodeName = node - client.CoreV1().Pods(test.pod.Namespace).Update(context.TODO(), test.pod, metav1.UpdateOptions{}) // Manually set the deleted Pods' deletionTimestamp to non-nil. for _, pod := range test.pods { diff --git a/pkg/scheduler/util/utils.go b/pkg/scheduler/util/utils.go index a210a898c08..8125c9dd5e2 100644 --- a/pkg/scheduler/util/utils.go +++ b/pkg/scheduler/util/utils.go @@ -142,11 +142,6 @@ func PatchPod(cs kubernetes.Interface, old *v1.Pod, new *v1.Pod) error { return err } -// GetUpdatedPod returns the latest version of from API server. -func GetUpdatedPod(cs kubernetes.Interface, pod *v1.Pod) (*v1.Pod, error) { - return cs.CoreV1().Pods(pod.Namespace).Get(context.TODO(), pod.Name, metav1.GetOptions{}) -} - // DeletePod deletes the given from API server func DeletePod(cs kubernetes.Interface, pod *v1.Pod) error { return cs.CoreV1().Pods(pod.Namespace).Delete(context.TODO(), pod.Name, metav1.DeleteOptions{})