From f2eec0a81673e66fc9f65d2eff165302cbb3dd33 Mon Sep 17 00:00:00 2001 From: pacoxu Date: Wed, 23 Jun 2021 17:17:20 +0800 Subject: [PATCH] ResourceConfigForPod: check initContainers as other QoS func Signed-off-by: pacoxu --- pkg/kubelet/cm/helpers_linux.go | 15 +++++++++++++ pkg/kubelet/cm/helpers_linux_test.go | 33 ++++++++++++++++++++++++---- 2 files changed, 44 insertions(+), 4 deletions(-) diff --git a/pkg/kubelet/cm/helpers_linux.go b/pkg/kubelet/cm/helpers_linux.go index aa5c37639dc..e06a2de26f2 100644 --- a/pkg/kubelet/cm/helpers_linux.go +++ b/pkg/kubelet/cm/helpers_linux.go @@ -158,6 +158,21 @@ func ResourceConfigForPod(pod *v1.Pod, enforceCPULimits bool, cpuPeriod uint64) } } + for _, container := range pod.Spec.InitContainers { + if container.Resources.Limits.Cpu().IsZero() { + cpuLimitsDeclared = false + } + if container.Resources.Limits.Memory().IsZero() { + memoryLimitsDeclared = false + } + containerHugePageLimits := HugePageLimits(container.Resources.Requests) + for k, v := range containerHugePageLimits { + if value, exists := hugePageLimits[k]; !exists || v > value { + hugePageLimits[k] = v + } + } + } + // quota is not capped when cfs quota is disabled if !enforceCPULimits { cpuQuota = int64(-1) diff --git a/pkg/kubelet/cm/helpers_linux_test.go b/pkg/kubelet/cm/helpers_linux_test.go index 56d765fbc22..230320a2b48 100644 --- a/pkg/kubelet/cm/helpers_linux_test.go +++ b/pkg/kubelet/cm/helpers_linux_test.go @@ -248,6 +248,31 @@ func TestResourceConfigForPod(t *testing.T) { quotaPeriod: tunedQuotaPeriod, expected: &ResourceConfig{CpuShares: &guaranteedShares, CpuQuota: &cpuNoLimit, CpuPeriod: &tunedQuotaPeriod, Memory: &guaranteedMemory}, }, + "burstable-partial-limits-with-init-containers": { + pod: &v1.Pod{ + Spec: v1.PodSpec{ + Containers: []v1.Container{ + { + Resources: getResourceRequirements(getResourceList("100m", "100m"), getResourceList("100m", "100Mi")), + }, + { + Resources: getResourceRequirements(getResourceList("100m", "100m"), getResourceList("", "")), + }, + }, + InitContainers: []v1.Container{ + { + Resources: getResourceRequirements(getResourceList("100m", "100m"), getResourceList("100m", "100Mi")), + }, + { + Resources: getResourceRequirements(getResourceList("100m", "100m"), getResourceList("", "")), + }, + }, + }, + }, + enforceCPULimits: true, + quotaPeriod: tunedQuotaPeriod, + expected: &ResourceConfig{CpuShares: &burstablePartialShares}, + }, } for testName, testCase := range testCases { @@ -255,16 +280,16 @@ func TestResourceConfigForPod(t *testing.T) { actual := ResourceConfigForPod(testCase.pod, testCase.enforceCPULimits, testCase.quotaPeriod) if !reflect.DeepEqual(actual.CpuPeriod, testCase.expected.CpuPeriod) { - t.Errorf("unexpected result, test: %v, cpu period not as expected", testName) + t.Errorf("unexpected result, test: %v, cpu period not as expected. Expected: %v, Actual:%v", testName, *testCase.expected.CpuPeriod, *actual.CpuPeriod) } if !reflect.DeepEqual(actual.CpuQuota, testCase.expected.CpuQuota) { - t.Errorf("unexpected result, test: %v, cpu quota not as expected", testName) + t.Errorf("unexpected result, test: %v, cpu quota not as expected. Expected: %v, Actual:%v", testName, *testCase.expected.CpuQuota, *actual.CpuQuota) } if !reflect.DeepEqual(actual.CpuShares, testCase.expected.CpuShares) { - t.Errorf("unexpected result, test: %v, cpu shares not as expected", testName) + t.Errorf("unexpected result, test: %v, cpu shares not as expected. Expected: %v, Actual:%v", testName, *testCase.expected.CpuShares, &actual.CpuShares) } if !reflect.DeepEqual(actual.Memory, testCase.expected.Memory) { - t.Errorf("unexpected result, test: %v, memory not as expected", testName) + t.Errorf("unexpected result, test: %v, memory not as expected. Expected: %v, Actual:%v", testName, *testCase.expected.Memory, *actual.Memory) } } }