@@ -18,10 +18,11 @@ package predicates
18
18
19
19
import (
20
20
"fmt"
21
+ "strings"
21
22
22
23
"github.com/golang/glog"
23
24
24
- v1 "k8s.io/api/core/v1"
25
+ "k8s.io/api/core/v1"
25
26
"k8s.io/apimachinery/pkg/labels"
26
27
"k8s.io/kubernetes/pkg/scheduler/algorithm"
27
28
"k8s.io/kubernetes/pkg/scheduler/algorithm/predicates"
@@ -104,12 +105,13 @@ func (c *cachedNodeInfo) GetNodeInfo(name string) (*v1.Node, error) {
104
105
return node .Node , nil
105
106
}
106
107
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 Error ( reasons []algorithm. PredicateFailureReason ) string {
109
+ reasonStrings := [] string {}
110
+ for _ , v := range reasons {
111
+ reasonStrings = append ( reasonStrings , fmt . Sprintf ( "%v" , v . GetReason ()))
111
112
}
112
- return true , nil , nil
113
+
114
+ return strings .Join (reasonStrings , ", " )
113
115
}
114
116
115
117
func (pp * predicatesPlugin ) OnSessionOpen (ssn * framework.Session ) {
@@ -129,8 +131,36 @@ func (pp *predicatesPlugin) OnSessionOpen(ssn *framework.Session) {
129
131
return fmt .Errorf ("node <%s> can not allow more task running on it" , node .Name )
130
132
}
131
133
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 , Error (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
+
132
162
// NodeSelector Predicate
133
- fit , _ , err : = predicates .PodMatchNodeSelector (task .Pod , nil , nodeInfo )
163
+ fit , _ , err = predicates .PodMatchNodeSelector (task .Pod , nil , nodeInfo )
134
164
if err != nil {
135
165
return err
136
166
}
@@ -157,32 +187,60 @@ func (pp *predicatesPlugin) OnSessionOpen(ssn *framework.Session) {
157
187
node .Name , task .Namespace , task .Name )
158
188
}
159
189
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 )
162
192
if err != nil {
163
193
return err
164
194
}
165
195
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" ,
167
197
task .Namespace , task .Name , node .Name , fit , err )
168
198
169
199
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 " ,
171
201
task .Namespace , task .Name , node .Name )
172
202
}
173
203
174
- // Toleration/Taint Predicate
175
- fit , _ , err = predicates .PodToleratesNodeTaints (task .Pod , nil , nodeInfo )
204
+ // CheckNodeMemoryPressurePredicate
205
+ fit , _ , err = predicates .CheckNodeMemoryPressurePredicate (task .Pod , nil , nodeInfo )
176
206
if err != nil {
177
207
return err
178
208
}
179
209
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" ,
181
211
task .Namespace , task .Name , node .Name , fit , err )
182
212
183
213
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 )
186
244
}
187
245
188
246
// Pod Affinity/Anti-Affinity Predicate
0 commit comments