From 6661d326432e8405b0772d596d6db42b4fd2d280 Mon Sep 17 00:00:00 2001 From: Marwan Ahmed Date: Wed, 21 Apr 2021 19:38:16 -0700 Subject: [PATCH] add missing implementations in 1.18 --- cluster-autoscaler/estimator/binpacking_estimator.go | 2 +- .../simulator/predicates_checker_interface.go | 2 ++ .../simulator/scheduler_based_predicates_checker.go | 11 +++++++++++ 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/cluster-autoscaler/estimator/binpacking_estimator.go b/cluster-autoscaler/estimator/binpacking_estimator.go index 177e486c1f..71fe4aa841 100644 --- a/cluster-autoscaler/estimator/binpacking_estimator.go +++ b/cluster-autoscaler/estimator/binpacking_estimator.go @@ -81,7 +81,7 @@ func (estimator *BinpackingNodeEstimator) Estimate( for _, podInfo := range podInfos { found := false - nodeName, err := estimator.predicateChecker.FitsAnyNodeMatching(estimator.clusterSnapshot, podInfo.pod, func(nodeInfo *schedulerframework.NodeInfo) bool { + nodeName, err := estimator.predicateChecker.FitsAnyNodeMatching(estimator.clusterSnapshot, podInfo.pod, func(nodeInfo *schedulernodeinfo.NodeInfo) bool { return newNodeNames[nodeInfo.Node().Name] }) if err == nil { diff --git a/cluster-autoscaler/simulator/predicates_checker_interface.go b/cluster-autoscaler/simulator/predicates_checker_interface.go index 090562e7da..9d0d9d523d 100644 --- a/cluster-autoscaler/simulator/predicates_checker_interface.go +++ b/cluster-autoscaler/simulator/predicates_checker_interface.go @@ -18,10 +18,12 @@ package simulator import ( apiv1 "k8s.io/api/core/v1" + schedulernodeinfo "k8s.io/kubernetes/pkg/scheduler/nodeinfo" ) // PredicateChecker checks whether all required predicates pass for given Pod and Node. type PredicateChecker interface { FitsAnyNode(clusterSnapshot ClusterSnapshot, pod *apiv1.Pod) (string, error) + FitsAnyNodeMatching(clusterSnapshot ClusterSnapshot, pod *apiv1.Pod, nodeMatches func(*schedulernodeinfo.NodeInfo) bool) (string, error) CheckPredicates(clusterSnapshot ClusterSnapshot, pod *apiv1.Pod, nodeName string) *PredicateError } diff --git a/cluster-autoscaler/simulator/scheduler_based_predicates_checker.go b/cluster-autoscaler/simulator/scheduler_based_predicates_checker.go index 0cdbbc13eb..b9cfda5ace 100644 --- a/cluster-autoscaler/simulator/scheduler_based_predicates_checker.go +++ b/cluster-autoscaler/simulator/scheduler_based_predicates_checker.go @@ -89,6 +89,13 @@ func NewSchedulerBasedPredicateChecker(kubeClient kube_client.Interface, stop <- // FitsAnyNode checks if the given pod can be placed on any of the given nodes. func (p *SchedulerBasedPredicateChecker) FitsAnyNode(clusterSnapshot ClusterSnapshot, pod *apiv1.Pod) (string, error) { + return p.FitsAnyNodeMatching(clusterSnapshot, pod, func(*scheduler_nodeinfo.NodeInfo) bool { + return true + }) +} + +// FitsAnyNodeMatching checks if the given pod can be placed on any of the given nodes matching the provided function. +func (p *SchedulerBasedPredicateChecker) FitsAnyNodeMatching(clusterSnapshot ClusterSnapshot, pod *apiv1.Pod, nodeMatches func(*scheduler_nodeinfo.NodeInfo) bool) (string, error) { if clusterSnapshot == nil { return "", fmt.Errorf("ClusterSnapshot not provided") } @@ -113,6 +120,10 @@ func (p *SchedulerBasedPredicateChecker) FitsAnyNode(clusterSnapshot ClusterSnap } for _, nodeInfo := range nodeInfosList { + if !nodeMatches(nodeInfo) { + continue + } + // Be sure that the node is schedulable. if nodeInfo.Node().Spec.Unschedulable { continue