@@ -23,6 +23,8 @@ import (
23
23
24
24
"k8s.io/api/core/v1"
25
25
"k8s.io/apimachinery/pkg/api/resource"
26
+ utilfeature "k8s.io/apiserver/pkg/util/feature"
27
+ "k8s.io/kubernetes/pkg/features"
26
28
)
27
29
28
30
// addResourceList adds the resources in newList to list
@@ -68,34 +70,47 @@ func PodRequestsAndLimits(pod *v1.Pod) (reqs, limits v1.ResourceList) {
68
70
return
69
71
}
70
72
71
- // GetResourceRequest finds and returns the request for a specific resource.
72
- func GetResourceRequest (pod * v1.Pod , resource v1.ResourceName ) int64 {
73
- if resource == v1 .ResourcePods {
74
- return 1
73
+ // GetResourceRequestQuantity finds and returns the request quantity for a specific resource.
74
+ func GetResourceRequestQuantity (pod * v1.Pod , resourceName v1.ResourceName ) resource.Quantity {
75
+
76
+ requestQuantity := resource.Quantity {Format : resource .BinarySI }
77
+
78
+ if resourceName == v1 .ResourceEphemeralStorage && ! utilfeature .DefaultFeatureGate .Enabled (features .LocalStorageCapacityIsolation ) {
79
+ // if the local storage capacity isolation feature gate is disabled, pods request 0 disk
80
+ return requestQuantity
75
81
}
76
- totalResources := int64 ( 0 )
82
+
77
83
for _ , container := range pod .Spec .Containers {
78
- if rQuantity , ok := container .Resources .Requests [resource ]; ok {
79
- if resource == v1 .ResourceCPU {
80
- totalResources += rQuantity .MilliValue ()
81
- } else {
82
- totalResources += rQuantity .Value ()
83
- }
84
+ if rQuantity , ok := container .Resources .Requests [resourceName ]; ok {
85
+ requestQuantity .Add (rQuantity )
84
86
}
85
87
}
86
- // take max_resource(sum_pod, any_init_container)
88
+
87
89
for _ , container := range pod .Spec .InitContainers {
88
- if rQuantity , ok := container .Resources .Requests [resource ]; ok {
89
- if resource == v1 .ResourceCPU {
90
- if rQuantity .MilliValue () > totalResources {
91
- totalResources = rQuantity .MilliValue ()
92
- }
93
- } else if rQuantity .Value () > totalResources {
94
- totalResources = rQuantity .Value ()
90
+ if rQuantity , ok := container .Resources .Requests [resourceName ]; ok {
91
+ if requestQuantity .Cmp (rQuantity ) < 0 {
92
+ requestQuantity = rQuantity
95
93
}
96
94
}
97
95
}
98
- return totalResources
96
+
97
+ return requestQuantity
98
+ }
99
+
100
+ // GetResourceRequest finds and returns the request value for a specific resource.
101
+ func GetResourceRequest (pod * v1.Pod , resource v1.ResourceName ) int64 {
102
+ if resource == v1 .ResourcePods {
103
+ return 1
104
+ }
105
+
106
+ requestQuantity := GetResourceRequestQuantity (pod , resource )
107
+
108
+ if resource == v1 .ResourceCPU {
109
+ return requestQuantity .MilliValue ()
110
+ } else {
111
+ return requestQuantity .Value ()
112
+ }
113
+
99
114
}
100
115
101
116
// ExtractResourceValueByContainerName extracts the value of a resource
0 commit comments