diff --git a/pkg/kubelet/cadvisor/cadvisor_linux.go b/pkg/kubelet/cadvisor/cadvisor_linux.go index 649998031cc..ea8d50f1d99 100644 --- a/pkg/kubelet/cadvisor/cadvisor_linux.go +++ b/pkg/kubelet/cadvisor/cadvisor_linux.go @@ -64,12 +64,9 @@ func New(port uint) (Interface, error) { Manager: m, } - // Export the HTTP endpoint if a port was specified. - if port > 0 { - err = cadvisorClient.exportHTTP(port) - if err != nil { - return nil, err - } + err = cadvisorClient.exportHTTP(port) + if err != nil { + return nil, err } return cadvisorClient, nil } @@ -79,30 +76,35 @@ func (cc *cadvisorClient) Start() error { } func (cc *cadvisorClient) exportHTTP(port uint) error { + // Register the handlers regardless as this registers the prometheus + // collector properly. mux := http.NewServeMux() err := cadvisorHttp.RegisterHandlers(mux, cc, "", "", "", "", "/metrics") if err != nil { return err } - serv := &http.Server{ - Addr: fmt.Sprintf(":%d", port), - Handler: mux, - } - - // TODO(vmarmol): Remove this when the cAdvisor port is once again free. - // If export failed, retry in the background until we are able to bind. - // This allows an existing cAdvisor to be killed before this one registers. - go func() { - defer util.HandleCrash() - - err := serv.ListenAndServe() - for err != nil { - glog.Infof("Failed to register cAdvisor on port %d, retrying. Error: %v", port, err) - time.Sleep(time.Minute) - err = serv.ListenAndServe() + // Only start the http server if port > 0 + if port > 0 { + serv := &http.Server{ + Addr: fmt.Sprintf(":%d", port), + Handler: mux, } - }() + + // TODO(vmarmol): Remove this when the cAdvisor port is once again free. + // If export failed, retry in the background until we are able to bind. + // This allows an existing cAdvisor to be killed before this one registers. + go func() { + defer util.HandleCrash() + + err := serv.ListenAndServe() + for err != nil { + glog.Infof("Failed to register cAdvisor on port %d, retrying. Error: %v", port, err) + time.Sleep(time.Minute) + err = serv.ListenAndServe() + } + }() + } return nil }