@@ -38,55 +38,7 @@ const (
38
38
DefaultExtenderTimeout = 5 * time .Second
39
39
)
40
40
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
- // 3. nodeNameToInfo to restore v1.Node from node name if extender cache is enabled.
73
- // The possible changes made by extender may include:
74
- // 1. Subset of given candidate nodes after preemption phase of extender.
75
- // 2. A different set of victim pod for every given candidate node after preemption phase of extender.
76
- ProcessPreemption (
77
- pod * v1.Pod ,
78
- nodeToVictims map [* v1.Node ]* extenderv1.Victims ,
79
- nodeInfos framework.NodeInfoLister ) (map [* v1.Node ]* extenderv1.Victims , error )
80
-
81
- // SupportsPreemption returns if the scheduler extender support preemption or not.
82
- SupportsPreemption () bool
83
-
84
- // IsIgnorable returns true indicates scheduling should not fail when this extender
85
- // is unavailable. This gives scheduler ability to fail fast and tolerate non-critical extenders as well.
86
- IsIgnorable () bool
87
- }
88
-
89
- // HTTPExtender implements the SchedulerExtender interface.
41
+ // HTTPExtender implements the Extender interface.
90
42
type HTTPExtender struct {
91
43
extenderURL string
92
44
preemptVerb string
@@ -131,7 +83,7 @@ func makeTransport(config *schedulerapi.Extender) (http.RoundTripper, error) {
131
83
}
132
84
133
85
// NewHTTPExtender creates an HTTPExtender object.
134
- func NewHTTPExtender (config * schedulerapi.Extender ) (SchedulerExtender , error ) {
86
+ func NewHTTPExtender (config * schedulerapi.Extender ) (framework. Extender , error ) {
135
87
if config .HTTPTimeout .Nanoseconds () == 0 {
136
88
config .HTTPTimeout = time .Duration (DefaultExtenderTimeout )
137
89
}
@@ -212,9 +164,9 @@ func (h *HTTPExtender) SupportsPreemption() bool {
212
164
// ProcessPreemption returns filtered candidate nodes and victims after running preemption logic in extender.
213
165
func (h * HTTPExtender ) ProcessPreemption (
214
166
pod * v1.Pod ,
215
- nodeToVictims map [* v1. Node ]* extenderv1.Victims ,
167
+ nodeNameToVictims map [string ]* extenderv1.Victims ,
216
168
nodeInfos framework.NodeInfoLister ,
217
- ) (map [* v1. Node ]* extenderv1.Victims , error ) {
169
+ ) (map [string ]* extenderv1.Victims , error ) {
218
170
var (
219
171
result extenderv1.ExtenderPreemptionResult
220
172
args * extenderv1.ExtenderPreemptionArgs
@@ -226,13 +178,12 @@ func (h *HTTPExtender) ProcessPreemption(
226
178
227
179
if h .nodeCacheCapable {
228
180
// If extender has cached node info, pass NodeNameToMetaVictims in args.
229
- nodeNameToMetaVictims := convertToNodeNameToMetaVictims (nodeToVictims )
181
+ nodeNameToMetaVictims := convertToNodeNameToMetaVictims (nodeNameToVictims )
230
182
args = & extenderv1.ExtenderPreemptionArgs {
231
183
Pod : pod ,
232
184
NodeNameToMetaVictims : nodeNameToMetaVictims ,
233
185
}
234
186
} else {
235
- nodeNameToVictims := convertToNodeNameToVictims (nodeToVictims )
236
187
args = & extenderv1.ExtenderPreemptionArgs {
237
188
Pod : pod ,
238
189
NodeNameToVictims : nodeNameToVictims ,
@@ -244,22 +195,22 @@ func (h *HTTPExtender) ProcessPreemption(
244
195
}
245
196
246
197
// Extender will always return NodeNameToMetaVictims.
247
- // So let's convert it to NodeToVictims by using NodeNameToInfo .
248
- newNodeToVictims , err := h .convertToNodeToVictims (result .NodeNameToMetaVictims , nodeInfos )
198
+ // So let's convert it to NodeNameToVictims by using <nodeInfos> .
199
+ newNodeNameToVictims , err := h .convertToNodeNameToVictims (result .NodeNameToMetaVictims , nodeInfos )
249
200
if err != nil {
250
201
return nil , err
251
202
}
252
- // Do not override nodeToVictims
253
- return newNodeToVictims , nil
203
+ // Do not override <nodeNameToVictims>.
204
+ return newNodeNameToVictims , nil
254
205
}
255
206
256
- // convertToNodeToVictims converts "nodeNameToMetaVictims" from object identifiers,
207
+ // convertToNodeNameToVictims converts "nodeNameToMetaVictims" from object identifiers,
257
208
// such as UIDs and names, to object pointers.
258
- func (h * HTTPExtender ) convertToNodeToVictims (
209
+ func (h * HTTPExtender ) convertToNodeNameToVictims (
259
210
nodeNameToMetaVictims map [string ]* extenderv1.MetaVictims ,
260
211
nodeInfos framework.NodeInfoLister ,
261
- ) (map [* v1. Node ]* extenderv1.Victims , error ) {
262
- nodeToVictims := map [* v1. Node ]* extenderv1.Victims {}
212
+ ) (map [string ]* extenderv1.Victims , error ) {
213
+ nodeNameToVictims := map [string ]* extenderv1.Victims {}
263
214
for nodeName , metaVictims := range nodeNameToMetaVictims {
264
215
nodeInfo , err := nodeInfos .Get (nodeName )
265
216
if err != nil {
@@ -275,9 +226,9 @@ func (h *HTTPExtender) convertToNodeToVictims(
275
226
}
276
227
victims .Pods = append (victims .Pods , pod )
277
228
}
278
- nodeToVictims [ nodeInfo . Node () ] = victims
229
+ nodeNameToVictims [ nodeName ] = victims
279
230
}
280
- return nodeToVictims , nil
231
+ return nodeNameToVictims , nil
281
232
}
282
233
283
234
// convertPodUIDToPod returns v1.Pod object for given MetaPod and node info.
@@ -298,10 +249,10 @@ func (h *HTTPExtender) convertPodUIDToPod(
298
249
299
250
// convertToNodeNameToMetaVictims converts from struct type to meta types.
300
251
func convertToNodeNameToMetaVictims (
301
- nodeToVictims map [* v1. Node ]* extenderv1.Victims ,
252
+ nodeNameToVictims map [string ]* extenderv1.Victims ,
302
253
) map [string ]* extenderv1.MetaVictims {
303
- nodeNameToVictims := map [string ]* extenderv1.MetaVictims {}
304
- for node , victims := range nodeToVictims {
254
+ nodeNameToMetaVictims := map [string ]* extenderv1.MetaVictims {}
255
+ for node , victims := range nodeNameToVictims {
305
256
metaVictims := & extenderv1.MetaVictims {
306
257
Pods : []* extenderv1.MetaPod {},
307
258
}
@@ -311,20 +262,9 @@ func convertToNodeNameToMetaVictims(
311
262
}
312
263
metaVictims .Pods = append (metaVictims .Pods , metaPod )
313
264
}
314
- nodeNameToVictims [node .GetName ()] = metaVictims
315
- }
316
- return nodeNameToVictims
317
- }
318
-
319
- // convertToNodeNameToVictims converts from node type to node name as key.
320
- func convertToNodeNameToVictims (
321
- nodeToVictims map [* v1.Node ]* extenderv1.Victims ,
322
- ) map [string ]* extenderv1.Victims {
323
- nodeNameToVictims := map [string ]* extenderv1.Victims {}
324
- for node , victims := range nodeToVictims {
325
- nodeNameToVictims [node .GetName ()] = victims
265
+ nodeNameToMetaVictims [node ] = metaVictims
326
266
}
327
- return nodeNameToVictims
267
+ return nodeNameToMetaVictims
328
268
}
329
269
330
270
// Filter based on extender implemented predicate functions. The filtered list is
0 commit comments