Change:
Found this by calling the "/validate" end point on the master: root curl 127.0.0.1:8080/validate <snip{ "component": "scheduler", "health": "failure", "healthCode": 1, "msg": "404 page not foundn", "err": "unhealthy http status code: 404 (404 Not Found)" }, </snipSeems like any requests to it return a 404: root netstat -p -l | grep kube-scheduler tcp 0 0 localhost: : LISTEN 4105/kube-scheduler root curl 127.0.0.1:/healthz 404 page not found root curl 127.0.0.1: 404 page not found
I'm not seeing this on my 0.14.1 cluster: $ curl http://127.0.0.1:8080/validate { "component": "scheduler", "health": "success", "msg": "ok", "err": "nil" }, $ curl http://127.0.0.1:/healthz ok
This is happening on HEAD. seems to have caused this. /cc
Could we rollback this PR?
is this only on the scheduler?
Yes. The change basically broke the /healthz mapping in kube-scheduler, so the health pings are failing. The "validate-" doesn't hit it, but the master's "/validate" does. This is causing the internal cluster validation checks to fail.
GKE relies on the /validate endpoint on the master (since it can't run the validate- script) and this has broken our GKE-CI build since it was merged this morning.
I think we can revert the PR and let profiling break for now. what do you think?
SGTM, sorry for the breakage.
Ahh, you guys already revert the commit? The fix should be very simple. Let me send PR shortly to fix this.
Thanks for the fix and sorry for the breakage

Discussion:
"github.com/GoogleCloudPlatform/kubernetes/pkg/api" "github.com/GoogleCloudPlatform/kubernetes/pkg/client" "github.com/GoogleCloudPlatform/kubernetes/pkg/client/record" <ins> "github.com/GoogleCloudPlatform/kubernetes/pkg/healthz" </ins> "github.com/GoogleCloudPlatform/kubernetes/pkg/master/ports" "github.com/GoogleCloudPlatform/kubernetes/pkg/util" "github.com/GoogleCloudPlatform/kubernetes/plugin/pkg/scheduler"

client.BindClientConfigFlags(fs, &s.ClientConfig) fs.StringVar(&s.AlgorithmProvider, "algorithm_provider", s.AlgorithmProvider, "The scheduling algorithm provider to use") fs.StringVar(&s.PolicyConfigFile, "policy_config_file", s.PolicyConfigFile, "File with scheduler policy configuration") <del> fs.BoolVar(&s.EnableProfiling, "profiling", false, "Enable profiling via web interface host:port/debug/pprof/") </del> <ins> fs.BoolVar(&s.EnableProfiling, "profiling", true, "Enable profiling via web interface host:port/debug/pprof/") </ins> } // Run runs the specified SchedulerServer.  This should never exit.

} go func() { <ins> mux := http.NewServeMux() healthz.InstallHandler(mux) </ins> if s.EnableProfiling { <del> http.HandleFunc("/debug/pprof/", pprof.Index) http.HandleFunc("/debug/pprof/profile", pprof.Profile) http.HandleFunc("/debug/pprof/symbol", pprof.Symbol) </del> <ins> mux.HandleFunc("/debug/pprof/", pprof.Index) mux.HandleFunc("/debug/pprof/profile", pprof.Profile) mux.HandleFunc("/debug/pprof/symbol", pprof.Symbol) </ins> } <del> http.Handle("/metrics", prometheus.Handler()) http.ListenAndServe(net.JoinHostPort(s.Address.String(), strconv.Itoa(s.Port)), nil) </del> <ins> mux.Handle("/metrics", prometheus.Handler()) server := &http.Server{ Addr:    net.JoinHostPort(s.Address.String(), strconv.Itoa(s.Port)), Handler: mux, } glog.Fatal(server.ListenAndServe()) </ins> }() configFactory := factory.NewConfigFactory(kubeClient)