diff --git a/cmd/kube-controller-manager/app/controllermanager.go b/cmd/kube-controller-manager/app/controllermanager.go index f1ed3d40ed4..96a90af4462 100644 --- a/cmd/kube-controller-manager/app/controllermanager.go +++ b/cmd/kube-controller-manager/app/controllermanager.go @@ -56,6 +56,7 @@ import ( "k8s.io/component-base/configz" "k8s.io/component-base/logs" logsapi "k8s.io/component-base/logs/api/v1" + controllersmetrics "k8s.io/component-base/metrics/prometheus/controllers" "k8s.io/component-base/term" "k8s.io/component-base/version" "k8s.io/component-base/version/verflag" @@ -360,6 +361,9 @@ type ControllerContext struct { // multiple controllers don't get into lock-step and all hammer the apiserver // with list requests simultaneously. ResyncPeriod func() time.Duration + + // ControllerManagerMetrics provides a proxy to set controller manager specific metrics. + ControllerManagerMetrics *controllersmetrics.ControllerManagerMetrics } // IsControllerEnabled checks if the context's controllers enabled or not @@ -534,6 +538,7 @@ func CreateControllerContext(s *config.CompletedConfig, rootClientBuilder, clien LoopMode: loopMode, InformersStarted: make(chan struct{}), ResyncPeriod: ResyncPeriod(s), + ControllerManagerMetrics: controllersmetrics.NewControllerManagerMetrics("kube-controller-manager"), } return ctx, nil } diff --git a/cmd/kube-controller-manager/app/core.go b/cmd/kube-controller-manager/app/core.go index e116288332e..c6e6792c912 100644 --- a/cmd/kube-controller-manager/app/core.go +++ b/cmd/kube-controller-manager/app/core.go @@ -212,7 +212,7 @@ func startCloudNodeLifecycleController(ctx context.Context, controllerContext Co return nil, false, nil } - go cloudNodeLifecycleController.Run(ctx) + go cloudNodeLifecycleController.Run(ctx, controllerContext.ControllerManagerMetrics) return nil, true, nil } diff --git a/staging/src/k8s.io/cloud-provider/app/controllermanager.go b/staging/src/k8s.io/cloud-provider/app/controllermanager.go index ca116532f5b..67401a9fd9e 100644 --- a/staging/src/k8s.io/cloud-provider/app/controllermanager.go +++ b/staging/src/k8s.io/cloud-provider/app/controllermanager.go @@ -46,6 +46,7 @@ import ( cliflag "k8s.io/component-base/cli/flag" "k8s.io/component-base/cli/globalflag" "k8s.io/component-base/configz" + controllersmetrics "k8s.io/component-base/metrics/prometheus/controllers" "k8s.io/component-base/term" "k8s.io/component-base/version" "k8s.io/component-base/version/verflag" @@ -370,7 +371,7 @@ func StartCloudNodeControllerWrapper(initContext ControllerInitContext, complete // StartCloudNodeLifecycleControllerWrapper is used to take cloud config as input and start cloud node lifecycle controller func StartCloudNodeLifecycleControllerWrapper(initContext ControllerInitContext, completedConfig *cloudcontrollerconfig.CompletedConfig, cloud cloudprovider.Interface) InitFunc { return func(ctx context.Context, controllerContext genericcontrollermanager.ControllerContext) (controller.Interface, bool, error) { - return startCloudNodeLifecycleController(ctx, initContext, completedConfig, cloud) + return startCloudNodeLifecycleController(ctx, initContext, controllerContext, completedConfig, cloud) } } @@ -457,6 +458,7 @@ func CreateControllerContext(s *cloudcontrollerconfig.CompletedConfig, clientBui Stop: stop, InformersStarted: make(chan struct{}), ResyncPeriod: ResyncPeriod(s), + ControllerManagerMetrics: controllersmetrics.NewControllerManagerMetrics("cloud-controller-manager"), } return ctx, nil } diff --git a/staging/src/k8s.io/cloud-provider/app/core.go b/staging/src/k8s.io/cloud-provider/app/core.go index d02abb05db8..fb6b6b46770 100644 --- a/staging/src/k8s.io/cloud-provider/app/core.go +++ b/staging/src/k8s.io/cloud-provider/app/core.go @@ -32,6 +32,7 @@ import ( cloudnodelifecyclecontroller "k8s.io/cloud-provider/controllers/nodelifecycle" routecontroller "k8s.io/cloud-provider/controllers/route" servicecontroller "k8s.io/cloud-provider/controllers/service" + controllermanagerapp "k8s.io/controller-manager/app" "k8s.io/controller-manager/controller" "k8s.io/controller-manager/pkg/features" "k8s.io/klog/v2" @@ -59,7 +60,7 @@ func startCloudNodeController(ctx context.Context, initContext ControllerInitCon return nil, true, nil } -func startCloudNodeLifecycleController(ctx context.Context, initContext ControllerInitContext, completedConfig *config.CompletedConfig, cloud cloudprovider.Interface) (controller.Interface, bool, error) { +func startCloudNodeLifecycleController(ctx context.Context, initContext ControllerInitContext, controlexContext controllermanagerapp.ControllerContext, completedConfig *config.CompletedConfig, cloud cloudprovider.Interface) (controller.Interface, bool, error) { // Start the cloudNodeLifecycleController cloudNodeLifecycleController, err := cloudnodelifecyclecontroller.NewCloudNodeLifecycleController( completedConfig.SharedInformers.Core().V1().Nodes(), @@ -73,7 +74,7 @@ func startCloudNodeLifecycleController(ctx context.Context, initContext Controll return nil, false, nil } - go cloudNodeLifecycleController.Run(ctx) + go cloudNodeLifecycleController.Run(ctx, controlexContext.ControllerManagerMetrics) return nil, true, nil } diff --git a/staging/src/k8s.io/cloud-provider/controllers/nodelifecycle/node_lifecycle_controller.go b/staging/src/k8s.io/cloud-provider/controllers/nodelifecycle/node_lifecycle_controller.go index 5414faf157e..17095b2b78f 100644 --- a/staging/src/k8s.io/cloud-provider/controllers/nodelifecycle/node_lifecycle_controller.go +++ b/staging/src/k8s.io/cloud-provider/controllers/nodelifecycle/node_lifecycle_controller.go @@ -36,6 +36,7 @@ import ( cloudprovider "k8s.io/cloud-provider" cloudproviderapi "k8s.io/cloud-provider/api" cloudnodeutil "k8s.io/cloud-provider/node/helpers" + controllersmetrics "k8s.io/component-base/metrics/prometheus/controllers" nodeutil "k8s.io/component-helpers/node/util" "k8s.io/klog/v2" ) @@ -104,8 +105,10 @@ func NewCloudNodeLifecycleController( // Run starts the main loop for this controller. Run is blocking so should // be called via a goroutine -func (c *CloudNodeLifecycleController) Run(ctx context.Context) { +func (c *CloudNodeLifecycleController) Run(ctx context.Context, controllerManagerMetrics *controllersmetrics.ControllerManagerMetrics) { defer utilruntime.HandleCrash() + controllerManagerMetrics.ControllerStarted("cloud-node-lifecycle") + defer controllerManagerMetrics.ControllerStopped("cloud-node-lifecycle") // The following loops run communicate with the APIServer with a worst case complexity // of O(num_nodes) per cycle. These functions are justified here because these events fire diff --git a/staging/src/k8s.io/controller-manager/app/controllercontext.go b/staging/src/k8s.io/controller-manager/app/controllercontext.go index 14ed199f40f..a1b940d3d35 100644 --- a/staging/src/k8s.io/controller-manager/app/controllercontext.go +++ b/staging/src/k8s.io/controller-manager/app/controllercontext.go @@ -22,6 +22,7 @@ import ( "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/client-go/informers" "k8s.io/client-go/restmapper" + controllersmetrics "k8s.io/component-base/metrics/prometheus/controllers" "k8s.io/controller-manager/pkg/clientbuilder" "k8s.io/controller-manager/pkg/informerfactory" ) @@ -59,4 +60,7 @@ type ControllerContext struct { // multiple controllers don't get into lock-step and all hammer the apiserver // with list requests simultaneously. ResyncPeriod func() time.Duration + + // ControllerManagerMetrics provides a proxy to set controller manager specific metrics. + ControllerManagerMetrics *controllersmetrics.ControllerManagerMetrics } diff --git a/vendor/modules.txt b/vendor/modules.txt index dec720faeaa..c55eba077cb 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -2068,6 +2068,7 @@ k8s.io/component-base/metrics k8s.io/component-base/metrics/legacyregistry k8s.io/component-base/metrics/prometheus/clientgo k8s.io/component-base/metrics/prometheus/clientgo/leaderelection +k8s.io/component-base/metrics/prometheus/controllers k8s.io/component-base/metrics/prometheus/ratelimiter k8s.io/component-base/metrics/prometheus/restclient k8s.io/component-base/metrics/prometheus/version