From 2a5a6c7fb8a7a5606fe586ae481e5519c78712d9 Mon Sep 17 00:00:00 2001 From: Itamar Holder Date: Sun, 7 Apr 2024 10:24:39 +0300 Subject: [PATCH 1/5] Refactor: add import alias to libcontainer cgroup manager Signed-off-by: Itamar Holder --- pkg/kubelet/cm/cgroup_manager_linux.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pkg/kubelet/cm/cgroup_manager_linux.go b/pkg/kubelet/cm/cgroup_manager_linux.go index 9f8fe3f40f1..8e9d3571549 100644 --- a/pkg/kubelet/cm/cgroup_manager_linux.go +++ b/pkg/kubelet/cm/cgroup_manager_linux.go @@ -28,7 +28,7 @@ import ( libcontainercgroups "github.com/opencontainers/runc/libcontainer/cgroups" "github.com/opencontainers/runc/libcontainer/cgroups/fscommon" - "github.com/opencontainers/runc/libcontainer/cgroups/manager" + libcontainercgroupmanager "github.com/opencontainers/runc/libcontainer/cgroups/manager" cgroupsystemd "github.com/opencontainers/runc/libcontainer/cgroups/systemd" libcontainerconfigs "github.com/opencontainers/runc/libcontainer/configs" "k8s.io/klog/v2" @@ -242,7 +242,7 @@ func (m *cgroupCommon) Destroy(cgroupConfig *CgroupConfig) error { }() libcontainerCgroupConfig := m.libctCgroupConfig(cgroupConfig, false) - manager, err := manager.New(libcontainerCgroupConfig) + manager, err := libcontainercgroupmanager.New(libcontainerCgroupConfig) if err != nil { return err } @@ -362,7 +362,7 @@ func (m *cgroupCommon) Update(cgroupConfig *CgroupConfig) error { }() libcontainerCgroupConfig := m.libctCgroupConfig(cgroupConfig, true) - manager, err := manager.New(libcontainerCgroupConfig) + manager, err := libcontainercgroupmanager.New(libcontainerCgroupConfig) if err != nil { return fmt.Errorf("failed to create cgroup manager: %v", err) } @@ -377,7 +377,7 @@ func (m *cgroupCommon) Create(cgroupConfig *CgroupConfig) error { }() libcontainerCgroupConfig := m.libctCgroupConfig(cgroupConfig, true) - manager, err := manager.New(libcontainerCgroupConfig) + manager, err := libcontainercgroupmanager.New(libcontainerCgroupConfig) if err != nil { return err } From 510ff6752839f1ad620389150b966bcbeca293a1 Mon Sep 17 00:00:00 2001 From: Itamar Holder Date: Sun, 7 Apr 2024 10:28:25 +0300 Subject: [PATCH 2/5] Use libcontainer's cgroup manager to update resources through systemd libcontainer's cgroup manager is version agnostic, and is agnostic to whether systemd is used. This way if systemd is used, the cgroup manager would be able to update resources properly so that if the daemon would be restarted the changes would not be reverted. Signed-off-by: Itamar Holder --- pkg/kubelet/cm/cgroup_manager_linux.go | 10 ++++++++++ pkg/kubelet/cm/cgroup_v1_manager_linux.go | 17 ----------------- pkg/kubelet/cm/cgroup_v2_manager_linux.go | 16 ---------------- 3 files changed, 10 insertions(+), 33 deletions(-) diff --git a/pkg/kubelet/cm/cgroup_manager_linux.go b/pkg/kubelet/cm/cgroup_manager_linux.go index 8e9d3571549..d557265617e 100644 --- a/pkg/kubelet/cm/cgroup_manager_linux.go +++ b/pkg/kubelet/cm/cgroup_manager_linux.go @@ -34,6 +34,7 @@ import ( "k8s.io/klog/v2" v1helper "k8s.io/kubernetes/pkg/apis/core/v1/helper" + v1 "k8s.io/api/core/v1" utilruntime "k8s.io/apimachinery/pkg/util/runtime" "k8s.io/apimachinery/pkg/util/sets" "k8s.io/kubernetes/pkg/kubelet/metrics" @@ -255,6 +256,15 @@ func (m *cgroupCommon) Destroy(cgroupConfig *CgroupConfig) error { return nil } +func (m *cgroupCommon) SetCgroupConfig(name CgroupName, resource v1.ResourceName, resourceConfig *ResourceConfig) error { + containerConfig := &CgroupConfig{ + Name: name, + ResourceParameters: resourceConfig, + } + + return m.Update(containerConfig) +} + // getCPUWeight converts from the range [2, 262144] to [1, 10000] func getCPUWeight(cpuShares *uint64) uint64 { if cpuShares == nil { diff --git a/pkg/kubelet/cm/cgroup_v1_manager_linux.go b/pkg/kubelet/cm/cgroup_v1_manager_linux.go index 7325ba797c9..0f9d1ee1896 100644 --- a/pkg/kubelet/cm/cgroup_v1_manager_linux.go +++ b/pkg/kubelet/cm/cgroup_v1_manager_linux.go @@ -26,7 +26,6 @@ import ( libcontainercgroups "github.com/opencontainers/runc/libcontainer/cgroups" "github.com/opencontainers/runc/libcontainer/cgroups/fscommon" - v1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/util/sets" ) @@ -123,22 +122,6 @@ func (c *cgroupV1impl) GetCgroupConfig(name CgroupName, resource v1.ResourceName return nil, fmt.Errorf("unsupported resource %v for cgroup %v", resource, name) } -// Set resource config for the specified resource type on the cgroup -func (c *cgroupV1impl) SetCgroupConfig(name CgroupName, resource v1.ResourceName, resourceConfig *ResourceConfig) error { - cgroupPaths := c.buildCgroupPaths(name) - cgroupResourcePath, found := cgroupPaths[string(resource)] - if !found { - return fmt.Errorf("failed to build %v cgroup fs path for cgroup %v", resource, name) - } - switch resource { - case v1.ResourceCPU: - return c.setCgroupCPUConfig(cgroupResourcePath, resourceConfig) - case v1.ResourceMemory: - return c.setCgroupMemoryConfig(cgroupResourcePath, resourceConfig) - } - return nil -} - func (c *cgroupV1impl) getCgroupCPUConfig(cgroupPath string) (*ResourceConfig, error) { cpuQuotaStr, errQ := fscommon.GetCgroupParamString(cgroupPath, "cpu.cfs_quota_us") if errQ != nil { diff --git a/pkg/kubelet/cm/cgroup_v2_manager_linux.go b/pkg/kubelet/cm/cgroup_v2_manager_linux.go index d8cf58d79cf..8cea1e2d0ac 100644 --- a/pkg/kubelet/cm/cgroup_v2_manager_linux.go +++ b/pkg/kubelet/cm/cgroup_v2_manager_linux.go @@ -98,22 +98,6 @@ func (c *cgroupV2impl) GetCgroupConfig(name CgroupName, resource v1.ResourceName return nil, fmt.Errorf("unsupported resource %v for cgroup %v", resource, name) } -// Set resource config for the specified resource type on the cgroup -func (c *cgroupV2impl) SetCgroupConfig(name CgroupName, resource v1.ResourceName, resourceConfig *ResourceConfig) error { - cgroupPaths := c.buildCgroupPaths(name) - cgroupResourcePath, found := cgroupPaths[string(resource)] - if !found { - return fmt.Errorf("failed to build %v cgroup fs path for cgroup %v", resource, name) - } - switch resource { - case v1.ResourceCPU: - return c.setCgroupCPUConfig(cgroupResourcePath, resourceConfig) - case v1.ResourceMemory: - return c.setCgroupMemoryConfig(cgroupResourcePath, resourceConfig) - } - return nil -} - func (c *cgroupV2impl) getCgroupCPUConfig(cgroupPath string) (*ResourceConfig, error) { var cpuLimitStr, cpuPeriodStr string cpuLimitAndPeriod, err := fscommon.GetCgroupParamString(cgroupPath, "cpu.max") From 7207ce20f0e52da6185132a058f2d8c309ad0169 Mon Sep 17 00:00:00 2001 From: Itamar Holder Date: Sun, 7 Apr 2024 10:32:12 +0300 Subject: [PATCH 3/5] Refactor: remove functions that are no longer used Signed-off-by: Itamar Holder --- pkg/kubelet/cm/cgroup_manager_linux.go | 10 -------- pkg/kubelet/cm/cgroup_v1_manager_linux.go | 29 ----------------------- pkg/kubelet/cm/cgroup_v2_manager_linux.go | 29 ----------------------- 3 files changed, 68 deletions(-) diff --git a/pkg/kubelet/cm/cgroup_manager_linux.go b/pkg/kubelet/cm/cgroup_manager_linux.go index d557265617e..55606b508aa 100644 --- a/pkg/kubelet/cm/cgroup_manager_linux.go +++ b/pkg/kubelet/cm/cgroup_manager_linux.go @@ -21,7 +21,6 @@ import ( "os" "path" "path/filepath" - "strconv" "strings" "sync" "time" @@ -485,12 +484,3 @@ func readCgroupMemoryConfig(cgroupPath string, memLimitFile string) (*ResourceCo return &ResourceConfig{Memory: &mLim}, nil } - -func writeCgroupMemoryLimit(memoryLimitFileLocation string, resourceConfig *ResourceConfig) error { - memLimit := strconv.FormatInt(*resourceConfig.Memory, 10) - if err := os.WriteFile(memoryLimitFileLocation, []byte(memLimit), 0700); err != nil { - return fmt.Errorf("failed to write %v to %v: %w", memLimit, memoryLimitFileLocation, err) - } - //TODO(vinaykul,InPlacePodVerticalScaling): Add memory request support - return nil -} diff --git a/pkg/kubelet/cm/cgroup_v1_manager_linux.go b/pkg/kubelet/cm/cgroup_v1_manager_linux.go index 0f9d1ee1896..afd02925833 100644 --- a/pkg/kubelet/cm/cgroup_v1_manager_linux.go +++ b/pkg/kubelet/cm/cgroup_v1_manager_linux.go @@ -19,8 +19,6 @@ package cm import ( "errors" "fmt" - "os" - "path/filepath" "strconv" "strings" @@ -142,33 +140,6 @@ func (c *cgroupV1impl) getCgroupCPUConfig(cgroupPath string) (*ResourceConfig, e return &ResourceConfig{CPUShares: &cpuShares, CPUQuota: &cpuQuota, CPUPeriod: &cpuPeriod}, nil } -func (c *cgroupV1impl) setCgroupCPUConfig(cgroupPath string, resourceConfig *ResourceConfig) error { - var cpuQuotaStr, cpuPeriodStr, cpuSharesStr string - if resourceConfig.CPUQuota != nil { - cpuQuotaStr = strconv.FormatInt(*resourceConfig.CPUQuota, 10) - if err := os.WriteFile(filepath.Join(cgroupPath, "cpu.cfs_quota_us"), []byte(cpuQuotaStr), 0700); err != nil { - return fmt.Errorf("failed to write %v to %v: %w", cpuQuotaStr, cgroupPath, err) - } - } - if resourceConfig.CPUPeriod != nil { - cpuPeriodStr = strconv.FormatUint(*resourceConfig.CPUPeriod, 10) - if err := os.WriteFile(filepath.Join(cgroupPath, "cpu.cfs_period_us"), []byte(cpuPeriodStr), 0700); err != nil { - return fmt.Errorf("failed to write %v to %v: %w", cpuPeriodStr, cgroupPath, err) - } - } - if resourceConfig.CPUShares != nil { - cpuSharesStr = strconv.FormatUint(*resourceConfig.CPUShares, 10) - if err := os.WriteFile(filepath.Join(cgroupPath, "cpu.shares"), []byte(cpuSharesStr), 0700); err != nil { - return fmt.Errorf("failed to write %v to %v: %w", cpuSharesStr, cgroupPath, err) - } - } - return nil -} - -func (c *cgroupV1impl) setCgroupMemoryConfig(cgroupPath string, resourceConfig *ResourceConfig) error { - return writeCgroupMemoryLimit(filepath.Join(cgroupPath, cgroupv1MemLimitFile), resourceConfig) -} - func (c *cgroupV1impl) getCgroupMemoryConfig(cgroupPath string) (*ResourceConfig, error) { return readCgroupMemoryConfig(cgroupPath, cgroupv1MemLimitFile) } diff --git a/pkg/kubelet/cm/cgroup_v2_manager_linux.go b/pkg/kubelet/cm/cgroup_v2_manager_linux.go index 8cea1e2d0ac..ad93e971fef 100644 --- a/pkg/kubelet/cm/cgroup_v2_manager_linux.go +++ b/pkg/kubelet/cm/cgroup_v2_manager_linux.go @@ -128,35 +128,6 @@ func (c *cgroupV2impl) getCgroupCPUConfig(cgroupPath string) (*ResourceConfig, e return &ResourceConfig{CPUShares: &cpuShares, CPUQuota: &cpuLimit, CPUPeriod: &cpuPeriod}, nil } -func (c *cgroupV2impl) setCgroupCPUConfig(cgroupPath string, resourceConfig *ResourceConfig) error { - if resourceConfig.CPUQuota != nil { - if resourceConfig.CPUPeriod == nil { - return fmt.Errorf("CpuPeriod must be specified in order to set CpuLimit") - } - cpuLimitStr := Cgroup2MaxCpuLimit - if *resourceConfig.CPUQuota > -1 { - cpuLimitStr = strconv.FormatInt(*resourceConfig.CPUQuota, 10) - } - cpuPeriodStr := strconv.FormatUint(*resourceConfig.CPUPeriod, 10) - cpuMaxStr := fmt.Sprintf("%s %s", cpuLimitStr, cpuPeriodStr) - if err := os.WriteFile(filepath.Join(cgroupPath, "cpu.max"), []byte(cpuMaxStr), 0700); err != nil { - return fmt.Errorf("failed to write %v to %v: %w", cpuMaxStr, cgroupPath, err) - } - } - if resourceConfig.CPUShares != nil { - cpuWeight := cpuSharesToCPUWeight(*resourceConfig.CPUShares) - cpuWeightStr := strconv.FormatUint(cpuWeight, 10) - if err := os.WriteFile(filepath.Join(cgroupPath, "cpu.weight"), []byte(cpuWeightStr), 0700); err != nil { - return fmt.Errorf("failed to write %v to %v: %w", cpuWeightStr, cgroupPath, err) - } - } - return nil -} - -func (c *cgroupV2impl) setCgroupMemoryConfig(cgroupPath string, resourceConfig *ResourceConfig) error { - return writeCgroupMemoryLimit(filepath.Join(cgroupPath, cgroupv2MemLimitFile), resourceConfig) -} - func (c *cgroupV2impl) getCgroupMemoryConfig(cgroupPath string) (*ResourceConfig, error) { return readCgroupMemoryConfig(cgroupPath, cgroupv2MemLimitFile) } From c792c30b6ad0f0af7fc1b90a5a5ac9ebcc5c228d Mon Sep 17 00:00:00 2001 From: Itamar Holder Date: Sun, 1 Sep 2024 15:14:17 +0300 Subject: [PATCH 4/5] Refactor: remove no longer needed resourceName parameter Signed-off-by: Itamar Holder --- pkg/kubelet/cm/cgroup_manager_linux.go | 3 +-- pkg/kubelet/cm/cgroup_manager_unsupported.go | 2 +- pkg/kubelet/cm/container_manager_stub.go | 2 +- pkg/kubelet/cm/fake_pod_container_manager.go | 2 +- pkg/kubelet/cm/pod_container_manager_linux.go | 6 +++--- pkg/kubelet/cm/types.go | 4 ++-- pkg/kubelet/kuberuntime/kuberuntime_manager.go | 4 ++-- 7 files changed, 11 insertions(+), 12 deletions(-) diff --git a/pkg/kubelet/cm/cgroup_manager_linux.go b/pkg/kubelet/cm/cgroup_manager_linux.go index 55606b508aa..6bcb1298c15 100644 --- a/pkg/kubelet/cm/cgroup_manager_linux.go +++ b/pkg/kubelet/cm/cgroup_manager_linux.go @@ -33,7 +33,6 @@ import ( "k8s.io/klog/v2" v1helper "k8s.io/kubernetes/pkg/apis/core/v1/helper" - v1 "k8s.io/api/core/v1" utilruntime "k8s.io/apimachinery/pkg/util/runtime" "k8s.io/apimachinery/pkg/util/sets" "k8s.io/kubernetes/pkg/kubelet/metrics" @@ -255,7 +254,7 @@ func (m *cgroupCommon) Destroy(cgroupConfig *CgroupConfig) error { return nil } -func (m *cgroupCommon) SetCgroupConfig(name CgroupName, resource v1.ResourceName, resourceConfig *ResourceConfig) error { +func (m *cgroupCommon) SetCgroupConfig(name CgroupName, resourceConfig *ResourceConfig) error { containerConfig := &CgroupConfig{ Name: name, ResourceParameters: resourceConfig, diff --git a/pkg/kubelet/cm/cgroup_manager_unsupported.go b/pkg/kubelet/cm/cgroup_manager_unsupported.go index c2c6e52d2ce..a98ea0c9b5f 100644 --- a/pkg/kubelet/cm/cgroup_manager_unsupported.go +++ b/pkg/kubelet/cm/cgroup_manager_unsupported.go @@ -89,7 +89,7 @@ func (m *unsupportedCgroupManager) GetCgroupConfig(name CgroupName, resource v1. return nil, errNotSupported } -func (m *unsupportedCgroupManager) SetCgroupConfig(name CgroupName, resource v1.ResourceName, resourceConfig *ResourceConfig) error { +func (m *unsupportedCgroupManager) SetCgroupConfig(name CgroupName, resourceConfig *ResourceConfig) error { return errNotSupported } diff --git a/pkg/kubelet/cm/container_manager_stub.go b/pkg/kubelet/cm/container_manager_stub.go index 35aeee36724..ed4de4aaae8 100644 --- a/pkg/kubelet/cm/container_manager_stub.go +++ b/pkg/kubelet/cm/container_manager_stub.go @@ -103,7 +103,7 @@ func (m *podContainerManagerStub) GetPodCgroupConfig(_ *v1.Pod, _ v1.ResourceNam return nil, fmt.Errorf("not implemented") } -func (m *podContainerManagerStub) SetPodCgroupConfig(_ *v1.Pod, _ v1.ResourceName, _ *ResourceConfig) error { +func (m *podContainerManagerStub) SetPodCgroupConfig(pod *v1.Pod, resourceConfig *ResourceConfig) error { return fmt.Errorf("not implemented") } diff --git a/pkg/kubelet/cm/fake_pod_container_manager.go b/pkg/kubelet/cm/fake_pod_container_manager.go index b4cce4418fc..c3ffae15078 100644 --- a/pkg/kubelet/cm/fake_pod_container_manager.go +++ b/pkg/kubelet/cm/fake_pod_container_manager.go @@ -119,7 +119,7 @@ func (cm *FakePodContainerManager) GetPodCgroupConfig(_ *v1.Pod, _ v1.ResourceNa return nil, nil } -func (cm *FakePodContainerManager) SetPodCgroupConfig(_ *v1.Pod, _ v1.ResourceName, _ *ResourceConfig) error { +func (cm *FakePodContainerManager) SetPodCgroupConfig(pod *v1.Pod, resourceConfig *ResourceConfig) error { cm.Lock() defer cm.Unlock() cm.CalledFunctions = append(cm.CalledFunctions, "SetPodCgroupConfig") diff --git a/pkg/kubelet/cm/pod_container_manager_linux.go b/pkg/kubelet/cm/pod_container_manager_linux.go index dae7f8bd3d4..c67f0cd4842 100644 --- a/pkg/kubelet/cm/pod_container_manager_linux.go +++ b/pkg/kubelet/cm/pod_container_manager_linux.go @@ -134,9 +134,9 @@ func (m *podContainerManagerImpl) GetPodCgroupConfig(pod *v1.Pod, resource v1.Re return m.cgroupManager.GetCgroupConfig(podCgroupName, resource) } -func (m *podContainerManagerImpl) SetPodCgroupConfig(pod *v1.Pod, resource v1.ResourceName, resourceConfig *ResourceConfig) error { +func (m *podContainerManagerImpl) SetPodCgroupConfig(pod *v1.Pod, resourceConfig *ResourceConfig) error { podCgroupName, _ := m.GetPodContainerName(pod) - return m.cgroupManager.SetCgroupConfig(podCgroupName, resource, resourceConfig) + return m.cgroupManager.SetCgroupConfig(podCgroupName, resourceConfig) } // Kill one process ID @@ -350,6 +350,6 @@ func (m *podContainerManagerNoop) GetPodCgroupConfig(_ *v1.Pod, _ v1.ResourceNam return nil, nil } -func (m *podContainerManagerNoop) SetPodCgroupConfig(_ *v1.Pod, _ v1.ResourceName, _ *ResourceConfig) error { +func (m *podContainerManagerNoop) SetPodCgroupConfig(_ *v1.Pod, _ *ResourceConfig) error { return nil } diff --git a/pkg/kubelet/cm/types.go b/pkg/kubelet/cm/types.go index 7a7d9268015..e6338d3af81 100644 --- a/pkg/kubelet/cm/types.go +++ b/pkg/kubelet/cm/types.go @@ -90,7 +90,7 @@ type CgroupManager interface { // Get the resource config values applied to the cgroup for specified resource type GetCgroupConfig(name CgroupName, resource v1.ResourceName) (*ResourceConfig, error) // Set resource config for the specified resource type on the cgroup - SetCgroupConfig(name CgroupName, resource v1.ResourceName, resourceConfig *ResourceConfig) error + SetCgroupConfig(name CgroupName, resourceConfig *ResourceConfig) error // Version of the cgroup implementation on the host Version() int } @@ -136,5 +136,5 @@ type PodContainerManager interface { GetPodCgroupConfig(pod *v1.Pod, resource v1.ResourceName) (*ResourceConfig, error) // Set resource config values for the specified resource type on the pod cgroup - SetPodCgroupConfig(pod *v1.Pod, resource v1.ResourceName, resourceConfig *ResourceConfig) error + SetPodCgroupConfig(pod *v1.Pod, resourceConfig *ResourceConfig) error } diff --git a/pkg/kubelet/kuberuntime/kuberuntime_manager.go b/pkg/kubelet/kuberuntime/kuberuntime_manager.go index 0c7a9b24c63..1faa0bd9019 100644 --- a/pkg/kubelet/kuberuntime/kuberuntime_manager.go +++ b/pkg/kubelet/kuberuntime/kuberuntime_manager.go @@ -669,9 +669,9 @@ func (m *kubeGenericRuntimeManager) doPodResizeAction(pod *v1.Pod, podStatus *ku } else { podCpuResources.CPUShares = podResources.CPUShares } - err = pcm.SetPodCgroupConfig(pod, rName, podCpuResources) + err = pcm.SetPodCgroupConfig(pod, podCpuResources) case v1.ResourceMemory: - err = pcm.SetPodCgroupConfig(pod, rName, podResources) + err = pcm.SetPodCgroupConfig(pod, podResources) } if err != nil { klog.ErrorS(err, "Failed to set cgroup config", "resource", rName, "pod", pod.Name) From f21473b924a008b95d0899e9a059f0a7cdef9d2c Mon Sep 17 00:00:00 2001 From: Itamar Holder Date: Wed, 30 Oct 2024 13:57:09 +0200 Subject: [PATCH 5/5] Set pod-level CPUPeriod only if CPUQuota is changed Signed-off-by: Itamar Holder --- pkg/kubelet/kuberuntime/kuberuntime_manager.go | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/pkg/kubelet/kuberuntime/kuberuntime_manager.go b/pkg/kubelet/kuberuntime/kuberuntime_manager.go index 1faa0bd9019..f523b155d2b 100644 --- a/pkg/kubelet/kuberuntime/kuberuntime_manager.go +++ b/pkg/kubelet/kuberuntime/kuberuntime_manager.go @@ -663,13 +663,14 @@ func (m *kubeGenericRuntimeManager) doPodResizeAction(pod *v1.Pod, podStatus *ku var err error switch rName { case v1.ResourceCPU: - podCpuResources := &cm.ResourceConfig{CPUPeriod: podResources.CPUPeriod} + podCPUResources := &cm.ResourceConfig{} if setLimitValue { - podCpuResources.CPUQuota = podResources.CPUQuota + podCPUResources.CPUPeriod = podResources.CPUPeriod + podCPUResources.CPUQuota = podResources.CPUQuota } else { - podCpuResources.CPUShares = podResources.CPUShares + podCPUResources.CPUShares = podResources.CPUShares } - err = pcm.SetPodCgroupConfig(pod, podCpuResources) + err = pcm.SetPodCgroupConfig(pod, podCPUResources) case v1.ResourceMemory: err = pcm.SetPodCgroupConfig(pod, podResources) }