Merge pull request #82472 from draveness/feature/remove-feature-gates-in-1-17

feat: cleanup several GA feature flags which should be removed in 1.17
This commit is contained in:
Kubernetes Prow Robot 2019-09-17 06:58:24 -07:00 committed by GitHub
commit 3a19f1e80b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 82 additions and 133 deletions

View File

@ -50,7 +50,6 @@ import (
informers "k8s.io/kube-aggregator/pkg/client/informers/externalversions/apiregistration/v1" informers "k8s.io/kube-aggregator/pkg/client/informers/externalversions/apiregistration/v1"
"k8s.io/kube-aggregator/pkg/controllers/autoregister" "k8s.io/kube-aggregator/pkg/controllers/autoregister"
"k8s.io/kubernetes/cmd/kube-apiserver/app/options" "k8s.io/kubernetes/cmd/kube-apiserver/app/options"
kubefeatures "k8s.io/kubernetes/pkg/features"
"k8s.io/kubernetes/pkg/master/controller/crdregistration" "k8s.io/kubernetes/pkg/master/controller/crdregistration"
) )
@ -114,7 +113,6 @@ func createAggregatorConfig(
ProxyClientKey: keyBytes, ProxyClientKey: keyBytes,
ServiceResolver: serviceResolver, ServiceResolver: serviceResolver,
ProxyTransport: proxyTransport, ProxyTransport: proxyTransport,
EnableAggregatedDiscoveryTimeout: utilfeature.DefaultFeatureGate.Enabled(kubefeatures.EnableAggregatedDiscoveryTimeout),
}, },
} }

View File

