diff --git a/pkg/kubelet/stats/cri_stats_provider.go b/pkg/kubelet/stats/cri_stats_provider.go index e2f6ed41a27..9c959c3c26d 100644 --- a/pkg/kubelet/stats/cri_stats_provider.go +++ b/pkg/kubelet/stats/cri_stats_provider.go @@ -826,7 +826,24 @@ func getCRICadvisorStats(infos map[string]cadvisorapiv2.ContainerInfo) map[strin if !isPodManagedContainer(&info) { continue } - stats[path.Base(key)] = info + stats[extractIDFromCgroupPath(key)] = info } return stats } + +func extractIDFromCgroupPath(cgroupPath string) string { + // case0 == cgroupfs: "/kubepods/burstable/pod2fc932ce-fdcc-454b-97bd-aadfdeb4c340/9be25294016e2dc0340dd605ce1f57b492039b267a6a618a7ad2a7a58a740f32" + id := path.Base(cgroupPath) + + // case1 == systemd: "/kubepods.slice/kubepods-burstable.slice/kubepods-burstable-pod2fc932ce_fdcc_454b_97bd_aadfdeb4c340.slice/cri-containerd-aaefb9d8feed2d453b543f6d928cede7a4dbefa6a0ae7c9b990dd234c56e93b9.scope" + // trim anything before the final '-' and suffix .scope + systemdSuffix := ".scope" + if strings.HasSuffix(id, systemdSuffix) { + id = strings.TrimSuffix(id, systemdSuffix) + components := strings.Split(id, "-") + if len(components) > 1 { + id = components[len(components)-1] + } + } + return id +} diff --git a/pkg/kubelet/stats/cri_stats_provider_test.go b/pkg/kubelet/stats/cri_stats_provider_test.go index a5435d205e5..3320c8ab3fa 100644 --- a/pkg/kubelet/stats/cri_stats_provider_test.go +++ b/pkg/kubelet/stats/cri_stats_provider_test.go @@ -21,6 +21,7 @@ import ( "os" "path/filepath" "runtime" + "strings" "testing" "time" @@ -696,7 +697,7 @@ func makeFakePodSandbox(name, uid, namespace string, terminated bool) *critest.F if terminated { p.PodSandboxStatus.State = runtimeapi.PodSandboxState_SANDBOX_NOTREADY } - p.PodSandboxStatus.Id = string(uuid.NewUUID()) + p.PodSandboxStatus.Id = strings.ReplaceAll(string(uuid.NewUUID()), "-", "") return p } @@ -722,7 +723,7 @@ func makeFakeContainer(sandbox *critest.FakePodSandbox, name string, attempt uin } else { c.ContainerStatus.State = runtimeapi.ContainerState_CONTAINER_RUNNING } - c.ContainerStatus.Id = string(uuid.NewUUID()) + c.ContainerStatus.Id = strings.ReplaceAll(string(uuid.NewUUID()), "-", "") return c } @@ -1072,3 +1073,28 @@ func TestGetContainerUsageNanoCores(t *testing.T) { assert.Equal(t, test.expected, cached, test.desc) } } + +func TestExtractIDFromCgroupPath(t *testing.T) { + tests := []struct { + cgroupPath string + expected string + }{ + { + cgroupPath: "/kubepods/burstable/pod2fc932ce-fdcc-454b-97bd-aadfdeb4c340/9be25294016e2dc0340dd605ce1f57b492039b267a6a618a7ad2a7a58a740f32", + expected: "9be25294016e2dc0340dd605ce1f57b492039b267a6a618a7ad2a7a58a740f32", + }, + { + cgroupPath: "/kubepods.slice/kubepods-burstable.slice/kubepods-burstable-pod2fc932ce_fdcc_454b_97bd_aadfdeb4c340.slice/cri-containerd-aaefb9d8feed2d453b543f6d928cede7a4dbefa6a0ae7c9b990dd234c56e93b9.scope", + expected: "aaefb9d8feed2d453b543f6d928cede7a4dbefa6a0ae7c9b990dd234c56e93b9", + }, + { + cgroupPath: "/kubepods.slice/kubepods-burstable.slice/kubepods-burstable-pod2fc932ce_fdcc_454b_97bd_aadfdeb4c340.slice/cri-o-aaefb9d8feed2d453b543f6d928cede7a4dbefa6a0ae7c9b990dd234c56e93b9.scope", + expected: "aaefb9d8feed2d453b543f6d928cede7a4dbefa6a0ae7c9b990dd234c56e93b9", + }, + } + + for _, test := range tests { + id := extractIDFromCgroupPath(test.cgroupPath) + assert.Equal(t, test.expected, id) + } +}