Skip to content

Commit 56f032e

Browse files
qiutongsbobbypage
authored andcommitted
Fix the first alias of container reference in containerd handler
Signed-off-by: Qiutong Song <[email protected]>
1 parent 1fb8237 commit 56f032e

File tree

3 files changed

+65
-7
lines changed

3 files changed

+65
-7
lines changed

container/containerd/client_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ func (c *containerdClientMock) TaskPid(ctx context.Context, id string) (uint32,
4848
}
4949

5050
func (c *containerdClientMock) ContainerStatus(ctx context.Context, id string) (*criapi.ContainerStatus, error) {
51-
return &criapi.ContainerStatus{}, nil
51+
return c.status, nil
5252
}
5353

5454
func mockcontainerdClient(cntrs map[string]*containers.Container, status *criapi.ContainerStatus, returnErr error) ContainerdClient {

container/containerd/handler.go

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,11 +112,31 @@ func newContainerdContainerHandler(
112112
rootfs = "/rootfs"
113113
}
114114

115+
var restart uint32 = 0
116+
containerName := "POD"
117+
if cntr.Labels["io.cri-containerd.kind"] != "sandbox" {
118+
status, err := client.ContainerStatus(ctx, id)
119+
if err != nil {
120+
return nil, err
121+
}
122+
restart = status.Metadata.Attempt
123+
containerName = cntr.Labels["io.kubernetes.container.name"]
124+
}
125+
126+
// The "io.kubernetes" labels are defined in https://github.com/kubernetes/kubernetes/blob/master/pkg/kubelet/types/labels.go
127+
containerNameConcat := strings.Join([]string{
128+
"k8s",
129+
containerName,
130+
cntr.Labels["io.kubernetes.pod.name"],
131+
cntr.Labels["io.kubernetes.pod.namespace"],
132+
cntr.Labels["io.kubernetes.pod.uid"],
133+
fmt.Sprint(restart)}, "_")
134+
115135
containerReference := info.ContainerReference{
116136
Id: id,
117137
Name: name,
118138
Namespace: k8sContainerdNamespace,
119-
Aliases: []string{id, name},
139+
Aliases: []string{containerNameConcat, id, name},
120140
}
121141

122142
libcontainerHandler := containerlibcontainer.NewHandler(cgroupManager, rootfs, int(taskPid), includedMetrics)

container/containerd/handler_test.go

Lines changed: 43 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import (
2626
info "github.com/google/cadvisor/info/v1"
2727
specs "github.com/opencontainers/runtime-spec/specs-go"
2828
"github.com/stretchr/testify/assert"
29+
criapi "k8s.io/cri-api/pkg/apis/runtime/v1alpha2"
2930
)
3031

3132
func init() {
@@ -60,13 +61,31 @@ func TestHandler(t *testing.T) {
6061
checkEnvVars map[string]string
6162
}
6263
testContainers := make(map[string]*containers.Container)
64+
testContainerSandbox := &containers.Container{
65+
ID: "40af7cdcbe507acad47a5a62025743ad3ddc6ab93b77b21363aa1c1d641047c9",
66+
Labels: map[string]string{
67+
"io.cri-containerd.kind": "sandbox",
68+
"io.kubernetes.container.name": "pause",
69+
"io.kubernetes.pod.name": "some-pod",
70+
"io.kubernetes.pod.namespace": "some-ns",
71+
"io.kubernetes.pod.uid": "some-uid"},
72+
}
6373
testContainer := &containers.Container{
64-
ID: "40af7cdcbe507acad47a5a62025743ad3ddc6ab93b77b21363aa1c1d641047c9",
65-
Labels: map[string]string{"io.cri-containerd.kind": "sandbox"},
74+
ID: "c6a1aa99f14d3e57417e145b897e34961145f6b6f14216a176a34bfabbf79086",
75+
Labels: map[string]string{
76+
"io.cri-containerd.kind": "container",
77+
"io.kubernetes.container.name": "some-container",
78+
"io.kubernetes.pod.name": "some-pod",
79+
"io.kubernetes.pod.namespace": "some-ns",
80+
"io.kubernetes.pod.uid": "some-uid"},
6681
}
6782
spec := &specs.Spec{Root: &specs.Root{Path: "/test/"}, Process: &specs.Process{Env: []string{"TEST_REGION=FRA", "TEST_ZONE=A", "HELLO=WORLD"}}}
83+
testContainerSandbox.Spec, _ = typeurl.MarshalAny(spec)
6884
testContainer.Spec, _ = typeurl.MarshalAny(spec)
69-
testContainers["40af7cdcbe507acad47a5a62025743ad3ddc6ab93b77b21363aa1c1d641047c9"] = testContainer
85+
testContainers["40af7cdcbe507acad47a5a62025743ad3ddc6ab93b77b21363aa1c1d641047c9"] = testContainerSandbox
86+
testContainers["c6a1aa99f14d3e57417e145b897e34961145f6b6f14216a176a34bfabbf79086"] = testContainer
87+
status := &criapi.ContainerStatus{Metadata: &criapi.ContainerMetadata{Attempt: 2}}
88+
7089
for _, ts := range []testCase{
7190
{
7291
mockcontainerdClient(nil, nil, nil),
@@ -96,7 +115,7 @@ func TestHandler(t *testing.T) {
96115
&info.ContainerReference{
97116
Id: "40af7cdcbe507acad47a5a62025743ad3ddc6ab93b77b21363aa1c1d641047c9",
98117
Name: "/kubepods/pod068e8fa0-9213-11e7-a01f-507b9d4141fa/40af7cdcbe507acad47a5a62025743ad3ddc6ab93b77b21363aa1c1d641047c9",
99-
Aliases: []string{"40af7cdcbe507acad47a5a62025743ad3ddc6ab93b77b21363aa1c1d641047c9", "/kubepods/pod068e8fa0-9213-11e7-a01f-507b9d4141fa/40af7cdcbe507acad47a5a62025743ad3ddc6ab93b77b21363aa1c1d641047c9"},
118+
Aliases: []string{"k8s_POD_some-pod_some-ns_some-uid_0", "40af7cdcbe507acad47a5a62025743ad3ddc6ab93b77b21363aa1c1d641047c9", "/kubepods/pod068e8fa0-9213-11e7-a01f-507b9d4141fa/40af7cdcbe507acad47a5a62025743ad3ddc6ab93b77b21363aa1c1d641047c9"},
100119
Namespace: k8sContainerdNamespace,
101120
},
102121
map[string]string{},
@@ -115,11 +134,30 @@ func TestHandler(t *testing.T) {
115134
&info.ContainerReference{
116135
Id: "40af7cdcbe507acad47a5a62025743ad3ddc6ab93b77b21363aa1c1d641047c9",
117136
Name: "/kubepods/pod068e8fa0-9213-11e7-a01f-507b9d4141fa/40af7cdcbe507acad47a5a62025743ad3ddc6ab93b77b21363aa1c1d641047c9",
118-
Aliases: []string{"40af7cdcbe507acad47a5a62025743ad3ddc6ab93b77b21363aa1c1d641047c9", "/kubepods/pod068e8fa0-9213-11e7-a01f-507b9d4141fa/40af7cdcbe507acad47a5a62025743ad3ddc6ab93b77b21363aa1c1d641047c9"},
137+
Aliases: []string{"k8s_POD_some-pod_some-ns_some-uid_0", "40af7cdcbe507acad47a5a62025743ad3ddc6ab93b77b21363aa1c1d641047c9", "/kubepods/pod068e8fa0-9213-11e7-a01f-507b9d4141fa/40af7cdcbe507acad47a5a62025743ad3ddc6ab93b77b21363aa1c1d641047c9"},
119138
Namespace: k8sContainerdNamespace,
120139
},
121140
map[string]string{"TEST_REGION": "FRA", "TEST_ZONE": "A"},
122141
},
142+
{
143+
mockcontainerdClient(testContainers, status, nil),
144+
"/kubepods/pod068e8fa0-9213-11e7-a01f-507b9d4141fa/c6a1aa99f14d3e57417e145b897e34961145f6b6f14216a176a34bfabbf79086",
145+
&mockedMachineInfo{},
146+
nil,
147+
&containerlibcontainer.CgroupSubsystems{},
148+
false,
149+
nil,
150+
nil,
151+
false,
152+
"",
153+
&info.ContainerReference{
154+
Id: "c6a1aa99f14d3e57417e145b897e34961145f6b6f14216a176a34bfabbf79086",
155+
Name: "/kubepods/pod068e8fa0-9213-11e7-a01f-507b9d4141fa/c6a1aa99f14d3e57417e145b897e34961145f6b6f14216a176a34bfabbf79086",
156+
Aliases: []string{"k8s_some-container_some-pod_some-ns_some-uid_2", "c6a1aa99f14d3e57417e145b897e34961145f6b6f14216a176a34bfabbf79086", "/kubepods/pod068e8fa0-9213-11e7-a01f-507b9d4141fa/c6a1aa99f14d3e57417e145b897e34961145f6b6f14216a176a34bfabbf79086"},
157+
Namespace: k8sContainerdNamespace,
158+
},
159+
map[string]string{},
160+
},
123161
} {
124162
handler, err := newContainerdContainerHandler(ts.client, ts.name, ts.machineInfoFactory, ts.fsInfo, ts.cgroupSubsystems, ts.inHostNamespace, ts.metadataEnvAllowList, ts.includedMetrics)
125163
if ts.hasErr {

0 commit comments

Comments
 (0)