@@ -214,7 +214,7 @@ func IsNodeUnschedulable(node *v1.Node) bool {
214
214
func fitsRequest (nodeIndexer podutil.GetPodsAssignedToNodeFunc , pod * v1.Pod , node * v1.Node ) (bool , error ) {
215
215
// Get pod requests
216
216
podRequests , _ := utils .PodRequestsAndLimits (pod )
217
- resourceNames := make ( []v1.ResourceName , 0 , len ( podRequests ))
217
+ resourceNames := []v1.ResourceName { v1 . ResourcePods }
218
218
for name := range podRequests {
219
219
resourceNames = append (resourceNames , name )
220
220
}
@@ -237,7 +237,7 @@ func fitsRequest(nodeIndexer podutil.GetPodsAssignedToNodeFunc, pod *v1.Pod, nod
237
237
}
238
238
}
239
239
// check pod num, at least one pod number is avaibalbe
240
- if availableResources [v1 .ResourcePods ].MilliValue () <= 0 {
240
+ if quantity , ok := availableResources [v1 .ResourcePods ]; ok && quantity .MilliValue () <= 0 {
241
241
return false , fmt .Errorf ("insufficient %v" , v1 .ResourcePods )
242
242
}
243
243
@@ -254,13 +254,18 @@ func nodeAvailableResources(nodeIndexer podutil.GetPodsAssignedToNodeFunc, node
254
254
if err != nil {
255
255
return nil , err
256
256
}
257
- remainingResources := api.ReferencedResourceList {
258
- v1 .ResourceCPU : resource .NewMilliQuantity (node .Status .Allocatable .Cpu ().MilliValue ()- nodeUtilization [v1 .ResourceCPU ].MilliValue (), resource .DecimalSI ),
259
- v1 .ResourceMemory : resource .NewQuantity (node .Status .Allocatable .Memory ().Value ()- nodeUtilization [v1 .ResourceMemory ].Value (), resource .BinarySI ),
260
- v1 .ResourcePods : resource .NewQuantity (node .Status .Allocatable .Pods ().Value ()- nodeUtilization [v1 .ResourcePods ].Value (), resource .DecimalSI ),
261
- }
257
+ remainingResources := api.ReferencedResourceList {}
262
258
for _ , name := range resourceNames {
263
- if ! IsBasicResource (name ) {
259
+ if IsBasicResource (name ) {
260
+ switch name {
261
+ case v1 .ResourceCPU :
262
+ remainingResources [name ] = resource .NewMilliQuantity (node .Status .Allocatable .Cpu ().MilliValue ()- nodeUtilization [v1 .ResourceCPU ].MilliValue (), resource .DecimalSI )
263
+ case v1 .ResourceMemory :
264
+ remainingResources [name ] = resource .NewQuantity (node .Status .Allocatable .Memory ().Value ()- nodeUtilization [v1 .ResourceMemory ].Value (), resource .BinarySI )
265
+ case v1 .ResourcePods :
266
+ remainingResources [name ] = resource .NewQuantity (node .Status .Allocatable .Pods ().Value ()- nodeUtilization [v1 .ResourcePods ].Value (), resource .DecimalSI )
267
+ }
268
+ } else {
264
269
if _ , exists := node .Status .Allocatable [name ]; exists {
265
270
allocatableResource := node .Status .Allocatable [name ]
266
271
remainingResources [name ] = resource .NewQuantity (allocatableResource .Value ()- nodeUtilization [name ].Value (), resource .DecimalSI )
@@ -275,13 +280,16 @@ func nodeAvailableResources(nodeIndexer podutil.GetPodsAssignedToNodeFunc, node
275
280
276
281
// NodeUtilization returns the resources requested by the given pods. Only resources supplied in the resourceNames parameter are calculated.
277
282
func NodeUtilization (pods []* v1.Pod , resourceNames []v1.ResourceName , podUtilization podutil.PodUtilizationFnc ) (api.ReferencedResourceList , error ) {
278
- totalUtilization := api.ReferencedResourceList {
279
- v1 .ResourceCPU : resource .NewMilliQuantity (0 , resource .DecimalSI ),
280
- v1 .ResourceMemory : resource .NewQuantity (0 , resource .BinarySI ),
281
- v1 .ResourcePods : resource .NewQuantity (int64 (len (pods )), resource .DecimalSI ),
282
- }
283
+ totalUtilization := api.ReferencedResourceList {}
283
284
for _ , name := range resourceNames {
284
- if ! IsBasicResource (name ) {
285
+ switch name {
286
+ case v1 .ResourceCPU :
287
+ totalUtilization [name ] = resource .NewMilliQuantity (0 , resource .DecimalSI )
288
+ case v1 .ResourceMemory :
289
+ totalUtilization [name ] = resource .NewQuantity (0 , resource .BinarySI )
290
+ case v1 .ResourcePods :
291
+ totalUtilization [name ] = resource .NewQuantity (int64 (len (pods )), resource .DecimalSI )
292
+ default :
285
293
totalUtilization [name ] = resource .NewQuantity (0 , resource .DecimalSI )
286
294
}
287
295
}
0 commit comments