mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-09-09 21:21:14 +00:00
use controller healthz
in KCM and CCM.
This commit is contained in:
@@ -61,6 +61,7 @@ import (
|
||||
genericcontrollermanager "k8s.io/controller-manager/app"
|
||||
"k8s.io/controller-manager/controller"
|
||||
"k8s.io/controller-manager/pkg/clientbuilder"
|
||||
controllerhealthz "k8s.io/controller-manager/pkg/healthz"
|
||||
"k8s.io/controller-manager/pkg/informerfactory"
|
||||
"k8s.io/controller-manager/pkg/leadermigration"
|
||||
"k8s.io/klog/v2"
|
||||
@@ -199,12 +200,13 @@ func Run(c *config.CompletedConfig, stopCh <-chan struct{}) error {
|
||||
electionChecker = leaderelection.NewLeaderHealthzAdaptor(time.Second * 20)
|
||||
checks = append(checks, electionChecker)
|
||||
}
|
||||
healthzHandler := controllerhealthz.NewMutableHealthzHandler(checks...)
|
||||
|
||||
// Start the controller manager HTTP server
|
||||
// unsecuredMux is the handler for these controller *after* authn/authz filters have been applied
|
||||
var unsecuredMux *mux.PathRecorderMux
|
||||
if c.SecureServing != nil {
|
||||
unsecuredMux = genericcontrollermanager.NewBaseHandler(&c.ComponentConfig.Generic.Debugging, checks...)
|
||||
unsecuredMux = genericcontrollermanager.NewBaseHandler(&c.ComponentConfig.Generic.Debugging, healthzHandler)
|
||||
handler := genericcontrollermanager.BuildHandlerChain(unsecuredMux, &c.Authorization, &c.Authentication)
|
||||
// TODO: handle stoppedCh returned by c.SecureServing.Serve
|
||||
if _, err := c.SecureServing.Serve(handler, 0, stopCh); err != nil {
|
||||
@@ -223,7 +225,7 @@ func Run(c *config.CompletedConfig, stopCh <-chan struct{}) error {
|
||||
klog.Fatalf("error building controller context: %v", err)
|
||||
}
|
||||
controllerInitializers := initializersFunc(controllerContext.LoopMode)
|
||||
if err := StartControllers(controllerContext, startSATokenController, controllerInitializers, unsecuredMux); err != nil {
|
||||
if err := StartControllers(controllerContext, startSATokenController, controllerInitializers, unsecuredMux, healthzHandler); err != nil {
|
||||
klog.Fatalf("error starting controllers: %v", err)
|
||||
}
|
||||
|
||||
@@ -541,7 +543,8 @@ func CreateControllerContext(s *config.CompletedConfig, rootClientBuilder, clien
|
||||
}
|
||||
|
||||
// StartControllers starts a set of controllers with a specified ControllerContext
|
||||
func StartControllers(ctx ControllerContext, startSATokenController InitFunc, controllers map[string]InitFunc, unsecuredMux *mux.PathRecorderMux) error {
|
||||
func StartControllers(ctx ControllerContext, startSATokenController InitFunc, controllers map[string]InitFunc,
|
||||
unsecuredMux *mux.PathRecorderMux, healthzHandler *controllerhealthz.MutableHealthzHandler) error {
|
||||
// Always start the SA token controller first using a full-power client, since it needs to mint tokens for the rest
|
||||
// If this fails, just return here and fail since other controllers won't be able to get credentials.
|
||||
if startSATokenController != nil {
|
||||
@@ -556,6 +559,8 @@ func StartControllers(ctx ControllerContext, startSATokenController InitFunc, co
|
||||
ctx.Cloud.Initialize(ctx.ClientBuilder, ctx.Stop)
|
||||
}
|
||||
|
||||
var controllerChecks []healthz.HealthChecker
|
||||
|
||||
for controllerName, initFn := range controllers {
|
||||
if !ctx.IsControllerEnabled(controllerName) {
|
||||
klog.Warningf("%q is disabled", controllerName)
|
||||
@@ -574,6 +579,7 @@ func StartControllers(ctx ControllerContext, startSATokenController InitFunc, co
|
||||
klog.Warningf("Skipping %q", controllerName)
|
||||
continue
|
||||
}
|
||||
check := controllerhealthz.NamedPingChecker(controllerName)
|
||||
if ctrl != nil {
|
||||
// check if the controller supports and requests a debugHandler
|
||||
// and it needs the unsecuredMux to mount the handler onto.
|
||||
@@ -584,10 +590,19 @@ func StartControllers(ctx ControllerContext, startSATokenController InitFunc, co
|
||||
unsecuredMux.UnlistedHandlePrefix(basePath+"/", http.StripPrefix(basePath, debugHandler))
|
||||
}
|
||||
}
|
||||
if healthCheckable, ok := ctrl.(controller.HealthCheckable); ok {
|
||||
if realCheck := healthCheckable.HealthChecker(); realCheck != nil {
|
||||
check = controllerhealthz.NamedHealthChecker(controllerName, realCheck)
|
||||
}
|
||||
}
|
||||
}
|
||||
controllerChecks = append(controllerChecks, check)
|
||||
|
||||
klog.Infof("Started %q", controllerName)
|
||||
}
|
||||
|
||||
healthzHandler.AddHealthChecker(controllerChecks...)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user