Merge pull request #76413 from yue9944882/chore/feature-gates

Add feature gates for switching between the legacy inflight limiting
This commit is contained in:
Kubernetes Prow Robot 2019-04-17 16:22:02 -07:00 committed by GitHub
commit ca0c44641f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 37 additions and 7 deletions

View File

@ -519,6 +519,7 @@ var defaultKubernetesFeatureGates = map[utilfeature.Feature]utilfeature.FeatureS
genericfeatures.APIListChunking: {Default: true, PreRelease: utilfeature.Beta}, genericfeatures.APIListChunking: {Default: true, PreRelease: utilfeature.Beta},
genericfeatures.DryRun: {Default: true, PreRelease: utilfeature.Beta}, genericfeatures.DryRun: {Default: true, PreRelease: utilfeature.Beta},
genericfeatures.ServerSideApply: {Default: false, PreRelease: utilfeature.Alpha}, genericfeatures.ServerSideApply: {Default: false, PreRelease: utilfeature.Alpha},
genericfeatures.RequestManagement: {Default: false, PreRelease: utilfeature.Alpha},
// inherited features from apiextensions-apiserver, relisted here to get a conflict if it is changed // inherited features from apiextensions-apiserver, relisted here to get a conflict if it is changed
// unintentionally on either side: // unintentionally on either side:

View File

@ -115,6 +115,13 @@ const (
// //
// Enables support for watch bookmark events. // Enables support for watch bookmark events.
WatchBookmark utilfeature.Feature = "WatchBookmark" WatchBookmark utilfeature.Feature = "WatchBookmark"
// owner: @MikeSpreitzer @yue9944882
// alpha: v1.15
//
//
// Enables managing request concurrency with prioritization and fairness at each server
RequestManagement utilfeature.Feature = "RequestManagement"
) )
func init() { func init() {
@ -137,4 +144,5 @@ var defaultKubernetesFeatureGates = map[utilfeature.Feature]utilfeature.FeatureS
WinOverlay: {Default: false, PreRelease: utilfeature.Alpha}, WinOverlay: {Default: false, PreRelease: utilfeature.Alpha},
WinDSR: {Default: false, PreRelease: utilfeature.Alpha}, WinDSR: {Default: false, PreRelease: utilfeature.Alpha},
WatchBookmark: {Default: false, PreRelease: utilfeature.Alpha}, WatchBookmark: {Default: false, PreRelease: utilfeature.Alpha},
RequestManagement: {Default: false, PreRelease: utilfeature.Alpha},
} }

View File

@ -18,6 +18,7 @@ package options
import ( import (
"fmt" "fmt"
"k8s.io/apiserver/pkg/features"
"net" "net"
"time" "time"
@ -51,6 +52,7 @@ type ServerRunOptions struct {
// apiserver library can wire it to a flag. // apiserver library can wire it to a flag.
MaxRequestBodyBytes int64 MaxRequestBodyBytes int64
TargetRAMMB int TargetRAMMB int
EnableInfightQuotaHandler bool
} }
func NewServerRunOptions() *ServerRunOptions { func NewServerRunOptions() *ServerRunOptions {
@ -104,12 +106,28 @@ func (s *ServerRunOptions) Validate() []error {
if s.TargetRAMMB < 0 { if s.TargetRAMMB < 0 {
errors = append(errors, fmt.Errorf("--target-ram-mb can not be negative value")) errors = append(errors, fmt.Errorf("--target-ram-mb can not be negative value"))
} }
if s.EnableInfightQuotaHandler {
if !utilfeature.DefaultFeatureGate.Enabled(features.RequestManagement) {
errors = append(errors, fmt.Errorf("--enable-inflight-quota-handler can not be set if feature "+
"gate RequestManagement is disabled"))
}
if s.MaxMutatingRequestsInFlight != 0 {
errors = append(errors, fmt.Errorf("--max-mutating-requests-inflight=%v "+
"can not be set if enabled inflight quota handler", s.MaxMutatingRequestsInFlight))
}
if s.MaxRequestsInFlight != 0 {
errors = append(errors, fmt.Errorf("--max-requests-inflight=%v "+
"can not be set if enabled inflight quota handler", s.MaxRequestsInFlight))
}
} else {
if s.MaxRequestsInFlight < 0 { if s.MaxRequestsInFlight < 0 {
errors = append(errors, fmt.Errorf("--max-requests-inflight can not be negative value")) errors = append(errors, fmt.Errorf("--max-requests-inflight can not be negative value"))
} }
if s.MaxMutatingRequestsInFlight < 0 { if s.MaxMutatingRequestsInFlight < 0 {
errors = append(errors, fmt.Errorf("--max-mutating-requests-inflight can not be negative value")) errors = append(errors, fmt.Errorf("--max-mutating-requests-inflight can not be negative value"))
} }
}
if s.RequestTimeout.Nanoseconds() < 0 { if s.RequestTimeout.Nanoseconds() < 0 {
errors = append(errors, fmt.Errorf("--request-timeout can not be negative value")) errors = append(errors, fmt.Errorf("--request-timeout can not be negative value"))
@ -174,5 +192,8 @@ func (s *ServerRunOptions) AddUniversalFlags(fs *pflag.FlagSet) {
"handler, which picks a randomized value above this number as the connection timeout, "+ "handler, which picks a randomized value above this number as the connection timeout, "+
"to spread out load.") "to spread out load.")
fs.BoolVar(&s.EnableInfightQuotaHandler, "enable-inflight-quota-handler", s.EnableInfightQuotaHandler, ""+
"If true, replace the max-in-flight handler with an enhanced one that queues and dispatches with priority and fairness")
utilfeature.DefaultMutableFeatureGate.AddFlag(fs) utilfeature.DefaultMutableFeatureGate.AddFlag(fs)
} }