Skip to content

Commit eb17b75

Browse files
committed
move SchedulerExtender interface to pkg/scheduler/framework/v1alpha1
1 parent e4f878e commit eb17b75

File tree

7 files changed

+22
-67
lines changed

7 files changed

+22
-67
lines changed

pkg/scheduler/core/extender.go

Lines changed: 2 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -38,54 +38,7 @@ const (
3838
DefaultExtenderTimeout = 5 * time.Second
3939
)
4040

41-
// SchedulerExtender is an interface for external processes to influence scheduling
42-
// decisions made by Kubernetes. This is typically needed for resources not directly
43-
// managed by Kubernetes.
44-
type SchedulerExtender interface {
45-
// Name returns a unique name that identifies the extender.
46-
Name() string
47-
48-
// Filter based on extender-implemented predicate functions. The filtered list is
49-
// expected to be a subset of the supplied list. failedNodesMap optionally contains
50-
// the list of failed nodes and failure reasons.
51-
Filter(pod *v1.Pod, nodes []*v1.Node) (filteredNodes []*v1.Node, failedNodesMap extenderv1.FailedNodesMap, err error)
52-
53-
// Prioritize based on extender-implemented priority functions. The returned scores & weight
54-
// are used to compute the weighted score for an extender. The weighted scores are added to
55-
// the scores computed by Kubernetes scheduler. The total scores are used to do the host selection.
56-
Prioritize(pod *v1.Pod, nodes []*v1.Node) (hostPriorities *extenderv1.HostPriorityList, weight int64, err error)
57-
58-
// Bind delegates the action of binding a pod to a node to the extender.
59-
Bind(binding *v1.Binding) error
60-
61-
// IsBinder returns whether this extender is configured for the Bind method.
62-
IsBinder() bool
63-
64-
// IsInterested returns true if at least one extended resource requested by
65-
// this pod is managed by this extender.
66-
IsInterested(pod *v1.Pod) bool
67-
68-
// ProcessPreemption returns nodes with their victim pods processed by extender based on
69-
// given:
70-
// 1. Pod to schedule
71-
// 2. Candidate nodes and victim pods (nodeToVictims) generated by previous scheduling process.
72-
// The possible changes made by extender may include:
73-
// 1. Subset of given candidate nodes after preemption phase of extender.
74-
// 2. A different set of victim pod for every given candidate node after preemption phase of extender.
75-
ProcessPreemption(
76-
pod *v1.Pod,
77-
nodeToVictims map[string]*extenderv1.Victims,
78-
nodeInfos framework.NodeInfoLister) (map[string]*extenderv1.Victims, error)
79-
80-
// SupportsPreemption returns if the scheduler extender support preemption or not.
81-
SupportsPreemption() bool
82-
83-
// IsIgnorable returns true indicates scheduling should not fail when this extender
84-
// is unavailable. This gives scheduler ability to fail fast and tolerate non-critical extenders as well.
85-
IsIgnorable() bool
86-
}
87-
88-
// HTTPExtender implements the SchedulerExtender interface.
41+
// HTTPExtender implements the Extender interface.
8942
type HTTPExtender struct {
9043
extenderURL string
9144
preemptVerb string
@@ -130,7 +83,7 @@ func makeTransport(config *schedulerapi.Extender) (http.RoundTripper, error) {
13083
}
13184

13285
// NewHTTPExtender creates an HTTPExtender object.
133-
func NewHTTPExtender(config *schedulerapi.Extender) (SchedulerExtender, error) {
86+
func NewHTTPExtender(config *schedulerapi.Extender) (framework.Extender, error) {
13487
if config.HTTPTimeout.Nanoseconds() == 0 {
13588
config.HTTPTimeout = time.Duration(DefaultExtenderTimeout)
13689
}

pkg/scheduler/core/extender_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -353,7 +353,7 @@ func (f *FakeExtender) IsInterested(pod *v1.Pod) bool {
353353
return !f.unInterested
354354
}
355355

356-
var _ SchedulerExtender = &FakeExtender{}
356+
var _ framework.Extender = &FakeExtender{}
357357

358358
func TestGenericSchedulerWithExtenders(t *testing.T) {
359359
tests := []struct {
@@ -575,7 +575,7 @@ func TestGenericSchedulerWithExtenders(t *testing.T) {
575575
client := clientsetfake.NewSimpleClientset()
576576
informerFactory := informers.NewSharedInformerFactory(client, 0)
577577

578-
extenders := []SchedulerExtender{}
578+
extenders := []framework.Extender{}
579579
for ii := range test.extenders {
580580
extenders = append(extenders, &test.extenders[ii])
581581
}

pkg/scheduler/core/generic_scheduler.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ type ScheduleAlgorithm interface {
108108
Preempt(context.Context, *profile.Profile, *framework.CycleState, *v1.Pod, error) (selectedNode string, preemptedPods []*v1.Pod, cleanupNominatedPods []*v1.Pod, err error)
109109
// Extenders returns a slice of extender config. This is exposed for
110110
// testing.
111-
Extenders() []SchedulerExtender
111+
Extenders() []framework.Extender
112112
}
113113

114114
// ScheduleResult represents the result of one pod scheduled. It will contain
@@ -125,7 +125,7 @@ type ScheduleResult struct {
125125
type genericScheduler struct {
126126
cache internalcache.Cache
127127
schedulingQueue internalqueue.SchedulingQueue
128-
extenders []SchedulerExtender
128+
extenders []framework.Extender
129129
nodeInfoSnapshot *internalcache.Snapshot
130130
pvcLister corelisters.PersistentVolumeClaimLister
131131
pdbLister policylisters.PodDisruptionBudgetLister
@@ -210,7 +210,7 @@ func (g *genericScheduler) Schedule(ctx context.Context, prof *profile.Profile,
210210
}, err
211211
}
212212

213-
func (g *genericScheduler) Extenders() []SchedulerExtender {
213+
func (g *genericScheduler) Extenders() []framework.Extender {
214214
return g.extenders
215215
}
216216

@@ -1103,7 +1103,7 @@ func NewGenericScheduler(
11031103
cache internalcache.Cache,
11041104
podQueue internalqueue.SchedulingQueue,
11051105
nodeInfoSnapshot *internalcache.Snapshot,
1106-
extenders []SchedulerExtender,
1106+
extenders []framework.Extender,
11071107
pvcLister corelisters.PersistentVolumeClaimLister,
11081108
pdbLister policylisters.PodDisruptionBudgetLister,
11091109
disablePreemption bool,

pkg/scheduler/core/generic_scheduler_test.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -813,7 +813,7 @@ func TestGenericScheduler(t *testing.T) {
813813
cache,
814814
internalqueue.NewSchedulingQueue(nil),
815815
snapshot,
816-
[]SchedulerExtender{},
816+
[]framework.Extender{},
817817
pvcLister,
818818
informerFactory.Policy().V1beta1().PodDisruptionBudgets().Lister(),
819819
false,
@@ -1134,7 +1134,7 @@ func TestZeroRequest(t *testing.T) {
11341134
nil,
11351135
nil,
11361136
emptySnapshot,
1137-
[]SchedulerExtender{},
1137+
[]framework.Extender{},
11381138
nil,
11391139
nil,
11401140
false,
@@ -1613,7 +1613,7 @@ func TestSelectNodesForPreemption(t *testing.T) {
16131613
nil,
16141614
internalqueue.NewSchedulingQueue(nil),
16151615
snapshot,
1616-
[]SchedulerExtender{},
1616+
[]framework.Extender{},
16171617
nil,
16181618
informerFactory.Policy().V1beta1().PodDisruptionBudgets().Lister(),
16191619
false,
@@ -2391,7 +2391,7 @@ func TestPreempt(t *testing.T) {
23912391
cachedNodeInfo.SetNode(node)
23922392
cachedNodeInfoMap[node.Name] = cachedNodeInfo
23932393
}
2394-
var extenders []SchedulerExtender
2394+
var extenders []framework.Extender
23952395
for _, extender := range test.extenders {
23962396
// Set nodeInfoMap as extenders cached node information.
23972397
extender.cachedNodeNameToInfo = cachedNodeInfoMap

pkg/scheduler/factory.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -126,10 +126,10 @@ func (c *Configurator) buildFramework(p schedulerapi.KubeSchedulerProfile) (fram
126126

127127
// create a scheduler from a set of registered plugins.
128128
func (c *Configurator) create() (*Scheduler, error) {
129-
var extenders []core.SchedulerExtender
129+
var extenders []framework.Extender
130130
var ignoredExtendedResources []string
131131
if len(c.extenders) != 0 {
132-
var ignorableExtenders []core.SchedulerExtender
132+
var ignorableExtenders []framework.Extender
133133
for ii := range c.extenders {
134134
klog.V(2).Infof("Creating extender with config %+v", c.extenders[ii])
135135
extender, err := core.NewHTTPExtender(&c.extenders[ii])

pkg/scheduler/framework/v1alpha1/BUILD

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ go_library(
44
name = "go_default_library",
55
srcs = [
66
"cycle_state.go",
7+
"extender.go",
78
"framework.go",
89
"interface.go",
910
"listers.go",
@@ -34,6 +35,7 @@ go_library(
3435
"//staging/src/k8s.io/client-go/kubernetes:go_default_library",
3536
"//staging/src/k8s.io/component-base/metrics:go_default_library",
3637
"//staging/src/k8s.io/kube-scheduler/config/v1alpha2:go_default_library",
38+
"//staging/src/k8s.io/kube-scheduler/extender/v1:go_default_library",
3739
"//vendor/k8s.io/klog:go_default_library",
3840
"//vendor/sigs.k8s.io/yaml:go_default_library",
3941
],

pkg/scheduler/scheduler_test.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ func (es mockScheduler) Schedule(ctx context.Context, profile *profile.Profile,
141141
return es.result, es.err
142142
}
143143

144-
func (es mockScheduler) Extenders() []core.SchedulerExtender {
144+
func (es mockScheduler) Extenders() []framework.Extender {
145145
return nil
146146
}
147147
func (es mockScheduler) Preempt(ctx context.Context, i *profile.Profile, state *framework.CycleState, pod *v1.Pod, scheduleErr error) (string, []*v1.Pod, []*v1.Pod, error) {
@@ -815,7 +815,7 @@ func setupTestScheduler(queuedPodStore *clientcache.FIFO, scache internalcache.C
815815
scache,
816816
internalqueue.NewSchedulingQueue(nil),
817817
internalcache.NewEmptySnapshot(),
818-
[]core.SchedulerExtender{},
818+
[]framework.Extender{},
819819
informerFactory.Core().V1().PersistentVolumeClaims().Lister(),
820820
informerFactory.Policy().V1beta1().PodDisruptionBudgets().Lister(),
821821
false,
@@ -1104,22 +1104,22 @@ priorities:
11041104
func TestSchedulerBinding(t *testing.T) {
11051105
table := []struct {
11061106
podName string
1107-
extenders []core.SchedulerExtender
1107+
extenders []framework.Extender
11081108
wantBinderID int
11091109
name string
11101110
}{
11111111
{
11121112
name: "the extender is not a binder",
11131113
podName: "pod0",
1114-
extenders: []core.SchedulerExtender{
1114+
extenders: []framework.Extender{
11151115
&fakeExtender{isBinder: false, interestedPodName: "pod0"},
11161116
},
11171117
wantBinderID: -1, // default binding.
11181118
},
11191119
{
11201120
name: "one of the extenders is a binder and interested in pod",
11211121
podName: "pod0",
1122-
extenders: []core.SchedulerExtender{
1122+
extenders: []framework.Extender{
11231123
&fakeExtender{isBinder: false, interestedPodName: "pod0"},
11241124
&fakeExtender{isBinder: true, interestedPodName: "pod0"},
11251125
},
@@ -1128,7 +1128,7 @@ func TestSchedulerBinding(t *testing.T) {
11281128
{
11291129
name: "one of the extenders is a binder, but not interested in pod",
11301130
podName: "pod1",
1131-
extenders: []core.SchedulerExtender{
1131+
extenders: []framework.Extender{
11321132
&fakeExtender{isBinder: false, interestedPodName: "pod1"},
11331133
&fakeExtender{isBinder: true, interestedPodName: "pod0"},
11341134
},

0 commit comments

Comments
 (0)