diff --git a/pkg/daemons/control/server.go b/pkg/daemons/control/server.go index 7d9a4c06a6..e985be4be6 100644 --- a/pkg/daemons/control/server.go +++ b/pkg/daemons/control/server.go @@ -91,7 +91,7 @@ func Server(ctx context.Context, cfg *config.Control) error { return err } - if err := waitForAPIServer(runtime); err != nil { + if err := waitForAPIServer(ctx, runtime); err != nil { return err } @@ -105,7 +105,7 @@ func Server(ctx context.Context, cfg *config.Control) error { controllerManager(cfg, runtime) if !cfg.DisableCCM { - cloudControllerManager(cfg, runtime) + cloudControllerManager(ctx, cfg, runtime) } return nil @@ -782,7 +782,7 @@ func expired(certFile string) bool { return certutil.IsCertExpired(certificates[0]) } -func cloudControllerManager(cfg *config.Control, runtime *config.ControlRuntime) { +func cloudControllerManager(ctx context.Context, cfg *config.Control, runtime *config.ControlRuntime) { argsMap := map[string]string{ "kubeconfig": runtime.KubeConfigCloudController, "allocate-node-cidrs": "true", @@ -808,8 +808,12 @@ func cloudControllerManager(cfg *config.Control, runtime *config.ControlRuntime) // check for the cloud controller rbac binding if err := checkForCloudControllerPrivileges(runtime); err != nil { logrus.Infof("Waiting for cloudcontroller rbac role to be created") - time.Sleep(time.Second) - continue + select { + case <-ctx.Done(): + logrus.Fatalf("cloud-controller-manager context canceled: %v", ctx.Err()) + case <-time.After(time.Second): + continue + } } break } @@ -831,7 +835,7 @@ func checkForCloudControllerPrivileges(runtime *config.ControlRuntime) error { return nil } -func waitForAPIServer(runtime *config.ControlRuntime) error { +func waitForAPIServer(ctx context.Context, runtime *config.ControlRuntime) error { restConfig, err := clientcmd.BuildConfigFromFlags("", runtime.KubeConfigAdmin) if err != nil { return err @@ -849,7 +853,12 @@ func waitForAPIServer(runtime *config.ControlRuntime) error { return nil } logrus.Infof("waiting for apiserver to become available") - time.Sleep(1 * time.Second) + select { + case <-ctx.Done(): + return ctx.Err() + case <-time.After(time.Second): + continue + } } return fmt.Errorf("timeout waiting for apiserver")