Skip to content

Commit 4be70bc

Browse files
committed
1 parent 43dfd93 commit 4be70bc

File tree

1 file changed

+74
-16
lines changed

1 file changed

+74
-16
lines changed

pkg/scheduler/plugins/predicates/predicates.go

+74-16
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,11 @@ package predicates
1818

1919
import (
2020
"fmt"
21+
"strings"
2122

2223
"github.com/golang/glog"
2324

24-
v1 "k8s.io/api/core/v1"
25+
"k8s.io/api/core/v1"
2526
"k8s.io/apimachinery/pkg/labels"
2627
"k8s.io/kubernetes/pkg/scheduler/algorithm"
2728
"k8s.io/kubernetes/pkg/scheduler/algorithm/predicates"
@@ -104,12 +105,13 @@ func (c *cachedNodeInfo) GetNodeInfo(name string) (*v1.Node, error) {
104105
return node.Node, nil
105106
}
106107

107-
// CheckNodeUnschedulable Check to see if node spec is set to Schedulable or not
108-
func CheckNodeUnschedulable(pod *v1.Pod, nodeInfo *cache.NodeInfo) (bool, []algorithm.PredicateFailureReason, error) {
109-
if nodeInfo.Node().Spec.Unschedulable {
110-
return false, []algorithm.PredicateFailureReason{predicates.ErrNodeUnschedulable}, nil
108+
func formatReason(reasons []algorithm.PredicateFailureReason) string {
109+
reasonStrings := []string{}
110+
for _, v := range reasons {
111+
reasonStrings = append(reasonStrings, fmt.Sprintf("%v", v.GetReason()))
111112
}
112-
return true, nil, nil
113+
114+
return strings.Join(reasonStrings, ", ")
113115
}
114116

115117
func (pp *predicatesPlugin) OnSessionOpen(ssn *framework.Session) {
@@ -129,8 +131,36 @@ func (pp *predicatesPlugin) OnSessionOpen(ssn *framework.Session) {
129131
return fmt.Errorf("node <%s> can not allow more task running on it", node.Name)
130132
}
131133

134+
// CheckNodeCondition Predicate
135+
fit, reasons, err := predicates.CheckNodeConditionPredicate(task.Pod, nil, nodeInfo)
136+
if err != nil {
137+
return err
138+
}
139+
140+
glog.V(4).Infof("CheckNodeCondition predicates Task <%s/%s> on Node <%s>: fit %t, err %v",
141+
task.Namespace, task.Name, node.Name, fit, err)
142+
143+
if !fit {
144+
return fmt.Errorf("node <%s> are not available to schedule task <%s/%s>: %s",
145+
node.Name, task.Namespace, task.Name, formatReason(reasons))
146+
}
147+
148+
// CheckNodeUnschedulable Predicate
149+
fit, _, err = predicates.CheckNodeUnschedulablePredicate(task.Pod, nil, nodeInfo)
150+
if err != nil {
151+
return err
152+
}
153+
154+
glog.V(4).Infof("CheckNodeUnschedulable Predicate Task <%s/%s> on Node <%s>: fit %t, err %v",
155+
task.Namespace, task.Name, node.Name, fit, err)
156+
157+
if !fit {
158+
return fmt.Errorf("task <%s/%s> node <%s> set to unschedulable",
159+
task.Namespace, task.Name, node.Name)
160+
}
161+
132162
// NodeSelector Predicate
133-
fit, _, err := predicates.PodMatchNodeSelector(task.Pod, nil, nodeInfo)
163+
fit, _, err = predicates.PodMatchNodeSelector(task.Pod, nil, nodeInfo)
134164
if err != nil {
135165
return err
136166
}
@@ -157,32 +187,60 @@ func (pp *predicatesPlugin) OnSessionOpen(ssn *framework.Session) {
157187
node.Name, task.Namespace, task.Name)
158188
}
159189

160-
// Check to see if node.Spec.Unschedulable is set
161-
fit, _, err = CheckNodeUnschedulable(task.Pod, nodeInfo)
190+
// Toleration/Taint Predicate
191+
fit, _, err = predicates.PodToleratesNodeTaints(task.Pod, nil, nodeInfo)
162192
if err != nil {
163193
return err
164194
}
165195

166-
glog.V(4).Infof("Check Unschedulable Task <%s/%s> on Node <%s>: fit %t, err %v",
196+
glog.V(4).Infof("Toleration/Taint predicates Task <%s/%s> on Node <%s>: fit %t, err %v",
167197
task.Namespace, task.Name, node.Name, fit, err)
168198

169199
if !fit {
170-
return fmt.Errorf("task <%s/%s> node <%s> set to unschedulable",
200+
return fmt.Errorf("task <%s/%s> does not tolerate node <%s> taints",
171201
task.Namespace, task.Name, node.Name)
172202
}
173203

174-
// Toleration/Taint Predicate
175-
fit, _, err = predicates.PodToleratesNodeTaints(task.Pod, nil, nodeInfo)
204+
// CheckNodeMemoryPressurePredicate
205+
fit, _, err = predicates.CheckNodeMemoryPressurePredicate(task.Pod, nil, nodeInfo)
176206
if err != nil {
177207
return err
178208
}
179209

180-
glog.V(4).Infof("Toleration/Taint predicates Task <%s/%s> on Node <%s>: fit %t, err %v",
210+
glog.V(4).Infof("CheckNodeMemoryPressure predicates Task <%s/%s> on Node <%s>: fit %t, err %v",
181211
task.Namespace, task.Name, node.Name, fit, err)
182212

183213
if !fit {
184-
return fmt.Errorf("task <%s/%s> does not tolerate node <%s> taints",
185-
task.Namespace, task.Name, node.Name)
214+
return fmt.Errorf("node <%s> are not available to schedule task <%s/%s> due to Memory Pressure",
215+
node.Name, task.Namespace, task.Name)
216+
}
217+
218+
// CheckNodeDiskPressurePredicate
219+
fit, _, err = predicates.CheckNodeDiskPressurePredicate(task.Pod, nil, nodeInfo)
220+
if err != nil {
221+
return err
222+
}
223+
224+
glog.V(4).Infof("CheckNodeDiskPressure predicates Task <%s/%s> on Node <%s>: fit %t, err %v",
225+
task.Namespace, task.Name, node.Name, fit, err)
226+
227+
if !fit {
228+
return fmt.Errorf("node <%s> are not available to schedule task <%s/%s> due to Disk Pressure",
229+
node.Name, task.Namespace, task.Name)
230+
}
231+
232+
// CheckNodePIDPressurePredicate
233+
fit, _, err = predicates.CheckNodePIDPressurePredicate(task.Pod, nil, nodeInfo)
234+
if err != nil {
235+
return err
236+
}
237+
238+
glog.V(4).Infof("CheckNodePIDPressurePredicate predicates Task <%s/%s> on Node <%s>: fit %t, err %v",
239+
task.Namespace, task.Name, node.Name, fit, err)
240+
241+
if !fit {
242+
return fmt.Errorf("node <%s> are not available to schedule task <%s/%s> due to PID Pressure",
243+
node.Name, task.Namespace, task.Name)
186244
}
187245

188246
// Pod Affinity/Anti-Affinity Predicate

0 commit comments

Comments
 (0)