From bc6741730322dea554af3b646aa75a964163d877 Mon Sep 17 00:00:00 2001 From: Garrybest Date: Thu, 11 Nov 2021 10:33:00 +0800 Subject: [PATCH] clean up metrics package init Signed-off-by: Garrybest --- cmd/agent/main.go | 9 +++++++++ cmd/controller-manager/controller-manager.go | 11 +++++++++++ cmd/scheduler-estimator/main.go | 2 -- 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/cmd/agent/main.go b/cmd/agent/main.go index e61cdf23a..f033aec7e 100644 --- a/cmd/agent/main.go +++ b/cmd/agent/main.go @@ -3,6 +3,15 @@ package main import ( "os" + // Note that Kubernetes registers workqueue metrics to default prometheus Registry. And the registry will be + // initialized by the package 'k8s.io/apiserver/pkg/server'. + // See https://github.com/kubernetes/kubernetes/blob/f61ed439882e34d9dad28b602afdc852feb2337a/staging/src/k8s.io/component-base/metrics/prometheus/workqueue/metrics.go#L25 + // But the controller-runtime registers workqueue metrics to its own Registry instead of default prometheus Registry. + // See https://github.com/kubernetes-sigs/controller-runtime/blob/4d10a0615b11507451ecb58bfd59f0f6ef313a29/pkg/metrics/workqueue.go#L24-L26 + // However, global workqueue metrics factory will be only initialized once. + // See https://github.com/kubernetes/kubernetes/blob/f61ed439882e34d9dad28b602afdc852feb2337a/staging/src/k8s.io/client-go/util/workqueue/metrics.go#L257-L261 + // So this package should be initialized before 'k8s.io/apiserver/pkg/server', thus the internal registry of + // controller-runtime could be set first. _ "sigs.k8s.io/controller-runtime/pkg/metrics" apiserver "k8s.io/apiserver/pkg/server" diff --git a/cmd/controller-manager/controller-manager.go b/cmd/controller-manager/controller-manager.go index b4b0f8baa..c26c6ef69 100644 --- a/cmd/controller-manager/controller-manager.go +++ b/cmd/controller-manager/controller-manager.go @@ -4,6 +4,17 @@ import ( "fmt" "os" + // Note that Kubernetes registers workqueue metrics to default prometheus Registry. And the registry will be + // initialized by the package 'k8s.io/apiserver/pkg/server'. + // See https://github.com/kubernetes/kubernetes/blob/f61ed439882e34d9dad28b602afdc852feb2337a/staging/src/k8s.io/component-base/metrics/prometheus/workqueue/metrics.go#L25 + // But the controller-runtime registers workqueue metrics to its own Registry instead of default prometheus Registry. + // See https://github.com/kubernetes-sigs/controller-runtime/blob/4d10a0615b11507451ecb58bfd59f0f6ef313a29/pkg/metrics/workqueue.go#L24-L26 + // However, global workqueue metrics factory will be only initialized once. + // See https://github.com/kubernetes/kubernetes/blob/f61ed439882e34d9dad28b602afdc852feb2337a/staging/src/k8s.io/client-go/util/workqueue/metrics.go#L257-L261 + // So this package should be initialized before 'k8s.io/apiserver/pkg/server', thus the internal registry of + // controller-runtime could be set first. + _ "sigs.k8s.io/controller-runtime/pkg/metrics" + apiserver "k8s.io/apiserver/pkg/server" "k8s.io/component-base/logs" diff --git a/cmd/scheduler-estimator/main.go b/cmd/scheduler-estimator/main.go index 1a8963824..03e5da966 100644 --- a/cmd/scheduler-estimator/main.go +++ b/cmd/scheduler-estimator/main.go @@ -4,8 +4,6 @@ import ( "fmt" "os" - _ "sigs.k8s.io/controller-runtime/pkg/metrics" - apiserver "k8s.io/apiserver/pkg/server" "k8s.io/component-base/logs"