@@ -6,23 +6,21 @@ import (
66
77 utilerrors "k8s.io/apimachinery/pkg/util/errors"
88 "k8s.io/apiserver/pkg/admission/plugin/namespace/lifecycle"
9- "k8s.io/apiserver/pkg/features"
109 genericapiserver "k8s.io/apiserver/pkg/server"
1110 genericoptions "k8s.io/apiserver/pkg/server/options"
1211 "k8s.io/apiserver/pkg/util/feature"
13- utilfeature "k8s.io/apiserver/pkg/util/feature"
14- utilflowcontrol "k8s.io/apiserver/pkg/util/flowcontrol"
15- "k8s.io/client-go/kubernetes"
1612 cliflag "k8s.io/component-base/cli/flag"
1713 "k8s.io/component-base/featuregate"
18- "k8s.io/klog/v2"
1914
2015 "github.com/clusterpedia-io/clusterpedia/pkg/apiserver"
2116 "github.com/clusterpedia-io/clusterpedia/pkg/storage"
2217 storageoptions "github.com/clusterpedia-io/clusterpedia/pkg/storage/options"
2318)
2419
2520type ClusterPediaServerOptions struct {
21+ MaxRequestsInFlight int
22+ MaxMutatingRequestsInFlight int
23+
2624 SecureServing * genericoptions.SecureServingOptionsWithLoopback
2725 Authentication * genericoptions.DelegatingAuthenticationOptions
2826 Authorization * genericoptions.DelegatingAuthorizationOptions
@@ -31,7 +29,7 @@ type ClusterPediaServerOptions struct {
3129 CoreAPI * genericoptions.CoreAPIOptions
3230 FeatureGate featuregate.FeatureGate
3331 Admission * genericoptions.AdmissionOptions
34- // Traces *genericoptions.TracingOptions
32+ // Traces *genericoptions.TracingOptions
3533
3634 Storage * storageoptions.StorageOptions
3735}
@@ -46,6 +44,9 @@ func NewServerOptions() *ClusterPediaServerOptions {
4644 sso .HTTP2MaxStreamsPerConnection = 1000
4745
4846 return & ClusterPediaServerOptions {
47+ MaxRequestsInFlight : 0 ,
48+ MaxMutatingRequestsInFlight : 0 ,
49+
4950 SecureServing : sso .WithLoopback (),
5051 Authentication : genericoptions .NewDelegatingAuthenticationOptions (),
5152 Authorization : genericoptions .NewDelegatingAuthorizationOptions (),
@@ -54,7 +55,7 @@ func NewServerOptions() *ClusterPediaServerOptions {
5455 CoreAPI : genericoptions .NewCoreAPIOptions (),
5556 FeatureGate : feature .DefaultFeatureGate ,
5657 Admission : genericoptions .NewAdmissionOptions (),
57- // Traces: genericoptions.NewTracingOptions(),
58+ // Traces: genericoptions.NewTracingOptions(),
5859
5960 Storage : storageoptions .NewStorageOptions (),
6061 }
@@ -102,6 +103,9 @@ func (o *ClusterPediaServerOptions) Config() (*apiserver.Config, error) {
102103}
103104
104105func (o * ClusterPediaServerOptions ) genericOptionsApplyTo (config * genericapiserver.RecommendedConfig ) error {
106+ config .MaxRequestsInFlight = o .MaxRequestsInFlight
107+ config .MaxMutatingRequestsInFlight = o .MaxMutatingRequestsInFlight
108+
105109 if err := o .SecureServing .ApplyTo (& config .SecureServing , & config .LoopbackClientConfig ); err != nil {
106110 return err
107111 }
@@ -124,24 +128,18 @@ func (o *ClusterPediaServerOptions) genericOptionsApplyTo(config *genericapiserv
124128 return err
125129 }
126130
127- if utilfeature .DefaultFeatureGate .Enabled (features .APIPriorityAndFairness ) {
128- if config .ClientConfig != nil {
129- config .FlowControl = utilflowcontrol .New (
130- config .SharedInformerFactory ,
131- kubernetes .NewForConfigOrDie (config .ClientConfig ).FlowcontrolV1beta1 (),
132- config .MaxRequestsInFlight + config .MaxMutatingRequestsInFlight ,
133- config .RequestTimeout / 4 ,
134- )
135- } else {
136- klog .Warningf ("Neither kubeconfig is provided nor service-account is mounted, so APIPriorityAndFairness will be disabled" )
137- }
138- }
139131 return nil
140132}
141133
142134func (o * ClusterPediaServerOptions ) Flags () cliflag.NamedFlagSets {
143135 var fss cliflag.NamedFlagSets
144136
137+ genericfs := fss .FlagSet ("generic" )
138+ genericfs .IntVar (& o .MaxRequestsInFlight , "max-requests-inflight" , o .MaxRequestsInFlight , "" +
139+ "Otherwise, this flag limits the maximum number of non-mutating requests in flight, or a zero value disables the limit completely." )
140+ genericfs .IntVar (& o .MaxMutatingRequestsInFlight , "max-mutating-requests-inflight" , o .MaxMutatingRequestsInFlight , "" +
141+ "this flag limits the maximum number of mutating requests in flight, or a zero value disables the limit completely." )
142+
145143 o .CoreAPI .AddFlags (fss .FlagSet ("global" ))
146144 o .SecureServing .AddFlags (fss .FlagSet ("secure serving" ))
147145 o .Authentication .AddFlags (fss .FlagSet ("authentication" ))
@@ -158,6 +156,13 @@ func (o *ClusterPediaServerOptions) Flags() cliflag.NamedFlagSets {
158156
159157func (o * ClusterPediaServerOptions ) validateGenericOptions () []error {
160158 errors := []error {}
159+ if o .MaxRequestsInFlight < 0 {
160+ errors = append (errors , fmt .Errorf ("--max-requests-inflight can not be negative value" ))
161+ }
162+ if o .MaxMutatingRequestsInFlight < 0 {
163+ errors = append (errors , fmt .Errorf ("--max-mutating-requests-inflight can not be negative value" ))
164+ }
165+
161166 errors = append (errors , o .CoreAPI .Validate ()... )
162167 errors = append (errors , o .SecureServing .Validate ()... )
163168 errors = append (errors , o .Authentication .Validate ()... )
0 commit comments