'running_managed_controllers' for KCM/CCM for cloud-node-lifecycle controller

This commit is contained in:
Jakub Przychodzeń 2022-07-08 15:40:54 +00:00
parent 80c2a0fe39
commit 49553a46bd
7 changed files with 21 additions and 5 deletions

View File

@ -56,6 +56,7 @@ import (
"k8s.io/component-base/configz" "k8s.io/component-base/configz"
"k8s.io/component-base/logs" "k8s.io/component-base/logs"
logsapi "k8s.io/component-base/logs/api/v1" 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/term"
"k8s.io/component-base/version" "k8s.io/component-base/version"
"k8s.io/component-base/version/verflag" "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 // multiple controllers don't get into lock-step and all hammer the apiserver
// with list requests simultaneously. // with list requests simultaneously.
ResyncPeriod func() time.Duration 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 // IsControllerEnabled checks if the context's controllers enabled or not
@ -534,6 +538,7 @@ func CreateControllerContext(s *config.CompletedConfig, rootClientBuilder, clien
LoopMode: loopMode, LoopMode: loopMode,
InformersStarted: make(chan struct{}), InformersStarted: make(chan struct{}),
ResyncPeriod: ResyncPeriod(s), ResyncPeriod: ResyncPeriod(s),
ControllerManagerMetrics: controllersmetrics.NewControllerManagerMetrics("kube-controller-manager"),
} }
return ctx, nil return ctx, nil
} }

View File

@ -212,7 +212,7 @@ func startCloudNodeLifecycleController(ctx context.Context, controllerContext Co
return nil, false, nil return nil, false, nil
} }
go cloudNodeLifecycleController.Run(ctx) go cloudNodeLifecycleController.Run(ctx, controllerContext.ControllerManagerMetrics)
return nil, true, nil return nil, true, nil
} }

View File

@ -46,6 +46,7 @@ import (
cliflag "k8s.io/component-base/cli/flag" cliflag "k8s.io/component-base/cli/flag"
"k8s.io/component-base/cli/globalflag" "k8s.io/component-base/cli/globalflag"
"k8s.io/component-base/configz" "k8s.io/component-base/configz"
controllersmetrics "k8s.io/component-base/metrics/prometheus/controllers"
"k8s.io/component-base/term" "k8s.io/component-base/term"
"k8s.io/component-base/version" "k8s.io/component-base/version"
"k8s.io/component-base/version/verflag" "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 // 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 { func StartCloudNodeLifecycleControllerWrapper(initContext ControllerInitContext, completedConfig *cloudcontrollerconfig.CompletedConfig, cloud cloudprovider.Interface) InitFunc {
return func(ctx context.Context, controllerContext genericcontrollermanager.ControllerContext) (controller.Interface, bool, error) { 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, Stop: stop,
InformersStarted: make(chan struct{}), InformersStarted: make(chan struct{}),
ResyncPeriod: ResyncPeriod(s), ResyncPeriod: ResyncPeriod(s),
ControllerManagerMetrics: controllersmetrics.NewControllerManagerMetrics("cloud-controller-manager"),
} }
return ctx, nil return ctx, nil
} }

View File

@ -32,6 +32,7 @@ import (
cloudnodelifecyclecontroller "k8s.io/cloud-provider/controllers/nodelifecycle" cloudnodelifecyclecontroller "k8s.io/cloud-provider/controllers/nodelifecycle"
routecontroller "k8s.io/cloud-provider/controllers/route" routecontroller "k8s.io/cloud-provider/controllers/route"
servicecontroller "k8s.io/cloud-provider/controllers/service" servicecontroller "k8s.io/cloud-provider/controllers/service"
controllermanagerapp "k8s.io/controller-manager/app"
"k8s.io/controller-manager/controller" "k8s.io/controller-manager/controller"
"k8s.io/controller-manager/pkg/features" "k8s.io/controller-manager/pkg/features"
"k8s.io/klog/v2" "k8s.io/klog/v2"
@ -59,7 +60,7 @@ func startCloudNodeController(ctx context.Context, initContext ControllerInitCon
return nil, true, nil 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 // Start the cloudNodeLifecycleController
cloudNodeLifecycleController, err := cloudnodelifecyclecontroller.NewCloudNodeLifecycleController( cloudNodeLifecycleController, err := cloudnodelifecyclecontroller.NewCloudNodeLifecycleController(
completedConfig.SharedInformers.Core().V1().Nodes(), completedConfig.SharedInformers.Core().V1().Nodes(),
@ -73,7 +74,7 @@ func startCloudNodeLifecycleController(ctx context.Context, initContext Controll
return nil, false, nil return nil, false, nil
} }
go cloudNodeLifecycleController.Run(ctx) go cloudNodeLifecycleController.Run(ctx, controlexContext.ControllerManagerMetrics)
return nil, true, nil return nil, true, nil
} }

View File

@ -36,6 +36,7 @@ import (
cloudprovider "k8s.io/cloud-provider" cloudprovider "k8s.io/cloud-provider"
cloudproviderapi "k8s.io/cloud-provider/api" cloudproviderapi "k8s.io/cloud-provider/api"
cloudnodeutil "k8s.io/cloud-provider/node/helpers" cloudnodeutil "k8s.io/cloud-provider/node/helpers"
controllersmetrics "k8s.io/component-base/metrics/prometheus/controllers"
nodeutil "k8s.io/component-helpers/node/util" nodeutil "k8s.io/component-helpers/node/util"
"k8s.io/klog/v2" "k8s.io/klog/v2"
) )
@ -104,8 +105,10 @@ func NewCloudNodeLifecycleController(
// Run starts the main loop for this controller. Run is blocking so should // Run starts the main loop for this controller. Run is blocking so should
// be called via a goroutine // 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() 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 // 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 // of O(num_nodes) per cycle. These functions are justified here because these events fire

View File

@ -22,6 +22,7 @@ import (
"k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/client-go/informers" "k8s.io/client-go/informers"
"k8s.io/client-go/restmapper" "k8s.io/client-go/restmapper"
controllersmetrics "k8s.io/component-base/metrics/prometheus/controllers"
"k8s.io/controller-manager/pkg/clientbuilder" "k8s.io/controller-manager/pkg/clientbuilder"
"k8s.io/controller-manager/pkg/informerfactory" "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 // multiple controllers don't get into lock-step and all hammer the apiserver
// with list requests simultaneously. // with list requests simultaneously.
ResyncPeriod func() time.Duration ResyncPeriod func() time.Duration
// ControllerManagerMetrics provides a proxy to set controller manager specific metrics.
ControllerManagerMetrics *controllersmetrics.ControllerManagerMetrics
} }

1
vendor/modules.txt vendored
View File

@ -2068,6 +2068,7 @@ k8s.io/component-base/metrics
k8s.io/component-base/metrics/legacyregistry k8s.io/component-base/metrics/legacyregistry
k8s.io/component-base/metrics/prometheus/clientgo k8s.io/component-base/metrics/prometheus/clientgo
k8s.io/component-base/metrics/prometheus/clientgo/leaderelection 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/ratelimiter
k8s.io/component-base/metrics/prometheus/restclient k8s.io/component-base/metrics/prometheus/restclient
k8s.io/component-base/metrics/prometheus/version k8s.io/component-base/metrics/prometheus/version