UPSTREAM: 44898: while calculating pod's cpu limits, need to count in init-container
@@ -84,28 +84,41 @@ func MilliCPUToShares(milliCPU int64) int64 {
// ResourceConfigForPod takes the input pod and outputs the cgroup resource config.
func ResourceConfigForPod(pod *v1.Pod) *ResourceConfig {
- // sum requests and limits, track if limits were applied for each resource.
+ // sum requests and limits.
+ reqs, limits, err := v1.PodRequestsAndLimits(pod)
+ if err != nil {
+ return &ResourceConfig{}
+ }
+
cpuRequests := int64(0)
cpuLimits := int64(0)
memoryLimits := int64(0)
+ if request, found := reqs[v1.ResourceCPU]; found {
+ cpuRequests = request.MilliValue()
+ }
+ if limit, found := limits[v1.ResourceCPU]; found {
+ cpuLimits = limit.MilliValue()
+ }
+ if limit, found := limits[v1.ResourceMemory]; found {
+ memoryLimits = limit.Value()
+ }
+
+ // convert to CFS values
+ cpuShares := MilliCPUToShares(cpuRequests)
+ cpuQuota, cpuPeriod := MilliCPUToQuota(cpuLimits)
+
+ // track if limits were applied for each resource.
memoryLimitsDeclared := true
cpuLimitsDeclared := true
for _, container := range pod.Spec.Containers {
- cpuRequests += container.Resources.Requests.Cpu().MilliValue()
- cpuLimits += container.Resources.Limits.Cpu().MilliValue()
if container.Resources.Limits.Cpu().IsZero() {
cpuLimitsDeclared = false
}
- memoryLimits += container.Resources.Limits.Memory().Value()
if container.Resources.Limits.Memory().IsZero() {
memoryLimitsDeclared = false
}
}
- // convert to CFS values
- cpuShares := MilliCPUToShares(cpuRequests)
- cpuQuota, cpuPeriod := MilliCPUToQuota(cpuLimits)
-
// determine the qos class
qosClass := qos.GetPodQOS(pod)
