package main import ( "flag" "os" "monitor/pkg/controllers" "monitor/pkg/k8s" "monitor/pkg/svc" "go.uber.org/zap/zapcore" corev1 "k8s.io/api/core/v1" ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/log/zap" ) var ( version string commit string level zapcore.Level conf k8s.Config disableWebhook bool ) func main() { conf.HealthProbeBindAddress = "0" // Disable healthy endpoint of controller manager conf.LeaderElectionID = "monitor.demo.io" // 参数解析 flag.TextVar(&level, "log-level", zapcore.InfoLevel, "logger level") flag.StringVar(&conf.MetricsBindAddress, "metrics-address", "127.0.0.1:8080", "The address the metric endpoint binds to.") flag.BoolVar(&conf.LeaderElection, "enable-leader-election", false, "Enable leader election for controller manager") flag.BoolVar(&conf.PProf, "enable-pprof", false, "Enable profile debug") flag.StringVar(&conf.CaKey.Namespace, "namespace", os.Getenv("POD_NAMESPACE"), "namespace where pod run") flag.StringVar(&conf.CaKey.Name, "cert-ca", "monitor-ca", "cert ca secret name") flag.StringVar(&conf.WebhookName, "cert-service-name", "monitor-webhook-service", "The service name used to generate the TLS cert's hostname") flag.StringVar(&conf.CertDir, "cert-dir", "", "The directory where certs are stored") flag.BoolVar(&disableWebhook, "disable-webhook", false, "diable webhook mode") flag.Parse() // 初始化日志格式 ctrl.SetLogger(zap.New(func(o *zap.Options) { o.Level = level o.Development = true o.TimeEncoder = zapcore.RFC3339TimeEncoder })) log := ctrl.Log.WithName("monitor") setupFinished := make(chan struct{}) mgr, err := k8s.NewManager(conf, setupFinished) if err != nil { log.Error(err, "new k8s manager") os.Exit(1) } ev := svc.NewHandler() if !disableWebhook { go func() { <-setupFinished if err = mgr.Add(ev); err != nil { log.Error(err, "add event handler") os.Exit(1) } if err = mgr.WebHook(&corev1.Pod{}).WithDefaulter(ev).Complete(); err != nil { log.Error(err, "setup pod webhook") os.Exit(1) } }() } else { if err = mgr.Add(ev); err != nil { log.Error(err, "add event handler") os.Exit(1) } } if err = mgr.Setup(controllers.NewService); err != nil { log.Error(err, "setup service controller") os.Exit(1) } log.Info("starting server", "version", version) if err = mgr.Start(); err != nil { log.Error(err, "start serverr") os.Exit(1) } }