Merge pull request #135746 from richabanker/move-flagz

Move apiserver's flagz installation to genericapiserver alongside statusz
This commit is contained in:
Kubernetes Prow Robot 2026-02-04 05:32:27 +05:30 committed by GitHub
commit c4f5cea36b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 15 additions and 11 deletions

View file

@ -32,12 +32,10 @@ import (
genericregistry "k8s.io/apiserver/pkg/registry/generic" genericregistry "k8s.io/apiserver/pkg/registry/generic"
genericapiserver "k8s.io/apiserver/pkg/server" genericapiserver "k8s.io/apiserver/pkg/server"
"k8s.io/apiserver/pkg/server/dynamiccertificates" "k8s.io/apiserver/pkg/server/dynamiccertificates"
"k8s.io/apiserver/pkg/server/flagz"
serverstorage "k8s.io/apiserver/pkg/server/storage" serverstorage "k8s.io/apiserver/pkg/server/storage"
utilfeature "k8s.io/apiserver/pkg/util/feature" utilfeature "k8s.io/apiserver/pkg/util/feature"
clientgoinformers "k8s.io/client-go/informers" clientgoinformers "k8s.io/client-go/informers"
"k8s.io/client-go/kubernetes" "k8s.io/client-go/kubernetes"
zpagesfeatures "k8s.io/component-base/zpages/features"
"k8s.io/component-helpers/apimachinery/lease" "k8s.io/component-helpers/apimachinery/lease"
"k8s.io/klog/v2" "k8s.io/klog/v2"
"k8s.io/utils/clock" "k8s.io/utils/clock"
@ -154,12 +152,6 @@ func (c completedConfig) New(name string, delegationTarget genericapiserver.Dele
return nil, fmt.Errorf("failed to get listener address: %w", err) return nil, fmt.Errorf("failed to get listener address: %w", err)
} }
if utilfeature.DefaultFeatureGate.Enabled(zpagesfeatures.ComponentFlagz) {
if c.Generic.Flagz != nil {
flagz.Install(s.GenericAPIServer.Handler.NonGoRestfulMux, name, c.Generic.Flagz)
}
}
if utilfeature.DefaultFeatureGate.Enabled(apiserverfeatures.CoordinatedLeaderElection) { if utilfeature.DefaultFeatureGate.Enabled(apiserverfeatures.CoordinatedLeaderElection) {
leaseInformer := s.VersionedInformers.Coordination().V1().Leases() leaseInformer := s.VersionedInformers.Coordination().V1().Leases()
lcInformer := s.VersionedInformers.Coordination().V1beta1().LeaseCandidates() lcInformer := s.VersionedInformers.Coordination().V1beta1().LeaseCandidates()

View file

@ -830,6 +830,7 @@ func (c completedConfig) New(name string, delegationTarget DelegationTarget) (*G
UnprotectedDebugSocket: debugSocket, UnprotectedDebugSocket: debugSocket,
listedPathProvider: apiServerHandler, listedPathProvider: apiServerHandler,
Flagz: c.Flagz,
minRequestTimeout: time.Duration(c.MinRequestTimeout) * time.Second, minRequestTimeout: time.Duration(c.MinRequestTimeout) * time.Second,
ShutdownTimeout: c.RequestTimeout, ShutdownTimeout: c.RequestTimeout,

View file

@ -49,6 +49,7 @@ import (
discoveryendpoint "k8s.io/apiserver/pkg/endpoints/discovery/aggregated" discoveryendpoint "k8s.io/apiserver/pkg/endpoints/discovery/aggregated"
"k8s.io/apiserver/pkg/features" "k8s.io/apiserver/pkg/features"
"k8s.io/apiserver/pkg/registry/rest" "k8s.io/apiserver/pkg/registry/rest"
"k8s.io/apiserver/pkg/server/flagz"
"k8s.io/apiserver/pkg/server/healthz" "k8s.io/apiserver/pkg/server/healthz"
"k8s.io/apiserver/pkg/server/routes" "k8s.io/apiserver/pkg/server/routes"
"k8s.io/apiserver/pkg/server/statusz" "k8s.io/apiserver/pkg/server/statusz"
@ -113,6 +114,9 @@ type GenericAPIServer struct {
// LoopbackClientConfig is a config for a privileged loopback connection to the API server // LoopbackClientConfig is a config for a privileged loopback connection to the API server
LoopbackClientConfig *restclient.Config LoopbackClientConfig *restclient.Config
// Flagz is used to set up flagz endpoint.
Flagz flagz.Reader
// minRequestTimeout is how short the request timeout can be. This is used to build the RESTHandler // minRequestTimeout is how short the request timeout can be. This is used to build the RESTHandler
minRequestTimeout time.Duration minRequestTimeout time.Duration
@ -463,8 +467,15 @@ func (s *GenericAPIServer) PrepareRun() preparedGenericAPIServer {
} }
s.installReadyz() s.installReadyz()
componentName := "apiserver"
if utilfeature.DefaultFeatureGate.Enabled(zpagesfeatures.ComponentStatusz) { if utilfeature.DefaultFeatureGate.Enabled(zpagesfeatures.ComponentStatusz) {
statusz.Install(s.Handler.NonGoRestfulMux, "apiserver", statusz.NewRegistry(s.EffectiveVersion, statusz.WithListedPaths(s.ListedPaths()))) statusz.Install(s.Handler.NonGoRestfulMux, componentName, statusz.NewRegistry(s.EffectiveVersion, statusz.WithListedPaths(s.ListedPaths())))
}
if utilfeature.DefaultFeatureGate.Enabled(zpagesfeatures.ComponentFlagz) {
if s.Flagz != nil {
flagz.Install(s.Handler.NonGoRestfulMux, componentName, s.Flagz)
}
} }
return preparedGenericAPIServer{s} return preparedGenericAPIServer{s}

View file

@ -149,14 +149,14 @@ func TestFlagz(t *testing.T) {
t.Fatalf("Unexpected error: %v", err) t.Fatalf("Unexpected error: %v", err)
} }
wantBodyStr := "kube-apiserver flagz\nWarning: This endpoint is not meant to be machine parseable" wantBodyStr := "apiserver flagz\nWarning: This endpoint is not meant to be machine parseable"
wantBodyJSON := &flagzv1alpha1.Flagz{ wantBodyJSON := &flagzv1alpha1.Flagz{
TypeMeta: metav1.TypeMeta{ TypeMeta: metav1.TypeMeta{
Kind: "Flagz", Kind: "Flagz",
APIVersion: "config.k8s.io/v1alpha1", APIVersion: "config.k8s.io/v1alpha1",
}, },
ObjectMeta: metav1.ObjectMeta{ ObjectMeta: metav1.ObjectMeta{
Name: "kube-apiserver", Name: "apiserver",
}, },
} }