mirror of
				https://github.com/k3s-io/kubernetes.git
				synced 2025-10-31 22:01:06 +00:00 
			
		
		
		
	refactor scheduler extender related API
- move extender related API from pkg/scheduler/api to pkg/scheduler/apis/extender/v1 - alias extenderv1 to pkg/scheduler/apis/extender/v1 - use NodeScore and NodeScoreList in non-extender logic
This commit is contained in:
		| @@ -34,6 +34,7 @@ import ( | ||||
| 	clientset "k8s.io/client-go/kubernetes" | ||||
| 	_ "k8s.io/kubernetes/pkg/scheduler/algorithmprovider" | ||||
| 	schedulerapi "k8s.io/kubernetes/pkg/scheduler/api" | ||||
| 	extenderv1 "k8s.io/kubernetes/pkg/scheduler/apis/extender/v1" | ||||
| 	imageutils "k8s.io/kubernetes/test/utils/image" | ||||
| ) | ||||
|  | ||||
| @@ -45,7 +46,7 @@ const ( | ||||
| ) | ||||
|  | ||||
| type fitPredicate func(pod *v1.Pod, node *v1.Node) (bool, error) | ||||
| type priorityFunc func(pod *v1.Pod, nodes *v1.NodeList) (*schedulerapi.HostPriorityList, error) | ||||
| type priorityFunc func(pod *v1.Pod, nodes *v1.NodeList) (*extenderv1.HostPriorityList, error) | ||||
|  | ||||
| type priorityConfig struct { | ||||
| 	function priorityFunc | ||||
| @@ -67,7 +68,7 @@ func (e *Extender) serveHTTP(t *testing.T, w http.ResponseWriter, req *http.Requ | ||||
| 	encoder := json.NewEncoder(w) | ||||
|  | ||||
| 	if strings.Contains(req.URL.Path, filter) || strings.Contains(req.URL.Path, prioritize) { | ||||
| 		var args schedulerapi.ExtenderArgs | ||||
| 		var args extenderv1.ExtenderArgs | ||||
|  | ||||
| 		if err := decoder.Decode(&args); err != nil { | ||||
| 			http.Error(w, "Decode error", http.StatusBadRequest) | ||||
| @@ -93,14 +94,14 @@ func (e *Extender) serveHTTP(t *testing.T, w http.ResponseWriter, req *http.Requ | ||||
| 			} | ||||
| 		} | ||||
| 	} else if strings.Contains(req.URL.Path, bind) { | ||||
| 		var args schedulerapi.ExtenderBindingArgs | ||||
| 		var args extenderv1.ExtenderBindingArgs | ||||
|  | ||||
| 		if err := decoder.Decode(&args); err != nil { | ||||
| 			http.Error(w, "Decode error", http.StatusBadRequest) | ||||
| 			return | ||||
| 		} | ||||
|  | ||||
| 		resp := &schedulerapi.ExtenderBindingResult{} | ||||
| 		resp := &extenderv1.ExtenderBindingResult{} | ||||
|  | ||||
| 		if err := e.Bind(&args); err != nil { | ||||
| 			resp.Error = err.Error() | ||||
| @@ -114,19 +115,19 @@ func (e *Extender) serveHTTP(t *testing.T, w http.ResponseWriter, req *http.Requ | ||||
| 	} | ||||
| } | ||||
|  | ||||
| func (e *Extender) filterUsingNodeCache(args *schedulerapi.ExtenderArgs) (*schedulerapi.ExtenderFilterResult, error) { | ||||
| func (e *Extender) filterUsingNodeCache(args *extenderv1.ExtenderArgs) (*extenderv1.ExtenderFilterResult, error) { | ||||
| 	nodeSlice := make([]string, 0) | ||||
| 	failedNodesMap := schedulerapi.FailedNodesMap{} | ||||
| 	failedNodesMap := extenderv1.FailedNodesMap{} | ||||
| 	for _, nodeName := range *args.NodeNames { | ||||
| 		fits := true | ||||
| 		for _, predicate := range e.predicates { | ||||
| 			fit, err := predicate(args.Pod, | ||||
| 				&v1.Node{ObjectMeta: metav1.ObjectMeta{Name: nodeName}}) | ||||
| 			if err != nil { | ||||
| 				return &schedulerapi.ExtenderFilterResult{ | ||||
| 				return &extenderv1.ExtenderFilterResult{ | ||||
| 					Nodes:       nil, | ||||
| 					NodeNames:   nil, | ||||
| 					FailedNodes: schedulerapi.FailedNodesMap{}, | ||||
| 					FailedNodes: extenderv1.FailedNodesMap{}, | ||||
| 					Error:       err.Error(), | ||||
| 				}, err | ||||
| 			} | ||||
| @@ -142,16 +143,16 @@ func (e *Extender) filterUsingNodeCache(args *schedulerapi.ExtenderArgs) (*sched | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	return &schedulerapi.ExtenderFilterResult{ | ||||
| 	return &extenderv1.ExtenderFilterResult{ | ||||
| 		Nodes:       nil, | ||||
| 		NodeNames:   &nodeSlice, | ||||
| 		FailedNodes: failedNodesMap, | ||||
| 	}, nil | ||||
| } | ||||
|  | ||||
| func (e *Extender) Filter(args *schedulerapi.ExtenderArgs) (*schedulerapi.ExtenderFilterResult, error) { | ||||
| func (e *Extender) Filter(args *extenderv1.ExtenderArgs) (*extenderv1.ExtenderFilterResult, error) { | ||||
| 	filtered := []v1.Node{} | ||||
| 	failedNodesMap := schedulerapi.FailedNodesMap{} | ||||
| 	failedNodesMap := extenderv1.FailedNodesMap{} | ||||
|  | ||||
| 	if e.nodeCacheCapable { | ||||
| 		return e.filterUsingNodeCache(args) | ||||
| @@ -162,10 +163,10 @@ func (e *Extender) Filter(args *schedulerapi.ExtenderArgs) (*schedulerapi.Extend | ||||
| 		for _, predicate := range e.predicates { | ||||
| 			fit, err := predicate(args.Pod, &node) | ||||
| 			if err != nil { | ||||
| 				return &schedulerapi.ExtenderFilterResult{ | ||||
| 				return &extenderv1.ExtenderFilterResult{ | ||||
| 					Nodes:       &v1.NodeList{}, | ||||
| 					NodeNames:   nil, | ||||
| 					FailedNodes: schedulerapi.FailedNodesMap{}, | ||||
| 					FailedNodes: extenderv1.FailedNodesMap{}, | ||||
| 					Error:       err.Error(), | ||||
| 				}, err | ||||
| 			} | ||||
| @@ -181,15 +182,15 @@ func (e *Extender) Filter(args *schedulerapi.ExtenderArgs) (*schedulerapi.Extend | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	return &schedulerapi.ExtenderFilterResult{ | ||||
| 	return &extenderv1.ExtenderFilterResult{ | ||||
| 		Nodes:       &v1.NodeList{Items: filtered}, | ||||
| 		NodeNames:   nil, | ||||
| 		FailedNodes: failedNodesMap, | ||||
| 	}, nil | ||||
| } | ||||
|  | ||||
| func (e *Extender) Prioritize(args *schedulerapi.ExtenderArgs) (*schedulerapi.HostPriorityList, error) { | ||||
| 	result := schedulerapi.HostPriorityList{} | ||||
| func (e *Extender) Prioritize(args *extenderv1.ExtenderArgs) (*extenderv1.HostPriorityList, error) { | ||||
| 	result := extenderv1.HostPriorityList{} | ||||
| 	combinedScores := map[string]int64{} | ||||
| 	var nodes = &v1.NodeList{Items: []v1.Node{}} | ||||
|  | ||||
| @@ -209,19 +210,19 @@ func (e *Extender) Prioritize(args *schedulerapi.ExtenderArgs) (*schedulerapi.Ho | ||||
| 		priorityFunc := prioritizer.function | ||||
| 		prioritizedList, err := priorityFunc(args.Pod, nodes) | ||||
| 		if err != nil { | ||||
| 			return &schedulerapi.HostPriorityList{}, err | ||||
| 			return &extenderv1.HostPriorityList{}, err | ||||
| 		} | ||||
| 		for _, hostEntry := range *prioritizedList { | ||||
| 			combinedScores[hostEntry.Host] += hostEntry.Score * weight | ||||
| 		} | ||||
| 	} | ||||
| 	for host, score := range combinedScores { | ||||
| 		result = append(result, schedulerapi.HostPriority{Host: host, Score: score}) | ||||
| 		result = append(result, extenderv1.HostPriority{Host: host, Score: score}) | ||||
| 	} | ||||
| 	return &result, nil | ||||
| } | ||||
|  | ||||
| func (e *Extender) Bind(binding *schedulerapi.ExtenderBindingArgs) error { | ||||
| func (e *Extender) Bind(binding *extenderv1.ExtenderBindingArgs) error { | ||||
| 	b := &v1.Binding{ | ||||
| 		ObjectMeta: metav1.ObjectMeta{Namespace: binding.PodNamespace, Name: binding.PodName, UID: binding.PodUID}, | ||||
| 		Target: v1.ObjectReference{ | ||||
| @@ -247,14 +248,14 @@ func machine2_3_5Predicate(pod *v1.Pod, node *v1.Node) (bool, error) { | ||||
| 	return false, nil | ||||
| } | ||||
|  | ||||
| func machine2Prioritizer(pod *v1.Pod, nodes *v1.NodeList) (*schedulerapi.HostPriorityList, error) { | ||||
| 	result := schedulerapi.HostPriorityList{} | ||||
| func machine2Prioritizer(pod *v1.Pod, nodes *v1.NodeList) (*extenderv1.HostPriorityList, error) { | ||||
| 	result := extenderv1.HostPriorityList{} | ||||
| 	for _, node := range nodes.Items { | ||||
| 		score := 1 | ||||
| 		if node.Name == "machine2" { | ||||
| 			score = 10 | ||||
| 		} | ||||
| 		result = append(result, schedulerapi.HostPriority{ | ||||
| 		result = append(result, extenderv1.HostPriority{ | ||||
| 			Host:  node.Name, | ||||
| 			Score: int64(score), | ||||
| 		}) | ||||
| @@ -262,14 +263,14 @@ func machine2Prioritizer(pod *v1.Pod, nodes *v1.NodeList) (*schedulerapi.HostPri | ||||
| 	return &result, nil | ||||
| } | ||||
|  | ||||
| func machine3Prioritizer(pod *v1.Pod, nodes *v1.NodeList) (*schedulerapi.HostPriorityList, error) { | ||||
| 	result := schedulerapi.HostPriorityList{} | ||||
| func machine3Prioritizer(pod *v1.Pod, nodes *v1.NodeList) (*extenderv1.HostPriorityList, error) { | ||||
| 	result := extenderv1.HostPriorityList{} | ||||
| 	for _, node := range nodes.Items { | ||||
| 		score := 1 | ||||
| 		if node.Name == "machine3" { | ||||
| 			score = 10 | ||||
| 		} | ||||
| 		result = append(result, schedulerapi.HostPriority{ | ||||
| 		result = append(result, extenderv1.HostPriority{ | ||||
| 			Host:  node.Name, | ||||
| 			Score: int64(score), | ||||
| 		}) | ||||
|   | ||||
| @@ -39,10 +39,10 @@ import ( | ||||
| 	"k8s.io/kubernetes/pkg/scheduler" | ||||
| 	"k8s.io/kubernetes/pkg/scheduler/algorithm/predicates" | ||||
| 	_ "k8s.io/kubernetes/pkg/scheduler/algorithmprovider" | ||||
| 	schedulerapi "k8s.io/kubernetes/pkg/scheduler/api" | ||||
| 	kubeschedulerconfig "k8s.io/kubernetes/pkg/scheduler/apis/config" | ||||
| 	"k8s.io/kubernetes/pkg/scheduler/factory" | ||||
| 	schedulerplugins "k8s.io/kubernetes/pkg/scheduler/framework/plugins" | ||||
| 	schedulerframework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" | ||||
| 	schedulernodeinfo "k8s.io/kubernetes/pkg/scheduler/nodeinfo" | ||||
| 	"k8s.io/kubernetes/test/integration/framework" | ||||
| ) | ||||
| @@ -62,12 +62,12 @@ func PredicateTwo(pod *v1.Pod, meta predicates.PredicateMetadata, nodeInfo *sche | ||||
| 	return true, nil, nil | ||||
| } | ||||
|  | ||||
| func PriorityOne(pod *v1.Pod, nodeNameToInfo map[string]*schedulernodeinfo.NodeInfo, nodes []*v1.Node) (schedulerapi.HostPriorityList, error) { | ||||
| 	return []schedulerapi.HostPriority{}, nil | ||||
| func PriorityOne(pod *v1.Pod, nodeNameToInfo map[string]*schedulernodeinfo.NodeInfo, nodes []*v1.Node) (schedulerframework.NodeScoreList, error) { | ||||
| 	return []schedulerframework.NodeScore{}, nil | ||||
| } | ||||
|  | ||||
| func PriorityTwo(pod *v1.Pod, nodeNameToInfo map[string]*schedulernodeinfo.NodeInfo, nodes []*v1.Node) (schedulerapi.HostPriorityList, error) { | ||||
| 	return []schedulerapi.HostPriority{}, nil | ||||
| func PriorityTwo(pod *v1.Pod, nodeNameToInfo map[string]*schedulernodeinfo.NodeInfo, nodes []*v1.Node) (schedulerframework.NodeScoreList, error) { | ||||
| 	return []schedulerframework.NodeScore{}, nil | ||||
| } | ||||
|  | ||||
| // TestSchedulerCreationFromConfigMap verifies that scheduler can be created | ||||
|   | ||||
		Reference in New Issue
	
	Block a user