run := func(stop <-chan struct{}) {
rootClientBuilder := controller.SimpleControllerClientBuilder{
ClientConfig: c.Generic.Kubeconfig, } var clientBuilder controller.ControllerClientBuilder if c.Generic.ComponentConfig.UseServiceAccountCredentials {
if len(c.Generic.ComponentConfig.ServiceAccountKeyFile) == 0 {
// It'c possible another controller process is creating the tokens for us. // If one isn't, we'll timeout and exit when our client builder is unable to create the tokens. glog.Warningf( "--use-service-account-credentials was specified without providing a --service-account-private-key-file" ) } clientBuilder = controller.SAControllerClientBuilder{
ClientConfig: restclient.AnonymousClientConfig(c.Generic.Kubeconfig), CoreClient: c.Generic.Client.CoreV1(), AuthenticationClient: c.Generic.Client.AuthenticationV1(), Namespace: "kube-system" , } } else {
clientBuilder = rootClientBuilder } ctx, err := CreateControllerContext(c, rootClientBuilder, clientBuilder, stop) if err != nil {
glog.Fatalf( "error building controller context: %v" , err) } saTokenControllerInitFunc := serviceAccountTokenControllerStarter{rootClientBuilder: rootClientBuilder}.startServiceAccountTokenController // 核心方法。运行各个controller if err := StartControllers(ctx, saTokenControllerInitFunc, NewControllerInitializers(ctx.LoopMode)); err != nil {
glog.Fatalf( "error starting controllers: %v" , err) } ctx.InformerFactory.Start(ctx.Stop) close(ctx.InformersStarted) select {} } // 运行Run方法。 if !c.Generic.ComponentConfig.LeaderElection.LeaderElect {
run(wait.NeverStop) panic( "unreachable" ) } id, err := os.Hostname() if err != nil {
return err } // add a uniquifier so that two processes on the same host don't accidentally both become active id = id + "_" + string(uuid.NewUUID()) rl, err := resourcelock.New(c.Generic.ComponentConfig.LeaderElection.ResourceLock, "kube-system" , "kube-controller-manager" , c.Generic.LeaderElectionClient.CoreV1(), resourcelock.ResourceLockConfig{
Identity: id, EventRecorder: c.Generic.EventRecorder, }) if err != nil {
glog.Fatalf( "error creating lock: %v" , err) } leaderelection.RunOrDie(leaderelection.LeaderElectionConfig{
Lock: rl, LeaseDuration: c.Generic.ComponentConfig.LeaderElection.LeaseDuration.Duration, RenewDeadline: c.Generic.ComponentConfig.LeaderElection.RenewDeadline.Duration, RetryPeriod: c.Generic.ComponentConfig.LeaderElection.RetryPeriod.Duration,</
|