@ -83,14 +83,6 @@ const (
// the API server as the certificate approaches expiration. // the API server as the certificate approaches expiration.
RotateKubeletClientCertificate featuregate.Feature = "RotateKubeletClientCertificate" RotateKubeletClientCertificate featuregate.Feature = "RotateKubeletClientCertificate"
// owner: @msau42
// alpha: v1.7
// beta: v1.10
// ga: v1.14
//
// A new volume type that supports local disks on a node.
PersistentLocalVolumes featuregate.Feature = "PersistentLocalVolumes"
// owner: @jinxu // owner: @jinxu
// beta: v1.10 // beta: v1.10
// //
@ -435,12 +427,6 @@ const (
// Enables the OpenStack Cinder in-tree driver to OpenStack Cinder CSI Driver migration feature. // Enables the OpenStack Cinder in-tree driver to OpenStack Cinder CSI Driver migration feature.
CSIMigrationOpenStack featuregate.Feature = "CSIMigrationOpenStack" CSIMigrationOpenStack featuregate.Feature = "CSIMigrationOpenStack"
// owner: @verult
// GA: v1.13
//
// Enables the regional PD feature on GCE.
deprecatedGCERegionalPersistentDisk featuregate.Feature = "GCERegionalPersistentDisk"
// owner: @MrHohn // owner: @MrHohn
// beta: v1.16 // beta: v1.16
// //
@ -496,13 +482,6 @@ const (
// //
// Enables the startupProbe in kubelet worker. // Enables the startupProbe in kubelet worker.
StartupProbe featuregate.Feature = "StartupProbe" StartupProbe featuregate.Feature = "StartupProbe"
// owner @deads2k
// deprecated: v1.16
//
// Enable the aggregated discovery timeout to ensure client responsiveness. Note this feature is present
// only for backward compatibility, it will be removed in the 1.17 release.
EnableAggregatedDiscoveryTimeout featuregate.Feature = "EnableAggregatedDiscoveryTimeout"
) )
func init() { func init() {
@ -520,7 +499,6 @@ var defaultKubernetesFeatureGates = map[featuregate.Feature]featuregate.FeatureS
TaintBasedEvictions: {Default: true, PreRelease: featuregate.Beta}, TaintBasedEvictions: {Default: true, PreRelease: featuregate.Beta},
RotateKubeletServerCertificate: {Default: true, PreRelease: featuregate.Beta}, RotateKubeletServerCertificate: {Default: true, PreRelease: featuregate.Beta},
RotateKubeletClientCertificate: {Default: true, PreRelease: featuregate.Beta}, RotateKubeletClientCertificate: {Default: true, PreRelease: featuregate.Beta},
PersistentLocalVolumes: {Default: true, PreRelease: featuregate.GA, LockToDefault: true}, // remove in 1.17
LocalStorageCapacityIsolation: {Default: true, PreRelease: featuregate.Beta}, LocalStorageCapacityIsolation: {Default: true, PreRelease: featuregate.Beta},
Sysctls: {Default: true, PreRelease: featuregate.Beta}, Sysctls: {Default: true, PreRelease: featuregate.Beta},
EphemeralContainers: {Default: false, PreRelease: featuregate.Alpha}, EphemeralContainers: {Default: false, PreRelease: featuregate.Alpha},
@ -552,7 +530,6 @@ var defaultKubernetesFeatureGates = map[featuregate.Feature]featuregate.FeatureS
TokenRequestProjection: {Default: true, PreRelease: featuregate.Beta}, TokenRequestProjection: {Default: true, PreRelease: featuregate.Beta},
BoundServiceAccountTokenVolume: {Default: false, PreRelease: featuregate.Alpha}, BoundServiceAccountTokenVolume: {Default: false, PreRelease: featuregate.Alpha},
CRIContainerLogRotation: {Default: true, PreRelease: featuregate.Beta}, CRIContainerLogRotation: {Default: true, PreRelease: featuregate.Beta},
deprecatedGCERegionalPersistentDisk: {Default: true, PreRelease: featuregate.GA, LockToDefault: true}, // remove in 1.17
CSIMigration: {Default: false, PreRelease: featuregate.Alpha}, CSIMigration: {Default: false, PreRelease: featuregate.Alpha},
CSIMigrationGCE: {Default: false, PreRelease: featuregate.Alpha}, CSIMigrationGCE: {Default: false, PreRelease: featuregate.Alpha},
CSIMigrationAWS: {Default: false, PreRelease: featuregate.Alpha}, CSIMigrationAWS: {Default: false, PreRelease: featuregate.Alpha},
@ -605,8 +582,6 @@ var defaultKubernetesFeatureGates = map[featuregate.Feature]featuregate.FeatureS
apiextensionsfeatures.CustomResourcePublishOpenAPI: {Default: true, PreRelease: featuregate.GA, LockToDefault: true}, apiextensionsfeatures.CustomResourcePublishOpenAPI: {Default: true, PreRelease: featuregate.GA, LockToDefault: true},
apiextensionsfeatures.CustomResourceDefaulting: {Default: true, PreRelease: featuregate.Beta}, apiextensionsfeatures.CustomResourceDefaulting: {Default: true, PreRelease: featuregate.Beta},
EnableAggregatedDiscoveryTimeout: {Default: true, PreRelease: featuregate.Deprecated},
// features that enable backwards compatibility but are scheduled to be removed // features that enable backwards compatibility but are scheduled to be removed
// ... // ...
HPAScaleToZero: {Default: false, PreRelease: featuregate.Alpha}, HPAScaleToZero: {Default: false, PreRelease: featuregate.Alpha},

View File

@ -1760,10 +1760,6 @@ func checkMountOptionSupport(og *operationGenerator, volumeToMount VolumeToMount
// checkNodeAffinity looks at the PV node affinity, and checks if the node has the same corresponding labels // checkNodeAffinity looks at the PV node affinity, and checks if the node has the same corresponding labels
// This ensures that we don't mount a volume that doesn't belong to this node // This ensures that we don't mount a volume that doesn't belong to this node
func checkNodeAffinity(og *operationGenerator, volumeToMount VolumeToMount) error { func checkNodeAffinity(og *operationGenerator, volumeToMount VolumeToMount) error {
if !utilfeature.DefaultFeatureGate.Enabled(features.PersistentLocalVolumes) {
return nil
}
pv := volumeToMount.VolumeSpec.PersistentVolume pv := volumeToMount.VolumeSpec.PersistentVolume
if pv != nil { if pv != nil {
nodeLabels, err := og.volumePluginMgr.Host.GetNodeLabels() nodeLabels, err := og.volumePluginMgr.Host.GetNodeLabels()

View File

@ -71,8 +71,6 @@ type ExtraConfig struct {
// Mechanism by which the Aggregator will resolve services. Required. // Mechanism by which the Aggregator will resolve services. Required.
ServiceResolver ServiceResolver ServiceResolver ServiceResolver
EnableAggregatedDiscoveryTimeout bool
} }
// Config represents the configuration needed to create an APIAggregator. // Config represents the configuration needed to create an APIAggregator.
@ -134,8 +132,6 @@ type APIAggregator struct {
// openAPIAggregationController downloads and merges OpenAPI specs. // openAPIAggregationController downloads and merges OpenAPI specs.
openAPIAggregationController *openapicontroller.AggregationController openAPIAggregationController *openapicontroller.AggregationController
enableAggregatedDiscoveryTimeout bool
} }
// Complete fills in any fields not set that are required to have valid data. It's mutating the receiver. // Complete fills in any fields not set that are required to have valid data. It's mutating the receiver.
@ -187,7 +183,6 @@ func (c completedConfig) NewWithDelegate(delegationTarget genericapiserver.Deleg
APIRegistrationInformers: informerFactory, APIRegistrationInformers: informerFactory,
serviceResolver: c.ExtraConfig.ServiceResolver, serviceResolver: c.ExtraConfig.ServiceResolver,
openAPIConfig: openAPIConfig, openAPIConfig: openAPIConfig,
enableAggregatedDiscoveryTimeout: c.ExtraConfig.EnableAggregatedDiscoveryTimeout,
} }
apiGroupInfo := apiservicerest.NewRESTStorage(c.GenericConfig.MergedResourceConfig, c.GenericConfig.RESTOptionsGetter) apiGroupInfo := apiservicerest.NewRESTStorage(c.GenericConfig.MergedResourceConfig, c.GenericConfig.RESTOptionsGetter)
@ -296,7 +291,6 @@ func (s *APIAggregator) AddAPIService(apiService *v1.APIService) error {
proxyClientKey: s.proxyClientKey, proxyClientKey: s.proxyClientKey,
proxyTransport: s.proxyTransport, proxyTransport: s.proxyTransport,
serviceResolver: s.serviceResolver, serviceResolver: s.serviceResolver,
enableAggregatedDiscoveryTimeout: s.enableAggregatedDiscoveryTimeout,
} }
proxyHandler.updateAPIService(apiService) proxyHandler.updateAPIService(apiService)
if s.openAPIAggregationController != nil { if s.openAPIAggregationController != nil {

View File

@ -63,8 +63,6 @@ type proxyHandler struct {
serviceResolver ServiceResolver serviceResolver ServiceResolver
handlingInfo atomic.Value handlingInfo atomic.Value
enableAggregatedDiscoveryTimeout bool
} }
type proxyHandlingInfo struct { type proxyHandlingInfo struct {
@ -148,7 +146,7 @@ func (r *proxyHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) {
location.Path = req.URL.Path location.Path = req.URL.Path
location.RawQuery = req.URL.Query().Encode() location.RawQuery = req.URL.Query().Encode()
newReq, cancelFn := newRequestForProxy(location, req, r.enableAggregatedDiscoveryTimeout) newReq, cancelFn := newRequestForProxy(location, req)
defer cancelFn() defer cancelFn()
if handlingInfo.proxyRoundTripper == nil { if handlingInfo.proxyRoundTripper == nil {
@ -177,14 +175,14 @@ func (r *proxyHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) {
} }
// newRequestForProxy returns a shallow copy of the original request with a context that may include a timeout for discovery requests // newRequestForProxy returns a shallow copy of the original request with a context that may include a timeout for discovery requests
func newRequestForProxy(location *url.URL, req *http.Request, enableAggregatedDiscoveryTimeout bool) (*http.Request, context.CancelFunc) { func newRequestForProxy(location *url.URL, req *http.Request) (*http.Request, context.CancelFunc) {
newCtx := req.Context() newCtx := req.Context()
cancelFn := func() {} cancelFn := func() {}
if requestInfo, ok := genericapirequest.RequestInfoFrom(req.Context()); ok { if requestInfo, ok := genericapirequest.RequestInfoFrom(req.Context()); ok {
// trim leading and trailing slashes. Then "/apis/group/version" requests are for discovery, so if we have exactly three // trim leading and trailing slashes. Then "/apis/group/version" requests are for discovery, so if we have exactly three
// segments that we are going to proxy, we have a discovery request. // segments that we are going to proxy, we have a discovery request.
if enableAggregatedDiscoveryTimeout && !requestInfo.IsResourceRequest && len(strings.Split(strings.Trim(requestInfo.Path, "/"), "/")) == 3 { if !requestInfo.IsResourceRequest && len(strings.Split(strings.Trim(requestInfo.Path, "/"), "/")) == 3 {
// discovery requests are used by kubectl and others to determine which resources a server has. This is a cheap call that // discovery requests are used by kubectl and others to determine which resources a server has. This is a cheap call that
// should be fast for every aggregated apiserver. Latency for aggregation is expected to be low (as for all extensions) // should be fast for every aggregated apiserver. Latency for aggregation is expected to be low (as for all extensions)
// so forcing a short timeout here helps responsiveness of all clients. // so forcing a short timeout here helps responsiveness of all clients.

View File

@ -541,7 +541,7 @@ func TestGetContextForNewRequest(t *testing.T) {
location.Path = req.URL.Path location.Path = req.URL.Path
nestedReq := req.WithContext(genericapirequest.WithRequestInfo(req.Context(), &genericapirequest.RequestInfo{Path: req.URL.Path})) nestedReq := req.WithContext(genericapirequest.WithRequestInfo(req.Context(), &genericapirequest.RequestInfo{Path: req.URL.Path}))
newReq, cancelFn := newRequestForProxy(location, nestedReq, true) newReq, cancelFn := newRequestForProxy(location, nestedReq)
defer cancelFn() defer cancelFn()
theproxy := proxy.NewUpgradeAwareHandler(location, server.Client().Transport, true, false, &responder{w: w}) theproxy := proxy.NewUpgradeAwareHandler(location, server.Client().Transport, true, false, &responder{w: w})

View File

@ -18,7 +18,6 @@ go_test(
deps = [ deps = [
"//pkg/controller/volume/persistentvolume:go_default_library", "//pkg/controller/volume/persistentvolume:go_default_library",
"//pkg/controller/volume/persistentvolume/options:go_default_library", "//pkg/controller/volume/persistentvolume/options:go_default_library",
"//pkg/features:go_default_library",
"//pkg/scheduler/algorithm/predicates:go_default_library", "//pkg/scheduler/algorithm/predicates:go_default_library",
"//pkg/volume:go_default_library", "//pkg/volume:go_default_library",
"//pkg/volume/testing:go_default_library", "//pkg/volume/testing:go_default_library",
@ -29,11 +28,9 @@ go_test(
"//staging/src/k8s.io/apimachinery/pkg/util/rand:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/rand:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library",
"//staging/src/k8s.io/client-go/informers:go_default_library", "//staging/src/k8s.io/client-go/informers:go_default_library",
"//staging/src/k8s.io/client-go/kubernetes:go_default_library", "//staging/src/k8s.io/client-go/kubernetes:go_default_library",
"//staging/src/k8s.io/client-go/util/workqueue:go_default_library", "//staging/src/k8s.io/client-go/util/workqueue:go_default_library",
"//staging/src/k8s.io/component-base/featuregate/testing:go_default_library",
"//test/integration/framework:go_default_library", "//test/integration/framework:go_default_library",
"//test/utils/image:go_default_library", "//test/utils/image:go_default_library",
"//vendor/k8s.io/klog:go_default_library", "//vendor/k8s.io/klog:go_default_library",

View File

@ -36,14 +36,11 @@ import (
"k8s.io/apimachinery/pkg/util/rand" "k8s.io/apimachinery/pkg/util/rand"
"k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/util/sets"
"k8s.io/apimachinery/pkg/util/wait" "k8s.io/apimachinery/pkg/util/wait"
utilfeature "k8s.io/apiserver/pkg/util/feature"
"k8s.io/client-go/informers" "k8s.io/client-go/informers"
clientset "k8s.io/client-go/kubernetes" clientset "k8s.io/client-go/kubernetes"
"k8s.io/client-go/util/workqueue" "k8s.io/client-go/util/workqueue"
featuregatetesting "k8s.io/component-base/featuregate/testing"
"k8s.io/kubernetes/pkg/controller/volume/persistentvolume" "k8s.io/kubernetes/pkg/controller/volume/persistentvolume"
persistentvolumeoptions "k8s.io/kubernetes/pkg/controller/volume/persistentvolume/options" persistentvolumeoptions "k8s.io/kubernetes/pkg/controller/volume/persistentvolume/options"
"k8s.io/kubernetes/pkg/features"
"k8s.io/kubernetes/pkg/scheduler/algorithm/predicates" "k8s.io/kubernetes/pkg/scheduler/algorithm/predicates"
"k8s.io/kubernetes/pkg/volume" "k8s.io/kubernetes/pkg/volume"
volumetest "k8s.io/kubernetes/pkg/volume/testing" volumetest "k8s.io/kubernetes/pkg/volume/testing"
@ -99,7 +96,6 @@ type testPVC struct {
} }
func TestVolumeBinding(t *testing.T) { func TestVolumeBinding(t *testing.T) {
defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.PersistentLocalVolumes, true)()
config := setupCluster(t, "volume-scheduling-", 2, 0, 0) config := setupCluster(t, "volume-scheduling-", 2, 0, 0)
defer config.teardown() defer config.teardown()
@ -269,7 +265,6 @@ func TestVolumeBinding(t *testing.T) {
// TestVolumeBindingRescheduling tests scheduler will retry scheduling when needed. // TestVolumeBindingRescheduling tests scheduler will retry scheduling when needed.
func TestVolumeBindingRescheduling(t *testing.T) { func TestVolumeBindingRescheduling(t *testing.T) {
defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.PersistentLocalVolumes, true)()
config := setupCluster(t, "volume-scheduling-", 2, 0, 0) config := setupCluster(t, "volume-scheduling-", 2, 0, 0)
defer config.teardown() defer config.teardown()
@ -412,7 +407,6 @@ func TestVolumeBindingDynamicStressSlow(t *testing.T) {
} }
func testVolumeBindingStress(t *testing.T, schedulerResyncPeriod time.Duration, dynamic bool, provisionDelaySeconds int) { func testVolumeBindingStress(t *testing.T, schedulerResyncPeriod time.Duration, dynamic bool, provisionDelaySeconds int) {
defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.PersistentLocalVolumes, true)()
config := setupCluster(t, "volume-binding-stress-", 1, schedulerResyncPeriod, provisionDelaySeconds) config := setupCluster(t, "volume-binding-stress-", 1, schedulerResyncPeriod, provisionDelaySeconds)
defer config.teardown() defer config.teardown()
@ -512,7 +506,6 @@ func testVolumeBindingStress(t *testing.T, schedulerResyncPeriod time.Duration,
} }
func testVolumeBindingWithAffinity(t *testing.T, anti bool, numNodes, numPods, numPVsFirstNode int) { func testVolumeBindingWithAffinity(t *testing.T, anti bool, numNodes, numPods, numPVsFirstNode int) {
defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.PersistentLocalVolumes, true)()
config := setupCluster(t, "volume-pod-affinity-", numNodes, 0, 0) config := setupCluster(t, "volume-pod-affinity-", numNodes, 0, 0)
defer config.teardown() defer config.teardown()
@ -638,7 +631,6 @@ func TestVolumeBindingWithAffinity(t *testing.T) {
} }
func TestPVAffinityConflict(t *testing.T) { func TestPVAffinityConflict(t *testing.T) {
defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.PersistentLocalVolumes, true)()
config := setupCluster(t, "volume-scheduling-", 3, 0, 0) config := setupCluster(t, "volume-scheduling-", 3, 0, 0)
defer config.teardown() defer config.teardown()
@ -698,7 +690,6 @@ func TestPVAffinityConflict(t *testing.T) {
} }
func TestVolumeProvision(t *testing.T) { func TestVolumeProvision(t *testing.T) {
defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.PersistentLocalVolumes, true)()
config := setupCluster(t, "volume-scheduling", 1, 0, 0) config := setupCluster(t, "volume-scheduling", 1, 0, 0)
defer config.teardown() defer config.teardown()