in main.go [59:136]
func main() {
klog.InitFlags(nil)
flags.Register()
klog.Infof("managed-certificate-controller %s starting. Latest commit hash: %s",
version.Version, version.GitCommit)
for i, a := range os.Args {
klog.Infof("argv[%d]: %q", i, a)
}
klog.Infof("Flags = %+v", flags.F)
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
config, err := config.New(ctx, flags.F.GCEConfigFilePath, flags.F.ServiceAccount)
if err != nil {
klog.Fatal(err)
}
clients, err := clients.New(ctx, config)
if err != nil {
klog.Fatal(err)
}
healthCheck := liveness.NewHealthCheck(flags.F.HealthCheckInterval,
2*flags.F.ResyncInterval, 2*flags.F.ResyncInterval)
klog.Infof("Start serving liveness probe")
healthCheck.StartServing(flags.F.HealthCheckAddress, flags.F.HealthCheckPath)
leaderElection := componentbaseconfig.LeaderElectionConfiguration{
LeaderElect: true,
LeaseDuration: metav1.Duration{Duration: config.MasterElection.LeaseDuration},
RenewDeadline: metav1.Duration{Duration: config.MasterElection.RenewDeadline},
RetryPeriod: metav1.Duration{Duration: config.MasterElection.RetryPeriod},
ResourceLock: resourcelock.LeasesResourceLock,
}
id, err := os.Hostname()
if err != nil {
klog.Fatalf("Unable to get hostname: %v", err)
}
lock, err := resourcelock.New(
leaderElection.ResourceLock,
"kube-system",
"managed-certificate-controller",
clients.Core,
clients.Coordination,
resourcelock.ResourceLockConfig{Identity: id},
)
if err != nil {
klog.Fatalf("Unable to create leader election lock: %v", err)
}
leaderelection.RunOrDie(ctx, leaderelection.LeaderElectionConfig{
Lock: lock,
LeaseDuration: leaderElection.LeaseDuration.Duration,
RenewDeadline: leaderElection.RenewDeadline.Duration,
RetryPeriod: leaderElection.RetryPeriod.Duration,
Callbacks: leaderelection.LeaderCallbacks{
OnStartedLeading: func(ctx context.Context) {
params := controller.NewParams(ctx, clients, config, healthCheck)
controller := controller.New(ctx, params)
go func() {
<-setupSignalHandler()
cancel()
}()
if err = controller.Run(ctx); err != nil {
klog.Fatalf("Error running controller: %s", err)
}
},
OnStoppedLeading: func() {
// Cancel ctx, shut down and wait for being restarted by kubelet.
cancel()
},
},
})
}