mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-27 21:47:07 +00:00
Fix get all pods from cgroups logic
This commit is contained in:
parent
b86882955b
commit
a7684569fb
@ -147,6 +147,7 @@ func (l *libcontainerAdapter) revertName(name string) CgroupName {
|
|||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
driverName = strings.TrimSuffix(driverName, ".slice")
|
driverName = strings.TrimSuffix(driverName, ".slice")
|
||||||
|
driverName = strings.Replace(driverName, "-", "/", -1)
|
||||||
driverName = strings.Replace(driverName, "_", "-", -1)
|
driverName = strings.Replace(driverName, "_", "-", -1)
|
||||||
return CgroupName(driverName)
|
return CgroupName(driverName)
|
||||||
}
|
}
|
||||||
|
@ -200,24 +200,31 @@ func (m *podContainerManagerImpl) GetAllPodsFromCgroups() (map[types.UID]CgroupN
|
|||||||
return nil, fmt.Errorf("failed to read the cgroup directory %v : %v", qc, err)
|
return nil, fmt.Errorf("failed to read the cgroup directory %v : %v", qc, err)
|
||||||
}
|
}
|
||||||
for i := range dirInfo {
|
for i := range dirInfo {
|
||||||
// note: we do a contains check because on systemd, the literal cgroupfs name will prefix the qos as well.
|
// its not a directory, so continue on...
|
||||||
if dirInfo[i].IsDir() && strings.Contains(dirInfo[i].Name(), podCgroupNamePrefix) {
|
if !dirInfo[i].IsDir() {
|
||||||
// we need to convert the name to an internal identifier
|
continue
|
||||||
internalName := m.cgroupManager.CgroupName(dirInfo[i].Name())
|
}
|
||||||
|
// convert the concrete cgroupfs name back to an internal identifier
|
||||||
|
// this is needed to handle path conversion for systemd environments.
|
||||||
|
// we pass the fully qualified path so decoding can work as expected
|
||||||
|
// since systemd encodes the path in each segment.
|
||||||
|
cgroupfsPath := path.Join(qcConversion, dirInfo[i].Name())
|
||||||
|
internalPath := m.cgroupManager.CgroupName(cgroupfsPath)
|
||||||
|
// we only care about base segment of the converted path since that
|
||||||
|
// is what we are reading currently to know if it is a pod or not.
|
||||||
|
basePath := path.Base(string(internalPath))
|
||||||
|
if !strings.Contains(basePath, podCgroupNamePrefix) {
|
||||||
|
continue
|
||||||
|
}
|
||||||
// we then split the name on the pod prefix to determine the uid
|
// we then split the name on the pod prefix to determine the uid
|
||||||
parts := strings.Split(string(internalName), podCgroupNamePrefix)
|
parts := strings.Split(basePath, podCgroupNamePrefix)
|
||||||
// the uid is missing, so we log the unexpected cgroup not of form pod<uid>
|
// the uid is missing, so we log the unexpected cgroup not of form pod<uid>
|
||||||
if len(parts) != 2 {
|
if len(parts) != 2 {
|
||||||
location := path.Join(qc, dirInfo[i].Name())
|
glog.Errorf("pod cgroup manager ignoring unexpected cgroup %v because it is not a pod", cgroupfsPath)
|
||||||
glog.Errorf("pod cgroup manager ignoring unexpected cgroup %v because it is not a pod", location)
|
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
podUID := parts[1]
|
podUID := parts[1]
|
||||||
// because the literal cgroupfs name could encode the qos tier (on systemd), we avoid double encoding
|
foundPods[types.UID(podUID)] = internalPath
|
||||||
// by just rebuilding the fully qualified CgroupName according to our internal convention.
|
|
||||||
cgroupName := CgroupName(path.Join(qosContainerName, podCgroupNamePrefix+podUID))
|
|
||||||
foundPods[types.UID(podUID)] = cgroupName
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1533,7 +1533,7 @@ func (kl *Kubelet) cleanupOrphanedPodCgroups(
|
|||||||
|
|
||||||
// If volumes have not been unmounted/detached, do not delete the cgroup in case so the charge does not go to the parent.
|
// If volumes have not been unmounted/detached, do not delete the cgroup in case so the charge does not go to the parent.
|
||||||
if podVolumesExist := kl.podVolumesExist(uid); podVolumesExist {
|
if podVolumesExist := kl.podVolumesExist(uid); podVolumesExist {
|
||||||
glog.V(3).Infof("Orphaned pod %q found, but volumes are not cleaned up, Skipping cgroups deletion: %v", uid)
|
glog.V(3).Infof("Orphaned pod %q found, but volumes are not cleaned up, Skipping cgroups deletion.", uid)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
glog.V(3).Infof("Orphaned pod %q found, removing pod cgroups", uid)
|
glog.V(3).Infof("Orphaned pod %q found, removing pod cgroups", uid)
|
||||||
|
Loading…
Reference in New Issue
Block a user