@@ -31,6 +31,15 @@ import (
31
31
"github.com/kubernetes-sigs/kube-batch/pkg/scheduler/plugins/util"
32
32
)
33
33
34
+ const (
35
+ // MemoryPressurePredicate is the key for enabling Memory Pressure Predicate in YAML
36
+ MemoryPressurePredicate = "predicate.MemoryPressureEnable"
37
+ // DiskPressurePredicate is the key for enabling Disk Pressure Predicate in YAML
38
+ DiskPressurePredicate = "predicate.DiskPressureEnable"
39
+ // PIDPressurePredicate is the key for enabling PID Pressure Predicate in YAML
40
+ PIDPressurePredicate = "predicate.PIDPressureEnable"
41
+ )
42
+
34
43
type predicatesPlugin struct {
35
44
// Arguments given for the plugin
36
45
pluginArguments framework.Arguments
@@ -54,6 +63,53 @@ func formatReason(reasons []algorithm.PredicateFailureReason) string {
54
63
return strings .Join (reasonStrings , ", " )
55
64
}
56
65
66
+ type predicateEnable struct {
67
+ memoryPressureEnable bool
68
+ diskPressureEnable bool
69
+ pidPressureEnable bool
70
+ }
71
+
72
+ func enablePredicate (args framework.Arguments ) predicateEnable {
73
+
74
+ /*
75
+ User Should give predicatesEnable in this format(predicate.MemoryPressureEnable, predicate.DiskPressureEnable, predicate.PIDPressureEnable.
76
+ Currently supported only for MemoryPressure, DiskPressure, PIDPressure predicate checks.
77
+
78
+ actions: "reclaim, allocate, backfill, preempt"
79
+ tiers:
80
+ - plugins:
81
+ - name: priority
82
+ - name: gang
83
+ - name: conformance
84
+ - plugins:
85
+ - name: drf
86
+ - name: predicates
87
+ arguments:
88
+ predicate.MemoryPressureEnable: true
89
+ predicate.DiskPressureEnable: true
90
+ predicate.PIDPressureEnable: true
91
+ - name: proportion
92
+ - name: nodeorder
93
+ */
94
+
95
+ predicate := predicateEnable {
96
+ memoryPressureEnable : false ,
97
+ diskPressureEnable : false ,
98
+ pidPressureEnable : false ,
99
+ }
100
+
101
+ // Checks whether predicate.MemoryPressureEnable is provided or not, if given, modifies the value in predicateEnable struct.
102
+ args .GetBool (& predicate .memoryPressureEnable , MemoryPressurePredicate )
103
+
104
+ // Checks whether predicate.DiskPressureEnable is provided or not, if given, modifies the value in predicateEnable struct.
105
+ args .GetBool (& predicate .diskPressureEnable , DiskPressurePredicate )
106
+
107
+ // Checks whether predicate.PIDPressureEnable is provided or not, if given, modifies the value in predicateEnable struct.
108
+ args .GetBool (& predicate .pidPressureEnable , PIDPressurePredicate )
109
+
110
+ return predicate
111
+ }
112
+
57
113
func (pp * predicatesPlugin ) OnSessionOpen (ssn * framework.Session ) {
58
114
pl := & util.PodLister {
59
115
Session : ssn ,
@@ -63,6 +119,8 @@ func (pp *predicatesPlugin) OnSessionOpen(ssn *framework.Session) {
63
119
Session : ssn ,
64
120
}
65
121
122
+ predicate := enablePredicate (pp .pluginArguments )
123
+
66
124
ssn .AddPredicateFn (pp .Name (), func (task * api.TaskInfo , node * api.NodeInfo ) error {
67
125
nodeInfo := cache .NewNodeInfo (node .Pods ()... )
68
126
nodeInfo .SetNode (node .Node )
@@ -141,46 +199,52 @@ func (pp *predicatesPlugin) OnSessionOpen(ssn *framework.Session) {
141
199
task .Namespace , task .Name , node .Name )
142
200
}
143
201
144
- // CheckNodeMemoryPressurePredicate
145
- fit , _ , err = predicates .CheckNodeMemoryPressurePredicate (task .Pod , nil , nodeInfo )
146
- if err != nil {
147
- return err
148
- }
202
+ if predicate .memoryPressureEnable {
203
+ // CheckNodeMemoryPressurePredicate
204
+ fit , _ , err = predicates .CheckNodeMemoryPressurePredicate (task .Pod , nil , nodeInfo )
205
+ if err != nil {
206
+ return err
207
+ }
149
208
150
- glog .V (4 ).Infof ("CheckNodeMemoryPressure predicates Task <%s/%s> on Node <%s>: fit %t, err %v" ,
151
- task .Namespace , task .Name , node .Name , fit , err )
209
+ glog .V (4 ).Infof ("CheckNodeMemoryPressure predicates Task <%s/%s> on Node <%s>: fit %t, err %v" ,
210
+ task .Namespace , task .Name , node .Name , fit , err )
152
211
153
- if ! fit {
154
- return fmt .Errorf ("node <%s> are not available to schedule task <%s/%s> due to Memory Pressure" ,
155
- node .Name , task .Namespace , task .Name )
212
+ if ! fit {
213
+ return fmt .Errorf ("node <%s> are not available to schedule task <%s/%s> due to Memory Pressure" ,
214
+ node .Name , task .Namespace , task .Name )
215
+ }
156
216
}
157
217
158
- // CheckNodeDiskPressurePredicate
159
- fit , _ , err = predicates .CheckNodeDiskPressurePredicate (task .Pod , nil , nodeInfo )
160
- if err != nil {
161
- return err
162
- }
218
+ if predicate .diskPressureEnable {
219
+ // CheckNodeDiskPressurePredicate
220
+ fit , _ , err = predicates .CheckNodeDiskPressurePredicate (task .Pod , nil , nodeInfo )
221
+ if err != nil {
222
+ return err
223
+ }
163
224
164
- glog .V (4 ).Infof ("CheckNodeDiskPressure predicates Task <%s/%s> on Node <%s>: fit %t, err %v" ,
165
- task .Namespace , task .Name , node .Name , fit , err )
225
+ glog .V (4 ).Infof ("CheckNodeDiskPressure predicates Task <%s/%s> on Node <%s>: fit %t, err %v" ,
226
+ task .Namespace , task .Name , node .Name , fit , err )
166
227
167
- if ! fit {
168
- return fmt .Errorf ("node <%s> are not available to schedule task <%s/%s> due to Disk Pressure" ,
169
- node .Name , task .Namespace , task .Name )
228
+ if ! fit {
229
+ return fmt .Errorf ("node <%s> are not available to schedule task <%s/%s> due to Disk Pressure" ,
230
+ node .Name , task .Namespace , task .Name )
231
+ }
170
232
}
171
233
172
- // CheckNodePIDPressurePredicate
173
- fit , _ , err = predicates .CheckNodePIDPressurePredicate (task .Pod , nil , nodeInfo )
174
- if err != nil {
175
- return err
176
- }
234
+ if predicate .pidPressureEnable {
235
+ // CheckNodePIDPressurePredicate
236
+ fit , _ , err = predicates .CheckNodePIDPressurePredicate (task .Pod , nil , nodeInfo )
237
+ if err != nil {
238
+ return err
239
+ }
177
240
178
- glog .V (4 ).Infof ("CheckNodePIDPressurePredicate predicates Task <%s/%s> on Node <%s>: fit %t, err %v" ,
179
- task .Namespace , task .Name , node .Name , fit , err )
241
+ glog .V (4 ).Infof ("CheckNodePIDPressurePredicate predicates Task <%s/%s> on Node <%s>: fit %t, err %v" ,
242
+ task .Namespace , task .Name , node .Name , fit , err )
180
243
181
- if ! fit {
182
- return fmt .Errorf ("node <%s> are not available to schedule task <%s/%s> due to PID Pressure" ,
183
- node .Name , task .Namespace , task .Name )
244
+ if ! fit {
245
+ return fmt .Errorf ("node <%s> are not available to schedule task <%s/%s> due to PID Pressure" ,
246
+ node .Name , task .Namespace , task .Name )
247
+ }
184
248
}
185
249
186
250
// Pod Affinity/Anti-Affinity Predicate
0 commit comments