From acb63af14a88365c552880582a4505dab1bc0747 Mon Sep 17 00:00:00 2001 From: Tong He Date: Thu, 18 Feb 2021 15:27:31 -0800 Subject: [PATCH] Stop using --memory for cgroup v2. --- pkg/drivers/kic/oci/oci.go | 28 +++++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/pkg/drivers/kic/oci/oci.go b/pkg/drivers/kic/oci/oci.go index 4993ddcd4c67..7007e50a2490 100644 --- a/pkg/drivers/kic/oci/oci.go +++ b/pkg/drivers/kic/oci/oci.go @@ -107,14 +107,27 @@ func PrepareContainerNode(p CreateParams) error { return nil } +func hasMemoryCgroup() bool { + memcg := true + if runtime.GOOS == "linux" { + var memory string + if cgroup2, err := IsCgroup2UnifiedMode(); err == nil && cgroup2 { + memory = "/sys/fs/cgroup/memory/memsw.limit_in_bytes" + } + if _, err := os.Stat(memory); os.IsNotExist(err) { + klog.Warning("Your kernel does not support memory limit capabilities or the cgroup is not mounted.") + memcg = false + } + } + return memcg +} + func hasMemorySwapCgroup() bool { memcgSwap := true if runtime.GOOS == "linux" { var memoryswap string if cgroup2, err := IsCgroup2UnifiedMode(); err == nil && cgroup2 { memoryswap = "/sys/fs/cgroup/memory/memory.swap.max" - } else { - memoryswap = "/sys/fs/cgroup/memory/memsw.limit_in_bytes" } if _, err := os.Stat(memoryswap); os.IsNotExist(err) { // requires CONFIG_MEMCG_SWAP_ENABLED or cgroup_enable=memory in grub @@ -171,6 +184,7 @@ func CreateContainerNode(p CreateParams) error { } memcgSwap := hasMemorySwapCgroup() + memcg := hasMemoryCgroup() // https://www.freedesktop.org/wiki/Software/systemd/ContainerInterface/ var virtualization string @@ -179,11 +193,13 @@ func CreateContainerNode(p CreateParams) error { runArgs = append(runArgs, "--volume", fmt.Sprintf("%s:/var:exec", p.Name)) if memcgSwap { - runArgs = append(runArgs, fmt.Sprintf("--memory=%s", p.Memory)) - // Disable swap by setting the value to match runArgs = append(runArgs, fmt.Sprintf("--memory-swap=%s", p.Memory)) } + if memcg { + runArgs = append(runArgs, fmt.Sprintf("--memory=%s", p.Memory)) + } + virtualization = "podman" // VIRTUALIZATION_PODMAN } if p.OCIBinary == Docker { @@ -191,7 +207,9 @@ func CreateContainerNode(p CreateParams) error { // ignore apparmore github actions docker: https://github.com/kubernetes/minikube/issues/7624 runArgs = append(runArgs, "--security-opt", "apparmor=unconfined") - runArgs = append(runArgs, fmt.Sprintf("--memory=%s", p.Memory)) + if memcg { + runArgs = append(runArgs, fmt.Sprintf("--memory=%s", p.Memory)) + } if memcgSwap { // Disable swap by setting the value to match runArgs = append(runArgs, fmt.Sprintf("--memory-swap=%s", p.Memory))