@@ -69,6 +69,7 @@ import (
6969 "k8s.io/component-base/metrics/legacyregistry"
7070 "k8s.io/component-base/metrics/prometheus/slis"
7171 zpagesfeatures "k8s.io/component-base/zpages/features"
72+ "k8s.io/component-base/zpages/flagz"
7273 "k8s.io/component-base/zpages/statusz"
7374 runtimeapi "k8s.io/cri-api/pkg/apis/runtime/v1"
7475 "k8s.io/cri-client/pkg/util"
@@ -117,6 +118,7 @@ const (
117118
118119// Server is a http.Handler which exposes kubelet functionality over HTTP.
119120type Server struct {
121+ flagz flagz.Reader
120122 auth AuthInterface
121123 host HostInterface
122124 restfulCont containerInterface
@@ -167,6 +169,7 @@ func ListenAndServeKubeletServer(
167169 host HostInterface ,
168170 resourceAnalyzer stats.ResourceAnalyzer ,
169171 checkers []healthz.HealthChecker ,
172+ flagz flagz.Reader ,
170173 kubeCfg * kubeletconfiginternal.KubeletConfiguration ,
171174 tlsOptions * TLSOptions ,
172175 auth AuthInterface ,
@@ -175,7 +178,7 @@ func ListenAndServeKubeletServer(
175178 address := netutils .ParseIPSloppy (kubeCfg .Address )
176179 port := uint (kubeCfg .Port )
177180 klog .InfoS ("Starting to listen" , "address" , address , "port" , port )
178- handler := NewServer (host , resourceAnalyzer , checkers , auth , kubeCfg )
181+ handler := NewServer (host , resourceAnalyzer , checkers , flagz , auth , kubeCfg )
179182
180183 if utilfeature .DefaultFeatureGate .Enabled (features .KubeletTracing ) {
181184 handler .InstallTracingFilter (tp )
@@ -210,11 +213,12 @@ func ListenAndServeKubeletReadOnlyServer(
210213 host HostInterface ,
211214 resourceAnalyzer stats.ResourceAnalyzer ,
212215 checkers []healthz.HealthChecker ,
216+ flagz flagz.Reader ,
213217 address net.IP ,
214218 port uint ,
215219 tp oteltrace.TracerProvider ) {
216220 klog .InfoS ("Starting to listen read-only" , "address" , address , "port" , port )
217- s := NewServer (host , resourceAnalyzer , checkers , nil , nil )
221+ s := NewServer (host , resourceAnalyzer , checkers , nil , nil , nil )
218222
219223 if utilfeature .DefaultFeatureGate .Enabled (features .KubeletTracing ) {
220224 s .InstallTracingFilter (tp , otelrestful .WithPublicEndpoint ())
@@ -291,10 +295,12 @@ func NewServer(
291295 host HostInterface ,
292296 resourceAnalyzer stats.ResourceAnalyzer ,
293297 checkers []healthz.HealthChecker ,
298+ flagz flagz.Reader ,
294299 auth AuthInterface ,
295300 kubeCfg * kubeletconfiginternal.KubeletConfiguration ) Server {
296301
297302 server := Server {
303+ flagz : flagz ,
298304 host : host ,
299305 resourceAnalyzer : resourceAnalyzer ,
300306 auth : auth ,
@@ -575,6 +581,13 @@ func (s *Server) InstallAuthRequiredHandlers() {
575581 statusz .Install (s .restfulCont , ComponentKubelet , statusz .NewRegistry (compatibility .DefaultBuildEffectiveVersion ()))
576582 }
577583
584+ if utilfeature .DefaultFeatureGate .Enabled (zpagesfeatures .ComponentFlagz ) {
585+ if s .flagz != nil {
586+ s .addMetricsBucketMatcher ("flagz" )
587+ flagz .Install (s .restfulCont , ComponentKubelet , s .flagz )
588+ }
589+ }
590+
578591 // The /runningpods endpoint is used for testing only.
579592 s .addMetricsBucketMatcher ("runningpods" )
580593 ws = new (restful.WebService )
0 commit comments