| /* |
| Copyright 2020 The Kubernetes Authors. |
| |
| Licensed under the Apache License, Version 2.0 (the "License"); |
| you may not use this file except in compliance with the License. |
| You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. |
| */ |
| |
| package framework |
| |
| import ( |
| v1 "k8s.io/api/core/v1" |
| extenderv1 "k8s.io/kube-scheduler/extender/v1" |
| ) |
| |
| // Extender is an interface for external processes to influence scheduling |
| // decisions made by Kubernetes. This is typically needed for resources not directly |
| // managed by Kubernetes. |
| type Extender interface { |
| // Name returns a unique name that identifies the extender. |
| Name() string |
| |
| // Filter based on extender-implemented predicate functions. The filtered list is |
| // expected to be a subset of the supplied list. |
| // The failedNodes and failedAndUnresolvableNodes optionally contains the list |
| // of failed nodes and failure reasons, except nodes in the latter are |
| // unresolvable. |
| Filter(pod *v1.Pod, nodes []*NodeInfo) (filteredNodes []*NodeInfo, failedNodesMap extenderv1.FailedNodesMap, failedAndUnresolvable extenderv1.FailedNodesMap, err error) |
| |
| // Prioritize based on extender-implemented priority functions. The returned scores & weight |
| // are used to compute the weighted score for an extender. The weighted scores are added to |
| // the scores computed by Kubernetes scheduler. The total scores are used to do the host selection. |
| Prioritize(pod *v1.Pod, nodes []*NodeInfo) (hostPriorities *extenderv1.HostPriorityList, weight int64, err error) |
| |
| // Bind delegates the action of binding a pod to a node to the extender. |
| Bind(binding *v1.Binding) error |
| |
| // IsBinder returns whether this extender is configured for the Bind method. |
| IsBinder() bool |
| |
| // IsInterested returns true if at least one extended resource requested by |
| // this pod is managed by this extender. |
| IsInterested(pod *v1.Pod) bool |
| |
| // IsPrioritizer returns whether this extender is configured for the Prioritize method. |
| IsPrioritizer() bool |
| |
| // IsFilter returns whether this extender is configured for the Filter method. |
| IsFilter() bool |
| |
| // ProcessPreemption returns nodes with their victim pods processed by extender based on |
| // given: |
| // 1. Pod to schedule |
| // 2. Candidate nodes and victim pods (nodeNameToVictims) generated by previous scheduling process. |
| // The possible changes made by extender may include: |
| // 1. Subset of given candidate nodes after preemption phase of extender. |
| // 2. A different set of victim pod for every given candidate node after preemption phase of extender. |
| ProcessPreemption( |
| pod *v1.Pod, |
| nodeNameToVictims map[string]*extenderv1.Victims, |
| nodeInfos NodeInfoLister, |
| ) (map[string]*extenderv1.Victims, error) |
| |
| // SupportsPreemption returns if the scheduler extender support preemption or not. |
| SupportsPreemption() bool |
| |
| // IsIgnorable returns true indicates scheduling should not fail when this extender |
| // is unavailable. This gives scheduler ability to fail fast and tolerate non-critical extenders as well. |
| // Both Filter and Bind actions are supported. |
| IsIgnorable() bool |
| } |