From a724481f5c5bc9a80dfed44fb69fe17f6beb39fb Mon Sep 17 00:00:00 2001 From: "xiaofei.sun" Date: Fri, 31 Jul 2020 16:35:53 +0800 Subject: [PATCH] fix metrics kubelet_running_pod_count --- pkg/kubelet/pleg/generic.go | 16 ++++++++++++++-- pkg/kubelet/pleg/generic_test.go | 9 +++++++++ 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/pkg/kubelet/pleg/generic.go b/pkg/kubelet/pleg/generic.go index 9be35dcaa1a..bad984fb094 100644 --- a/pkg/kubelet/pleg/generic.go +++ b/pkg/kubelet/pleg/generic.go @@ -423,8 +423,7 @@ func getContainerState(pod *kubecontainer.Pod, cid *kubecontainer.ContainerID) p } func updateRunningPodAndContainerMetrics(pods []*kubecontainer.Pod) { - // Set the number of running pods in the parameter - metrics.RunningPodCount.Set(float64(len(pods))) + runningSandboxNum := 0 // intermediate map to store the count of each "container_state" containerStateCount := make(map[string]int) @@ -434,10 +433,23 @@ func updateRunningPodAndContainerMetrics(pods []*kubecontainer.Pod) { // update the corresponding "container_state" in map to set value for the gaugeVec metrics containerStateCount[string(container.State)]++ } + + sandboxes := pod.Sandboxes + + for _, sandbox := range sandboxes { + if sandbox.State == kubecontainer.ContainerStateRunning { + runningSandboxNum++ + // every pod should only have one running sandbox + break + } + } } for key, value := range containerStateCount { metrics.RunningContainerCount.WithLabelValues(key).Set(float64(value)) } + + // Set the number of running pods in the parameter + metrics.RunningPodCount.Set(float64(runningSandboxNum)) } func (pr podRecords) getOld(id types.UID) *kubecontainer.Pod { diff --git a/pkg/kubelet/pleg/generic_test.go b/pkg/kubelet/pleg/generic_test.go index 8c4f17b2e77..bf1cecf26de 100644 --- a/pkg/kubelet/pleg/generic_test.go +++ b/pkg/kubelet/pleg/generic_test.go @@ -664,12 +664,21 @@ func TestRunningPodAndContainerCount(t *testing.T) { createTestContainer("c2", kubecontainer.ContainerStateUnknown), createTestContainer("c3", kubecontainer.ContainerStateUnknown), }, + Sandboxes: []*kubecontainer.Container{ + createTestContainer("s1", kubecontainer.ContainerStateRunning), + createTestContainer("s2", kubecontainer.ContainerStateRunning), + createTestContainer("s3", kubecontainer.ContainerStateUnknown), + }, }}, {Pod: &kubecontainer.Pod{ ID: "4567", Containers: []*kubecontainer.Container{ createTestContainer("c1", kubecontainer.ContainerStateExited), }, + Sandboxes: []*kubecontainer.Container{ + createTestContainer("s1", kubecontainer.ContainerStateRunning), + createTestContainer("s2", kubecontainer.ContainerStateExited), + }, }}, }