From 45c2f4534c619ab5a4505fce18bcef40c1fe3d3f Mon Sep 17 00:00:00 2001 From: David Eads Date: Tue, 7 Apr 2020 13:31:18 -0400 Subject: [PATCH] add flag check to ensure that flowcontrol API is present --- cmd/kube-apiserver/app/options/BUILD | 1 + cmd/kube-apiserver/app/options/validation.go | 21 ++++++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/cmd/kube-apiserver/app/options/BUILD b/cmd/kube-apiserver/app/options/BUILD index b833a85aeba..e7e3ddeda60 100644 --- a/cmd/kube-apiserver/app/options/BUILD +++ b/cmd/kube-apiserver/app/options/BUILD @@ -28,6 +28,7 @@ go_library( "//staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/net:go_default_library", "//staging/src/k8s.io/apiserver/pkg/admission:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/features:go_default_library", "//staging/src/k8s.io/apiserver/pkg/server/options:go_default_library", "//staging/src/k8s.io/apiserver/pkg/storage/storagebackend:go_default_library", "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", diff --git a/cmd/kube-apiserver/app/options/validation.go b/cmd/kube-apiserver/app/options/validation.go index 4f94e438d00..50152753c22 100644 --- a/cmd/kube-apiserver/app/options/validation.go +++ b/cmd/kube-apiserver/app/options/validation.go @@ -23,6 +23,7 @@ import ( "strings" apiextensionsapiserver "k8s.io/apiextensions-apiserver/pkg/apiserver" + genericfeatures "k8s.io/apiserver/pkg/features" utilfeature "k8s.io/apiserver/pkg/util/feature" "k8s.io/component-base/metrics" aggregatorscheme "k8s.io/kube-aggregator/pkg/apiserver/scheme" @@ -127,6 +128,25 @@ func validateTokenRequest(options *ServerRunOptions) []error { return errs } +func validateAPIPriorityAndFairness(options *ServerRunOptions) []error { + if utilfeature.DefaultFeatureGate.Enabled(genericfeatures.APIPriorityAndFairness) && options.GenericServerRunOptions.EnablePriorityAndFairness { + // we know we need the alpha API enabled. There are only a few ways to turn it on + enabledAPIString := options.APIEnablement.RuntimeConfig.String() + switch { + case strings.Contains(enabledAPIString, "api/all=true"): + return nil + case strings.Contains(enabledAPIString, "api/alpha=true"): + return nil + case strings.Contains(enabledAPIString, "flowcontrol.apiserver.k8s.io/v1alpha1=true"): + return nil + default: + return []error{fmt.Errorf("enabling APIPriorityAndFairness requires --runtime-confg=flowcontrol.apiserver.k8s.io/v1alpha1=true to enable the required API")} + } + } + + return []error{} +} + // Validate checks ServerRunOptions and return a slice of found errs. func (s *ServerRunOptions) Validate() []error { var errs []error @@ -136,6 +156,7 @@ func (s *ServerRunOptions) Validate() []error { errs = append(errs, s.Etcd.Validate()...) errs = append(errs, validateClusterIPFlags(s)...) errs = append(errs, validateServiceNodePort(s)...) + errs = append(errs, validateAPIPriorityAndFairness(s)...) errs = append(errs, s.SecureServing.Validate()...) errs = append(errs, s.Authentication.Validate()...) errs = append(errs, s.Authorization.Validate()...)