diff --git a/cmd/kube-scheduler/app/server.go b/cmd/kube-scheduler/app/server.go index 993fb81e01d..c9ab27027cf 100644 --- a/cmd/kube-scheduler/app/server.go +++ b/cmd/kube-scheduler/app/server.go @@ -39,6 +39,7 @@ import ( "k8s.io/apiserver/pkg/server/healthz" "k8s.io/apiserver/pkg/server/mux" "k8s.io/apiserver/pkg/server/routes" + "k8s.io/apiserver/pkg/util/compatibility" utilfeature "k8s.io/apiserver/pkg/util/feature" "k8s.io/client-go/informers" "k8s.io/client-go/kubernetes/scheme" @@ -59,6 +60,7 @@ import ( "k8s.io/component-base/version/verflag" zpagesfeatures "k8s.io/component-base/zpages/features" "k8s.io/component-base/zpages/flagz" + "k8s.io/component-base/zpages/statusz" "k8s.io/klog/v2" schedulerserverconfig "k8s.io/kubernetes/cmd/kube-scheduler/app/config" "k8s.io/kubernetes/cmd/kube-scheduler/app/options" @@ -371,6 +373,11 @@ func newEndpointsHandler(config *kubeschedulerconfig.KubeSchedulerConfiguration, flagz.Install(pathRecorderMux, kubeScheduler, flagReader) } } + + if utilfeature.DefaultFeatureGate.Enabled(zpagesfeatures.ComponentStatusz) { + statusz.Install(pathRecorderMux, kubeScheduler, statusz.NewRegistry(compatibility.DefaultBuildEffectiveVersion())) + } + return pathRecorderMux } diff --git a/test/integration/scheduler/serving/endpoints_test.go b/test/integration/scheduler/serving/endpoints_test.go index 91cb2d5ad84..3de9ab910d1 100644 --- a/test/integration/scheduler/serving/endpoints_test.go +++ b/test/integration/scheduler/serving/endpoints_test.go @@ -39,6 +39,8 @@ import ( func TestEndpointHandlers(t *testing.T) { featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.ComponentFlagz, true) + featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.ComponentStatusz, true) + server, configStr, _, err := startTestAPIServer(t) if err != nil { t.Fatalf("Failed to start kube-apiserver server: %v", err) @@ -128,6 +130,16 @@ func TestEndpointHandlers(t *testing.T) { `Warning: This endpoint is not meant to be machine parseable, ` + `has no formatting compatibility guarantees and is for debugging purposes only.`, }, + { + name: "/statusz", + path: "/statusz", + requestHeader: map[string]string{"Accept": "text/plain"}, + wantResponseCode: http.StatusOK, + wantResponseBodyRegx: `^\n` + + `kube-scheduler statusz\n` + + `Warning: This endpoint is not meant to be machine parseable, ` + + `has no formatting compatibility guarantees and is for debugging purposes only.`, + }, } for _, tt := range tests {