mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-22 11:21:47 +00:00
Merge pull request #87401 from zouyee/move
Move scheduler's SchedulerExtender interface to core/extenders.go
This commit is contained in:
commit
37f98ac3b6
@ -12,7 +12,6 @@ go_library(
|
|||||||
deps = [
|
deps = [
|
||||||
"//pkg/api/v1/pod:go_default_library",
|
"//pkg/api/v1/pod:go_default_library",
|
||||||
"//pkg/features:go_default_library",
|
"//pkg/features:go_default_library",
|
||||||
"//pkg/scheduler/algorithm:go_default_library",
|
|
||||||
"//pkg/scheduler/algorithmprovider:go_default_library",
|
"//pkg/scheduler/algorithmprovider:go_default_library",
|
||||||
"//pkg/scheduler/apis/config:go_default_library",
|
"//pkg/scheduler/apis/config:go_default_library",
|
||||||
"//pkg/scheduler/apis/config/scheme:go_default_library",
|
"//pkg/scheduler/apis/config/scheme:go_default_library",
|
||||||
@ -62,7 +61,6 @@ go_test(
|
|||||||
"//pkg/api/testing:go_default_library",
|
"//pkg/api/testing:go_default_library",
|
||||||
"//pkg/controller/volume/scheduling:go_default_library",
|
"//pkg/controller/volume/scheduling:go_default_library",
|
||||||
"//pkg/features:go_default_library",
|
"//pkg/features:go_default_library",
|
||||||
"//pkg/scheduler/algorithm:go_default_library",
|
|
||||||
"//pkg/scheduler/apis/config:go_default_library",
|
"//pkg/scheduler/apis/config:go_default_library",
|
||||||
"//pkg/scheduler/apis/config/scheme:go_default_library",
|
"//pkg/scheduler/apis/config/scheme:go_default_library",
|
||||||
"//pkg/scheduler/apis/extender/v1:go_default_library",
|
"//pkg/scheduler/apis/extender/v1:go_default_library",
|
||||||
|
@ -2,17 +2,9 @@ load("@io_bazel_rules_go//go:def.bzl", "go_library")
|
|||||||
|
|
||||||
go_library(
|
go_library(
|
||||||
name = "go_default_library",
|
name = "go_default_library",
|
||||||
srcs = [
|
srcs = ["doc.go"],
|
||||||
"doc.go",
|
|
||||||
"scheduler_interface.go",
|
|
||||||
],
|
|
||||||
importpath = "k8s.io/kubernetes/pkg/scheduler/algorithm",
|
importpath = "k8s.io/kubernetes/pkg/scheduler/algorithm",
|
||||||
visibility = ["//visibility:public"],
|
visibility = ["//visibility:public"],
|
||||||
deps = [
|
|
||||||
"//pkg/scheduler/apis/extender/v1:go_default_library",
|
|
||||||
"//pkg/scheduler/listers:go_default_library",
|
|
||||||
"//staging/src/k8s.io/api/core/v1:go_default_library",
|
|
||||||
],
|
|
||||||
)
|
)
|
||||||
|
|
||||||
filegroup(
|
filegroup(
|
||||||
|
@ -1,71 +0,0 @@
|
|||||||
/*
|
|
||||||
Copyright 2014 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 algorithm
|
|
||||||
|
|
||||||
import (
|
|
||||||
"k8s.io/api/core/v1"
|
|
||||||
extenderv1 "k8s.io/kubernetes/pkg/scheduler/apis/extender/v1"
|
|
||||||
"k8s.io/kubernetes/pkg/scheduler/listers"
|
|
||||||
)
|
|
||||||
|
|
||||||
// SchedulerExtender 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 SchedulerExtender 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. failedNodesMap optionally contains
|
|
||||||
// the list of failed nodes and failure reasons.
|
|
||||||
Filter(pod *v1.Pod, nodes []*v1.Node) (filteredNodes []*v1.Node, failedNodesMap 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 []*v1.Node) (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
|
|
||||||
|
|
||||||
// ProcessPreemption returns nodes with their victim pods processed by extender based on
|
|
||||||
// given:
|
|
||||||
// 1. Pod to schedule
|
|
||||||
// 2. Candidate nodes and victim pods (nodeToVictims) generated by previous scheduling process.
|
|
||||||
// 3. nodeNameToInfo to restore v1.Node from node name if extender cache is enabled.
|
|
||||||
// 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,
|
|
||||||
nodeToVictims map[*v1.Node]*extenderv1.Victims,
|
|
||||||
nodeInfos listers.NodeInfoLister) (map[*v1.Node]*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.
|
|
||||||
IsIgnorable() bool
|
|
||||||
}
|
|
@ -10,7 +10,6 @@ go_library(
|
|||||||
visibility = ["//visibility:public"],
|
visibility = ["//visibility:public"],
|
||||||
deps = [
|
deps = [
|
||||||
"//pkg/api/v1/pod:go_default_library",
|
"//pkg/api/v1/pod:go_default_library",
|
||||||
"//pkg/scheduler/algorithm:go_default_library",
|
|
||||||
"//pkg/scheduler/apis/config:go_default_library",
|
"//pkg/scheduler/apis/config:go_default_library",
|
||||||
"//pkg/scheduler/apis/extender/v1:go_default_library",
|
"//pkg/scheduler/apis/extender/v1:go_default_library",
|
||||||
"//pkg/scheduler/framework/v1alpha1:go_default_library",
|
"//pkg/scheduler/framework/v1alpha1:go_default_library",
|
||||||
@ -45,7 +44,6 @@ go_test(
|
|||||||
embed = [":go_default_library"],
|
embed = [":go_default_library"],
|
||||||
deps = [
|
deps = [
|
||||||
"//pkg/api/v1/pod:go_default_library",
|
"//pkg/api/v1/pod:go_default_library",
|
||||||
"//pkg/scheduler/algorithm:go_default_library",
|
|
||||||
"//pkg/scheduler/apis/config:go_default_library",
|
"//pkg/scheduler/apis/config:go_default_library",
|
||||||
"//pkg/scheduler/apis/extender/v1:go_default_library",
|
"//pkg/scheduler/apis/extender/v1:go_default_library",
|
||||||
"//pkg/scheduler/framework/plugins/defaultpodtopologyspread:go_default_library",
|
"//pkg/scheduler/framework/plugins/defaultpodtopologyspread:go_default_library",
|
||||||
|
@ -28,7 +28,6 @@ import (
|
|||||||
utilnet "k8s.io/apimachinery/pkg/util/net"
|
utilnet "k8s.io/apimachinery/pkg/util/net"
|
||||||
"k8s.io/apimachinery/pkg/util/sets"
|
"k8s.io/apimachinery/pkg/util/sets"
|
||||||
restclient "k8s.io/client-go/rest"
|
restclient "k8s.io/client-go/rest"
|
||||||
"k8s.io/kubernetes/pkg/scheduler/algorithm"
|
|
||||||
schedulerapi "k8s.io/kubernetes/pkg/scheduler/apis/config"
|
schedulerapi "k8s.io/kubernetes/pkg/scheduler/apis/config"
|
||||||
extenderv1 "k8s.io/kubernetes/pkg/scheduler/apis/extender/v1"
|
extenderv1 "k8s.io/kubernetes/pkg/scheduler/apis/extender/v1"
|
||||||
"k8s.io/kubernetes/pkg/scheduler/listers"
|
"k8s.io/kubernetes/pkg/scheduler/listers"
|
||||||
@ -40,7 +39,55 @@ const (
|
|||||||
DefaultExtenderTimeout = 5 * time.Second
|
DefaultExtenderTimeout = 5 * time.Second
|
||||||
)
|
)
|
||||||
|
|
||||||
// HTTPExtender implements the algorithm.SchedulerExtender interface.
|
// SchedulerExtender 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 SchedulerExtender 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. failedNodesMap optionally contains
|
||||||
|
// the list of failed nodes and failure reasons.
|
||||||
|
Filter(pod *v1.Pod, nodes []*v1.Node) (filteredNodes []*v1.Node, failedNodesMap 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 []*v1.Node) (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
|
||||||
|
|
||||||
|
// ProcessPreemption returns nodes with their victim pods processed by extender based on
|
||||||
|
// given:
|
||||||
|
// 1. Pod to schedule
|
||||||
|
// 2. Candidate nodes and victim pods (nodeToVictims) generated by previous scheduling process.
|
||||||
|
// 3. nodeNameToInfo to restore v1.Node from node name if extender cache is enabled.
|
||||||
|
// 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,
|
||||||
|
nodeToVictims map[*v1.Node]*extenderv1.Victims,
|
||||||
|
nodeInfos listers.NodeInfoLister) (map[*v1.Node]*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.
|
||||||
|
IsIgnorable() bool
|
||||||
|
}
|
||||||
|
|
||||||
|
// HTTPExtender implements the SchedulerExtender interface.
|
||||||
type HTTPExtender struct {
|
type HTTPExtender struct {
|
||||||
extenderURL string
|
extenderURL string
|
||||||
preemptVerb string
|
preemptVerb string
|
||||||
@ -85,7 +132,7 @@ func makeTransport(config *schedulerapi.Extender) (http.RoundTripper, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// NewHTTPExtender creates an HTTPExtender object.
|
// NewHTTPExtender creates an HTTPExtender object.
|
||||||
func NewHTTPExtender(config *schedulerapi.Extender) (algorithm.SchedulerExtender, error) {
|
func NewHTTPExtender(config *schedulerapi.Extender) (SchedulerExtender, error) {
|
||||||
if config.HTTPTimeout.Nanoseconds() == 0 {
|
if config.HTTPTimeout.Nanoseconds() == 0 {
|
||||||
config.HTTPTimeout = time.Duration(DefaultExtenderTimeout)
|
config.HTTPTimeout = time.Duration(DefaultExtenderTimeout)
|
||||||
}
|
}
|
||||||
|
@ -33,7 +33,6 @@ import (
|
|||||||
"k8s.io/client-go/informers"
|
"k8s.io/client-go/informers"
|
||||||
clientsetfake "k8s.io/client-go/kubernetes/fake"
|
clientsetfake "k8s.io/client-go/kubernetes/fake"
|
||||||
podutil "k8s.io/kubernetes/pkg/api/v1/pod"
|
podutil "k8s.io/kubernetes/pkg/api/v1/pod"
|
||||||
"k8s.io/kubernetes/pkg/scheduler/algorithm"
|
|
||||||
schedulerapi "k8s.io/kubernetes/pkg/scheduler/apis/config"
|
schedulerapi "k8s.io/kubernetes/pkg/scheduler/apis/config"
|
||||||
extenderv1 "k8s.io/kubernetes/pkg/scheduler/apis/extender/v1"
|
extenderv1 "k8s.io/kubernetes/pkg/scheduler/apis/extender/v1"
|
||||||
"k8s.io/kubernetes/pkg/scheduler/framework/plugins/queuesort"
|
"k8s.io/kubernetes/pkg/scheduler/framework/plugins/queuesort"
|
||||||
@ -353,7 +352,7 @@ func (f *FakeExtender) IsInterested(pod *v1.Pod) bool {
|
|||||||
return !f.unInterested
|
return !f.unInterested
|
||||||
}
|
}
|
||||||
|
|
||||||
var _ algorithm.SchedulerExtender = &FakeExtender{}
|
var _ SchedulerExtender = &FakeExtender{}
|
||||||
|
|
||||||
func TestGenericSchedulerWithExtenders(t *testing.T) {
|
func TestGenericSchedulerWithExtenders(t *testing.T) {
|
||||||
tests := []struct {
|
tests := []struct {
|
||||||
@ -566,7 +565,7 @@ func TestGenericSchedulerWithExtenders(t *testing.T) {
|
|||||||
client := clientsetfake.NewSimpleClientset()
|
client := clientsetfake.NewSimpleClientset()
|
||||||
informerFactory := informers.NewSharedInformerFactory(client, 0)
|
informerFactory := informers.NewSharedInformerFactory(client, 0)
|
||||||
|
|
||||||
extenders := []algorithm.SchedulerExtender{}
|
extenders := []SchedulerExtender{}
|
||||||
for ii := range test.extenders {
|
for ii := range test.extenders {
|
||||||
extenders = append(extenders, &test.extenders[ii])
|
extenders = append(extenders, &test.extenders[ii])
|
||||||
}
|
}
|
||||||
|
@ -37,7 +37,6 @@ import (
|
|||||||
policylisters "k8s.io/client-go/listers/policy/v1beta1"
|
policylisters "k8s.io/client-go/listers/policy/v1beta1"
|
||||||
"k8s.io/client-go/util/workqueue"
|
"k8s.io/client-go/util/workqueue"
|
||||||
podutil "k8s.io/kubernetes/pkg/api/v1/pod"
|
podutil "k8s.io/kubernetes/pkg/api/v1/pod"
|
||||||
"k8s.io/kubernetes/pkg/scheduler/algorithm"
|
|
||||||
extenderv1 "k8s.io/kubernetes/pkg/scheduler/apis/extender/v1"
|
extenderv1 "k8s.io/kubernetes/pkg/scheduler/apis/extender/v1"
|
||||||
framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1"
|
framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1"
|
||||||
internalcache "k8s.io/kubernetes/pkg/scheduler/internal/cache"
|
internalcache "k8s.io/kubernetes/pkg/scheduler/internal/cache"
|
||||||
@ -111,7 +110,7 @@ type ScheduleAlgorithm interface {
|
|||||||
Preempt(context.Context, *framework.CycleState, *v1.Pod, error) (selectedNode *v1.Node, preemptedPods []*v1.Pod, cleanupNominatedPods []*v1.Pod, err error)
|
Preempt(context.Context, *framework.CycleState, *v1.Pod, error) (selectedNode *v1.Node, preemptedPods []*v1.Pod, cleanupNominatedPods []*v1.Pod, err error)
|
||||||
// Prioritizers returns a slice of priority config. This is exposed for
|
// Prioritizers returns a slice of priority config. This is exposed for
|
||||||
// testing.
|
// testing.
|
||||||
Extenders() []algorithm.SchedulerExtender
|
Extenders() []SchedulerExtender
|
||||||
// Snapshot snapshots scheduler cache and node infos. This is needed
|
// Snapshot snapshots scheduler cache and node infos. This is needed
|
||||||
// for cluster autoscaler integration.
|
// for cluster autoscaler integration.
|
||||||
// TODO(#85691): remove this once CA migrates to creating a Framework instead of a full scheduler.
|
// TODO(#85691): remove this once CA migrates to creating a Framework instead of a full scheduler.
|
||||||
@ -136,7 +135,7 @@ type genericScheduler struct {
|
|||||||
cache internalcache.Cache
|
cache internalcache.Cache
|
||||||
schedulingQueue internalqueue.SchedulingQueue
|
schedulingQueue internalqueue.SchedulingQueue
|
||||||
framework framework.Framework
|
framework framework.Framework
|
||||||
extenders []algorithm.SchedulerExtender
|
extenders []SchedulerExtender
|
||||||
nodeInfoSnapshot *internalcache.Snapshot
|
nodeInfoSnapshot *internalcache.Snapshot
|
||||||
volumeBinder *volumebinder.VolumeBinder
|
volumeBinder *volumebinder.VolumeBinder
|
||||||
pvcLister corelisters.PersistentVolumeClaimLister
|
pvcLister corelisters.PersistentVolumeClaimLister
|
||||||
@ -241,7 +240,7 @@ func (g *genericScheduler) Schedule(ctx context.Context, state *framework.CycleS
|
|||||||
}, err
|
}, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g *genericScheduler) Extenders() []algorithm.SchedulerExtender {
|
func (g *genericScheduler) Extenders() []SchedulerExtender {
|
||||||
return g.extenders
|
return g.extenders
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1098,7 +1097,7 @@ func NewGenericScheduler(
|
|||||||
podQueue internalqueue.SchedulingQueue,
|
podQueue internalqueue.SchedulingQueue,
|
||||||
nodeInfoSnapshot *internalcache.Snapshot,
|
nodeInfoSnapshot *internalcache.Snapshot,
|
||||||
framework framework.Framework,
|
framework framework.Framework,
|
||||||
extenders []algorithm.SchedulerExtender,
|
extenders []SchedulerExtender,
|
||||||
volumeBinder *volumebinder.VolumeBinder,
|
volumeBinder *volumebinder.VolumeBinder,
|
||||||
pvcLister corelisters.PersistentVolumeClaimLister,
|
pvcLister corelisters.PersistentVolumeClaimLister,
|
||||||
pdbLister policylisters.PodDisruptionBudgetLister,
|
pdbLister policylisters.PodDisruptionBudgetLister,
|
||||||
|
@ -36,7 +36,6 @@ import (
|
|||||||
"k8s.io/apimachinery/pkg/util/wait"
|
"k8s.io/apimachinery/pkg/util/wait"
|
||||||
"k8s.io/client-go/informers"
|
"k8s.io/client-go/informers"
|
||||||
clientsetfake "k8s.io/client-go/kubernetes/fake"
|
clientsetfake "k8s.io/client-go/kubernetes/fake"
|
||||||
"k8s.io/kubernetes/pkg/scheduler/algorithm"
|
|
||||||
schedulerapi "k8s.io/kubernetes/pkg/scheduler/apis/config"
|
schedulerapi "k8s.io/kubernetes/pkg/scheduler/apis/config"
|
||||||
extenderv1 "k8s.io/kubernetes/pkg/scheduler/apis/extender/v1"
|
extenderv1 "k8s.io/kubernetes/pkg/scheduler/apis/extender/v1"
|
||||||
"k8s.io/kubernetes/pkg/scheduler/framework/plugins/defaultpodtopologyspread"
|
"k8s.io/kubernetes/pkg/scheduler/framework/plugins/defaultpodtopologyspread"
|
||||||
@ -807,7 +806,7 @@ func TestGenericScheduler(t *testing.T) {
|
|||||||
internalqueue.NewSchedulingQueue(nil),
|
internalqueue.NewSchedulingQueue(nil),
|
||||||
snapshot,
|
snapshot,
|
||||||
fwk,
|
fwk,
|
||||||
[]algorithm.SchedulerExtender{},
|
[]SchedulerExtender{},
|
||||||
nil,
|
nil,
|
||||||
pvcLister,
|
pvcLister,
|
||||||
informerFactory.Policy().V1beta1().PodDisruptionBudgets().Lister(),
|
informerFactory.Policy().V1beta1().PodDisruptionBudgets().Lister(),
|
||||||
@ -1152,7 +1151,7 @@ func TestZeroRequest(t *testing.T) {
|
|||||||
nil,
|
nil,
|
||||||
emptySnapshot,
|
emptySnapshot,
|
||||||
fwk,
|
fwk,
|
||||||
[]algorithm.SchedulerExtender{},
|
[]SchedulerExtender{},
|
||||||
nil,
|
nil,
|
||||||
nil,
|
nil,
|
||||||
nil,
|
nil,
|
||||||
@ -1611,7 +1610,7 @@ func TestSelectNodesForPreemption(t *testing.T) {
|
|||||||
internalqueue.NewSchedulingQueue(nil),
|
internalqueue.NewSchedulingQueue(nil),
|
||||||
snapshot,
|
snapshot,
|
||||||
fwk,
|
fwk,
|
||||||
[]algorithm.SchedulerExtender{},
|
[]SchedulerExtender{},
|
||||||
nil,
|
nil,
|
||||||
nil,
|
nil,
|
||||||
informerFactory.Policy().V1beta1().PodDisruptionBudgets().Lister(),
|
informerFactory.Policy().V1beta1().PodDisruptionBudgets().Lister(),
|
||||||
@ -2374,7 +2373,7 @@ func TestPreempt(t *testing.T) {
|
|||||||
cachedNodeInfo.SetNode(node)
|
cachedNodeInfo.SetNode(node)
|
||||||
cachedNodeInfoMap[node.Name] = cachedNodeInfo
|
cachedNodeInfoMap[node.Name] = cachedNodeInfo
|
||||||
}
|
}
|
||||||
var extenders []algorithm.SchedulerExtender
|
var extenders []SchedulerExtender
|
||||||
for _, extender := range test.extenders {
|
for _, extender := range test.extenders {
|
||||||
// Set nodeInfoMap as extenders cached node information.
|
// Set nodeInfoMap as extenders cached node information.
|
||||||
extender.cachedNodeNameToInfo = cachedNodeInfoMap
|
extender.cachedNodeNameToInfo = cachedNodeInfoMap
|
||||||
|
@ -37,7 +37,6 @@ import (
|
|||||||
"k8s.io/client-go/tools/cache"
|
"k8s.io/client-go/tools/cache"
|
||||||
"k8s.io/klog"
|
"k8s.io/klog"
|
||||||
kubefeatures "k8s.io/kubernetes/pkg/features"
|
kubefeatures "k8s.io/kubernetes/pkg/features"
|
||||||
"k8s.io/kubernetes/pkg/scheduler/algorithm"
|
|
||||||
"k8s.io/kubernetes/pkg/scheduler/algorithmprovider"
|
"k8s.io/kubernetes/pkg/scheduler/algorithmprovider"
|
||||||
schedulerapi "k8s.io/kubernetes/pkg/scheduler/apis/config"
|
schedulerapi "k8s.io/kubernetes/pkg/scheduler/apis/config"
|
||||||
"k8s.io/kubernetes/pkg/scheduler/apis/config/validation"
|
"k8s.io/kubernetes/pkg/scheduler/apis/config/validation"
|
||||||
@ -110,7 +109,7 @@ type Configurator struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// create a scheduler from a set of registered plugins.
|
// create a scheduler from a set of registered plugins.
|
||||||
func (c *Configurator) create(extenders []algorithm.SchedulerExtender) (*Scheduler, error) {
|
func (c *Configurator) create(extenders []core.SchedulerExtender) (*Scheduler, error) {
|
||||||
framework, err := framework.NewFramework(
|
framework, err := framework.NewFramework(
|
||||||
c.registry,
|
c.registry,
|
||||||
c.plugins,
|
c.plugins,
|
||||||
@ -186,7 +185,7 @@ func (c *Configurator) createFromProvider(providerName string) (*Scheduler, erro
|
|||||||
pluginConfig = append(pluginConfig, c.pluginConfig...)
|
pluginConfig = append(pluginConfig, c.pluginConfig...)
|
||||||
c.pluginConfig = pluginConfig
|
c.pluginConfig = pluginConfig
|
||||||
|
|
||||||
return c.create([]algorithm.SchedulerExtender{})
|
return c.create([]core.SchedulerExtender{})
|
||||||
}
|
}
|
||||||
|
|
||||||
// createFromConfig creates a scheduler from the configuration file
|
// createFromConfig creates a scheduler from the configuration file
|
||||||
@ -227,9 +226,9 @@ func (c *Configurator) createFromConfig(policy schedulerapi.Policy) (*Scheduler,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var extenders []algorithm.SchedulerExtender
|
var extenders []core.SchedulerExtender
|
||||||
if len(policy.Extenders) != 0 {
|
if len(policy.Extenders) != 0 {
|
||||||
var ignorableExtenders []algorithm.SchedulerExtender
|
var ignorableExtenders []core.SchedulerExtender
|
||||||
var ignoredExtendedResources []string
|
var ignoredExtendedResources []string
|
||||||
for ii := range policy.Extenders {
|
for ii := range policy.Extenders {
|
||||||
klog.V(2).Infof("Creating extender with config %+v", policy.Extenders[ii])
|
klog.V(2).Infof("Creating extender with config %+v", policy.Extenders[ii])
|
||||||
|
@ -44,7 +44,6 @@ import (
|
|||||||
clientcache "k8s.io/client-go/tools/cache"
|
clientcache "k8s.io/client-go/tools/cache"
|
||||||
"k8s.io/client-go/tools/events"
|
"k8s.io/client-go/tools/events"
|
||||||
volumescheduling "k8s.io/kubernetes/pkg/controller/volume/scheduling"
|
volumescheduling "k8s.io/kubernetes/pkg/controller/volume/scheduling"
|
||||||
"k8s.io/kubernetes/pkg/scheduler/algorithm"
|
|
||||||
schedulerapi "k8s.io/kubernetes/pkg/scheduler/apis/config"
|
schedulerapi "k8s.io/kubernetes/pkg/scheduler/apis/config"
|
||||||
"k8s.io/kubernetes/pkg/scheduler/core"
|
"k8s.io/kubernetes/pkg/scheduler/core"
|
||||||
frameworkplugins "k8s.io/kubernetes/pkg/scheduler/framework/plugins"
|
frameworkplugins "k8s.io/kubernetes/pkg/scheduler/framework/plugins"
|
||||||
@ -144,7 +143,7 @@ func (es mockScheduler) Schedule(ctx context.Context, state *framework.CycleStat
|
|||||||
return es.result, es.err
|
return es.result, es.err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (es mockScheduler) Extenders() []algorithm.SchedulerExtender {
|
func (es mockScheduler) Extenders() []core.SchedulerExtender {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
func (es mockScheduler) Preempt(ctx context.Context, state *framework.CycleState, pod *v1.Pod, scheduleErr error) (*v1.Node, []*v1.Pod, []*v1.Pod, error) {
|
func (es mockScheduler) Preempt(ctx context.Context, state *framework.CycleState, pod *v1.Pod, scheduleErr error) (*v1.Node, []*v1.Pod, []*v1.Pod, error) {
|
||||||
@ -614,7 +613,7 @@ func setupTestScheduler(queuedPodStore *clientcache.FIFO, scache internalcache.C
|
|||||||
internalqueue.NewSchedulingQueue(nil),
|
internalqueue.NewSchedulingQueue(nil),
|
||||||
internalcache.NewEmptySnapshot(),
|
internalcache.NewEmptySnapshot(),
|
||||||
fwk,
|
fwk,
|
||||||
[]algorithm.SchedulerExtender{},
|
[]core.SchedulerExtender{},
|
||||||
nil,
|
nil,
|
||||||
informerFactory.Core().V1().PersistentVolumeClaims().Lister(),
|
informerFactory.Core().V1().PersistentVolumeClaims().Lister(),
|
||||||
informerFactory.Policy().V1beta1().PodDisruptionBudgets().Lister(),
|
informerFactory.Policy().V1beta1().PodDisruptionBudgets().Lister(),
|
||||||
@ -941,14 +940,14 @@ priorities:
|
|||||||
func TestSchedulerBinding(t *testing.T) {
|
func TestSchedulerBinding(t *testing.T) {
|
||||||
table := []struct {
|
table := []struct {
|
||||||
podName string
|
podName string
|
||||||
extenders []algorithm.SchedulerExtender
|
extenders []core.SchedulerExtender
|
||||||
wantBinderID int
|
wantBinderID int
|
||||||
name string
|
name string
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
name: "the extender is not a binder",
|
name: "the extender is not a binder",
|
||||||
podName: "pod0",
|
podName: "pod0",
|
||||||
extenders: []algorithm.SchedulerExtender{
|
extenders: []core.SchedulerExtender{
|
||||||
&fakeExtender{isBinder: false, interestedPodName: "pod0"},
|
&fakeExtender{isBinder: false, interestedPodName: "pod0"},
|
||||||
},
|
},
|
||||||
wantBinderID: -1, // default binding.
|
wantBinderID: -1, // default binding.
|
||||||
@ -956,7 +955,7 @@ func TestSchedulerBinding(t *testing.T) {
|
|||||||
{
|
{
|
||||||
name: "one of the extenders is a binder and interested in pod",
|
name: "one of the extenders is a binder and interested in pod",
|
||||||
podName: "pod0",
|
podName: "pod0",
|
||||||
extenders: []algorithm.SchedulerExtender{
|
extenders: []core.SchedulerExtender{
|
||||||
&fakeExtender{isBinder: false, interestedPodName: "pod0"},
|
&fakeExtender{isBinder: false, interestedPodName: "pod0"},
|
||||||
&fakeExtender{isBinder: true, interestedPodName: "pod0"},
|
&fakeExtender{isBinder: true, interestedPodName: "pod0"},
|
||||||
},
|
},
|
||||||
@ -965,7 +964,7 @@ func TestSchedulerBinding(t *testing.T) {
|
|||||||
{
|
{
|
||||||
name: "one of the extenders is a binder, but not interested in pod",
|
name: "one of the extenders is a binder, but not interested in pod",
|
||||||
podName: "pod1",
|
podName: "pod1",
|
||||||
extenders: []algorithm.SchedulerExtender{
|
extenders: []core.SchedulerExtender{
|
||||||
&fakeExtender{isBinder: false, interestedPodName: "pod1"},
|
&fakeExtender{isBinder: false, interestedPodName: "pod1"},
|
||||||
&fakeExtender{isBinder: true, interestedPodName: "pod0"},
|
&fakeExtender{isBinder: true, interestedPodName: "pod0"},
|
||||||
},
|
},
|
||||||
|
Loading…
Reference in New Issue
Block a user