From 4e002eacb11777ddfc06c2f4e361e7c453ab4d9d Mon Sep 17 00:00:00 2001 From: Derek Carr Date: Mon, 8 May 2017 17:51:03 -0400 Subject: [PATCH] Do not fail cgroup exists checks for unknown controllers --- pkg/kubelet/cm/cgroup_manager_linux.go | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/pkg/kubelet/cm/cgroup_manager_linux.go b/pkg/kubelet/cm/cgroup_manager_linux.go index ba782d50dc..e30d73bac7 100644 --- a/pkg/kubelet/cm/cgroup_manager_linux.go +++ b/pkg/kubelet/cm/cgroup_manager_linux.go @@ -227,8 +227,20 @@ func (m *cgroupManagerImpl) Exists(name CgroupName) bool { // Get map of all cgroup paths on the system for the particular cgroup cgroupPaths := m.buildCgroupPaths(name) + // the presence of alternative control groups not known to runc confuses + // the kubelet existence checks. + // ideally, we would have a mechaninsm in runc to support Exists() logic + // scoped to the set control groups it understands. this is being discussed + // in https://github.com/opencontainers/runc/issues/1440 + // once resolved, we can remove this code. + whitelistControllers := sets.NewString("cpu", "cpuacct", "cpuset", "memory", "hugetlb", "systemd") + // If even one cgroup path doesn't exist, then the cgroup doesn't exist. - for _, path := range cgroupPaths { + for controller, path := range cgroupPaths { + // ignore mounts we dont care about + if !whitelistControllers.Has(controller) { + continue + } if !libcontainercgroups.PathExists(path) { return false }