func main() { opt := options.NewHeapsterRunOptions() opt.AddFlags(pflag.CommandLine) flag.InitFlags() logs.InitLogs() defer logs.FlushLogs() verflag.PrintAndExitIfRequested() setMaxProcs(opt) glog.Infof(strings.Join(os.Args, " ")) glog.Infof("Heapster version %v", version.HeapsterVersion) if err := validateFlags(opt); err != nil { glog.Fatal(err) } kubernetesUrl, err := getKubernetesAddress(opt.Sources) if err != nil { glog.Fatalf("Failed to get kubernetes address: %v", err) } sourceManager := createSourceManagerOrDie(opt.Sources) sinkManager, metricSink, historicalSource := createAndInitSinksOrDie(opt.Sinks, opt.HistoricalSource) podLister, nodeLister := getListersOrDie(kubernetesUrl) dataProcessors := createDataProcessorsOrDie(kubernetesUrl, podLister) man, err := manager.NewManager(sourceManager, dataProcessors, sinkManager, opt.MetricResolution, manager.DefaultScrapeOffset, manager.DefaultMaxParallelism) if err != nil { glog.Fatalf("Failed to create main manager: %v", err) } man.Start() if opt.EnableAPIServer { // Run API server in a separate goroutine createAndRunAPIServer(opt, metricSink, nodeLister, podLister) } mux := http.NewServeMux() promHandler := prometheus.Handler() handler := setupHandlers(metricSink, podLister, nodeLister, historicalSource) healthz.InstallHandler(mux, healthzChecker(metricSink)) addr := fmt.Sprintf("%s:%d", opt.Ip, opt.Port) glog.Infof("Starting heapster on port %d", opt.Port) if len(opt.TLSCertFile) > 0 && len(opt.TLSKeyFile) > 0 { startSecureServing(opt, handler, promHandler, mux, addr) } else { mux.Handle("/", handler) mux.Handle("/metrics", promHandler) glog.Fatal(http.ListenAndServe(addr, mux)) } }
func getServerOptions() *options.HeapsterRunOptions { opt := options.NewHeapsterRunOptions() _, ipRange, _ := net.ParseCIDR("10.10.0.0/24") opt.ServiceClusterIPRange = *ipRange return opt }