diff --git a/cmd/kube-controller-manager/app/BUILD b/cmd/kube-controller-manager/app/BUILD index bf098a302a9..84c5f2a3cc3 100644 --- a/cmd/kube-controller-manager/app/BUILD +++ b/cmd/kube-controller-manager/app/BUILD @@ -122,7 +122,6 @@ go_library( "//staging/src/k8s.io/client-go/discovery/cached:go_default_library", "//staging/src/k8s.io/client-go/dynamic:go_default_library", "//staging/src/k8s.io/client-go/informers:go_default_library", - "//staging/src/k8s.io/client-go/informers/storage/v1:go_default_library", "//staging/src/k8s.io/client-go/kubernetes:go_default_library", "//staging/src/k8s.io/client-go/metadata:go_default_library", "//staging/src/k8s.io/client-go/metadata/metadatainformer:go_default_library", diff --git a/cmd/kube-controller-manager/app/core.go b/cmd/kube-controller-manager/app/core.go index 15dbc0586c8..a7775cdf7c3 100644 --- a/cmd/kube-controller-manager/app/core.go +++ b/cmd/kube-controller-manager/app/core.go @@ -34,7 +34,6 @@ import ( "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apiserver/pkg/quota/v1/generic" utilfeature "k8s.io/apiserver/pkg/util/feature" - storagev1informer "k8s.io/client-go/informers/storage/v1" clientset "k8s.io/client-go/kubernetes" "k8s.io/client-go/metadata" restclient "k8s.io/client-go/rest" @@ -320,12 +319,7 @@ func startAttachDetachController(ctx ControllerContext) (http.Handler, bool, err return nil, true, fmt.Errorf("duration time must be greater than one second as set via command line option reconcile-sync-loop-period") } - var ( - csiNodeInformer storagev1informer.CSINodeInformer - ) - if utilfeature.DefaultFeatureGate.Enabled(features.CSINodeInfo) { - csiNodeInformer = ctx.InformerFactory.Storage().V1().CSINodes() - } + csiNodeInformer := ctx.InformerFactory.Storage().V1().CSINodes() csiDriverInformer := ctx.InformerFactory.Storage().V1().CSIDrivers() plugins, err := ProbeAttachableVolumePlugins() diff --git a/pkg/controller/volume/attachdetach/attach_detach_controller.go b/pkg/controller/volume/attachdetach/attach_detach_controller.go index 01d7538ffde..acf93ab0cae 100644 --- a/pkg/controller/volume/attachdetach/attach_detach_controller.go +++ b/pkg/controller/volume/attachdetach/attach_detach_controller.go @@ -137,8 +137,7 @@ func NewAttachDetachController( filteredDialOptions: filteredDialOptions, } - if utilfeature.DefaultFeatureGate.Enabled(features.CSIMigration) && - utilfeature.DefaultFeatureGate.Enabled(features.CSINodeInfo) { + if utilfeature.DefaultFeatureGate.Enabled(features.CSIMigration) { adc.csiNodeLister = csiNodeInformer.Lister() adc.csiNodeSynced = csiNodeInformer.Informer().HasSynced } diff --git a/pkg/controller/volume/attachdetach/util/util.go b/pkg/controller/volume/attachdetach/util/util.go index 389fbec77f6..57409bc1180 100644 --- a/pkg/controller/volume/attachdetach/util/util.go +++ b/pkg/controller/volume/attachdetach/util/util.go @@ -310,12 +310,8 @@ func translateInTreeSpecToCSIIfNeeded(spec *volume.Spec, nodeName types.NodeName } func isCSIMigrationSupportedOnNode(nodeName types.NodeName, spec *volume.Spec, vpm *volume.VolumePluginMgr, csiMigratedPluginManager csimigration.PluginManager) (bool, error) { - if !utilfeature.DefaultFeatureGate.Enabled(features.CSIMigration) || - !utilfeature.DefaultFeatureGate.Enabled(features.CSINodeInfo) { - // If CSIMigration is disabled, CSI migration paths will not be taken for - // the node. If CSINodeInfo is disabled, checking of installation status - // of a migrated CSI plugin cannot be performed. Therefore stick to - // in-tree plugins. + if !utilfeature.DefaultFeatureGate.Enabled(features.CSIMigration) { + // If CSIMigration is disabled, CSI migration paths will not be taken for the node. return false, nil } diff --git a/pkg/features/kube_features.go b/pkg/features/kube_features.go index 575a0a2e102..6c237a8ae97 100644 --- a/pkg/features/kube_features.go +++ b/pkg/features/kube_features.go @@ -165,13 +165,6 @@ const ( // Enable all logic related to the CSIDriver API object in storage.k8s.io CSIDriverRegistry featuregate.Feature = "CSIDriverRegistry" - // owner: @verult - // alpha: v1.12 - // beta: v1.14 - // ga: v1.17 - // Enable all logic related to the CSINode API object in storage.k8s.io - CSINodeInfo featuregate.Feature = "CSINodeInfo" - // owner: @screeley44 // alpha: v1.9 // beta: v1.13 @@ -750,7 +743,6 @@ var defaultKubernetesFeatureGates = map[featuregate.Feature]featuregate.FeatureS ServiceNodeExclusion: {Default: true, PreRelease: featuregate.Beta}, NodeDisruptionExclusion: {Default: true, PreRelease: featuregate.Beta}, CSIDriverRegistry: {Default: true, PreRelease: featuregate.GA, LockToDefault: true}, // remove in 1.20 - CSINodeInfo: {Default: true, PreRelease: featuregate.GA, LockToDefault: true}, // remove in 1.19 BlockVolume: {Default: true, PreRelease: featuregate.GA, LockToDefault: true}, // remove in 1.20 StorageObjectInUseProtection: {Default: true, PreRelease: featuregate.GA}, SupportPodPidsLimit: {Default: true, PreRelease: featuregate.GA, LockToDefault: true}, // remove in 1.23 diff --git a/pkg/registry/storage/rest/storage_storage.go b/pkg/registry/storage/rest/storage_storage.go index 9deb79e0f43..283fec61190 100644 --- a/pkg/registry/storage/rest/storage_storage.go +++ b/pkg/registry/storage/rest/storage_storage.go @@ -105,14 +105,12 @@ func (p RESTStorageProvider) v1beta1Storage(apiResourceConfigSource serverstorag } storage["volumeattachments"] = volumeAttachmentStorage.VolumeAttachment - // register csinodes if CSINodeInfo feature gate is enabled - if utilfeature.DefaultFeatureGate.Enabled(features.CSINodeInfo) { - csiNodeStorage, err := csinodestore.NewStorage(restOptionsGetter) - if err != nil { - return storage, err - } - storage["csinodes"] = csiNodeStorage.CSINode + // register csinodes + csiNodeStorage, err := csinodestore.NewStorage(restOptionsGetter) + if err != nil { + return storage, err } + storage["csinodes"] = csiNodeStorage.CSINode // register csidrivers csiDriverStorage, err := csidriverstore.NewStorage(restOptionsGetter) @@ -143,14 +141,12 @@ func (p RESTStorageProvider) v1Storage(apiResourceConfigSource serverstorage.API "volumeattachments/status": volumeAttachmentStorage.Status, } - // register csinodes if CSINodeInfo feature gate is enabled - if utilfeature.DefaultFeatureGate.Enabled(features.CSINodeInfo) { - csiNodeStorage, err := csinodestore.NewStorage(restOptionsGetter) - if err != nil { - return nil, err - } - storage["csinodes"] = csiNodeStorage.CSINode + // register csinodes + csiNodeStorage, err := csinodestore.NewStorage(restOptionsGetter) + if err != nil { + return nil, err } + storage["csinodes"] = csiNodeStorage.CSINode // register csidrivers csiDriverStorage, err := csidriverstore.NewStorage(restOptionsGetter) diff --git a/pkg/scheduler/BUILD b/pkg/scheduler/BUILD index 57a671b9545..3f6f1c255ca 100644 --- a/pkg/scheduler/BUILD +++ b/pkg/scheduler/BUILD @@ -11,7 +11,6 @@ go_library( visibility = ["//visibility:public"], deps = [ "//pkg/api/v1/pod:go_default_library", - "//pkg/features:go_default_library", "//pkg/scheduler/algorithmprovider:go_default_library", "//pkg/scheduler/apis/config:go_default_library", "//pkg/scheduler/apis/config/scheme:go_default_library", @@ -39,7 +38,6 @@ go_library( "//staging/src/k8s.io/apimachinery/pkg/util/runtime: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/apiserver/pkg/util/feature:go_default_library", "//staging/src/k8s.io/client-go/informers:go_default_library", "//staging/src/k8s.io/client-go/informers/core/v1:go_default_library", "//staging/src/k8s.io/client-go/kubernetes:go_default_library", diff --git a/pkg/scheduler/eventhandlers.go b/pkg/scheduler/eventhandlers.go index f7736f1c3b0..76836f33230 100755 --- a/pkg/scheduler/eventhandlers.go +++ b/pkg/scheduler/eventhandlers.go @@ -25,10 +25,8 @@ import ( v1 "k8s.io/api/core/v1" storagev1 "k8s.io/api/storage/v1" utilruntime "k8s.io/apimachinery/pkg/util/runtime" - utilfeature "k8s.io/apiserver/pkg/util/feature" "k8s.io/client-go/informers" "k8s.io/client-go/tools/cache" - "k8s.io/kubernetes/pkg/features" "k8s.io/kubernetes/pkg/scheduler/internal/queue" "k8s.io/kubernetes/pkg/scheduler/profile" ) @@ -426,14 +424,12 @@ func addAllEventHandlers( }, ) - if utilfeature.DefaultFeatureGate.Enabled(features.CSINodeInfo) { - informerFactory.Storage().V1().CSINodes().Informer().AddEventHandler( - cache.ResourceEventHandlerFuncs{ - AddFunc: sched.onCSINodeAdd, - UpdateFunc: sched.onCSINodeUpdate, - }, - ) - } + informerFactory.Storage().V1().CSINodes().Informer().AddEventHandler( + cache.ResourceEventHandlerFuncs{ + AddFunc: sched.onCSINodeAdd, + UpdateFunc: sched.onCSINodeUpdate, + }, + ) // On add and update of PVs. informerFactory.Core().V1().PersistentVolumes().Informer().AddEventHandler( diff --git a/pkg/scheduler/framework/plugins/nodevolumelimits/csi.go b/pkg/scheduler/framework/plugins/nodevolumelimits/csi.go index 873e2c42cad..b4a7b7a31a3 100644 --- a/pkg/scheduler/framework/plugins/nodevolumelimits/csi.go +++ b/pkg/scheduler/framework/plugins/nodevolumelimits/csi.go @@ -270,10 +270,11 @@ func NewCSI(_ runtime.Object, handle framework.Handle) (framework.Plugin, error) informerFactory := handle.SharedInformerFactory() pvLister := informerFactory.Core().V1().PersistentVolumes().Lister() pvcLister := informerFactory.Core().V1().PersistentVolumeClaims().Lister() + csiNodesLister := informerFactory.Storage().V1().CSINodes().Lister() scLister := informerFactory.Storage().V1().StorageClasses().Lister() return &CSILimits{ - csiNodeLister: getCSINodeListerIfEnabled(informerFactory), + csiNodeLister: csiNodesLister, pvLister: pvLister, pvcLister: pvcLister, scLister: scLister, diff --git a/pkg/scheduler/framework/plugins/nodevolumelimits/non_csi.go b/pkg/scheduler/framework/plugins/nodevolumelimits/non_csi.go index a8caa97291c..ac853bb14e3 100644 --- a/pkg/scheduler/framework/plugins/nodevolumelimits/non_csi.go +++ b/pkg/scheduler/framework/plugins/nodevolumelimits/non_csi.go @@ -34,7 +34,6 @@ import ( csilibplugins "k8s.io/csi-translation-lib/plugins" "k8s.io/klog/v2" "k8s.io/kubernetes/pkg/features" - kubefeatures "k8s.io/kubernetes/pkg/features" "k8s.io/kubernetes/pkg/scheduler/framework" volumeutil "k8s.io/kubernetes/pkg/volume/util" ) @@ -126,9 +125,10 @@ func newNonCSILimitsWithInformerFactory( ) framework.Plugin { pvLister := informerFactory.Core().V1().PersistentVolumes().Lister() pvcLister := informerFactory.Core().V1().PersistentVolumeClaims().Lister() + csiNodesLister := informerFactory.Storage().V1().CSINodes().Lister() scLister := informerFactory.Storage().V1().StorageClasses().Lister() - return newNonCSILimits(filterName, getCSINodeListerIfEnabled(informerFactory), scLister, pvLister, pvcLister) + return newNonCSILimits(filterName, csiNodesLister, scLister, pvLister, pvcLister) } // newNonCSILimits creates a plugin which evaluates whether a pod can fit based on the @@ -511,11 +511,3 @@ func getMaxEBSVolume(nodeInstanceType string) int { } return volumeutil.DefaultMaxEBSVolumes } - -// getCSINodeListerIfEnabled returns the CSINode lister or nil if the feature is disabled -func getCSINodeListerIfEnabled(factory informers.SharedInformerFactory) storagelisters.CSINodeLister { - if !utilfeature.DefaultFeatureGate.Enabled(kubefeatures.CSINodeInfo) { - return nil - } - return factory.Storage().V1().CSINodes().Lister() -} diff --git a/pkg/volume/csi/csi_plugin.go b/pkg/volume/csi/csi_plugin.go index 7fb89f688ba..77826866dbf 100644 --- a/pkg/volume/csi/csi_plugin.go +++ b/pkg/volume/csi/csi_plugin.go @@ -240,8 +240,7 @@ func (p *csiPlugin) Init(host volume.VolumeHost) error { // Initializing the label management channels nim = nodeinfomanager.NewNodeInfoManager(host.GetNodeName(), host, migratedPlugins) - if utilfeature.DefaultFeatureGate.Enabled(features.CSINodeInfo) && - utilfeature.DefaultFeatureGate.Enabled(features.CSIMigration) { + if utilfeature.DefaultFeatureGate.Enabled(features.CSIMigration) { // This function prevents Kubelet from posting Ready status until CSINode // is both installed and initialized if err := initializeCSINode(host); err != nil { diff --git a/pkg/volume/csi/nodeinfomanager/BUILD b/pkg/volume/csi/nodeinfomanager/BUILD index f74ced56a9e..72d91b32310 100644 --- a/pkg/volume/csi/nodeinfomanager/BUILD +++ b/pkg/volume/csi/nodeinfomanager/BUILD @@ -6,7 +6,6 @@ go_library( importpath = "k8s.io/kubernetes/pkg/volume/csi/nodeinfomanager", visibility = ["//visibility:public"], deps = [ - "//pkg/features:go_default_library", "//pkg/util/node:go_default_library", "//pkg/volume:go_default_library", "//pkg/volume/util:go_default_library", @@ -18,7 +17,6 @@ go_library( "//staging/src/k8s.io/apimachinery/pkg/util/errors: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/apiserver/pkg/util/feature:go_default_library", "//staging/src/k8s.io/client-go/kubernetes:go_default_library", "//vendor/k8s.io/klog/v2:go_default_library", ], @@ -44,7 +42,6 @@ go_test( embed = [":go_default_library"], deps = [ "//pkg/apis/core/helper:go_default_library", - "//pkg/features:go_default_library", "//pkg/volume/testing:go_default_library", "//pkg/volume/util:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", @@ -55,11 +52,9 @@ go_test( "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/types:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/strategicpatch:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", "//staging/src/k8s.io/client-go/kubernetes/fake:go_default_library", "//staging/src/k8s.io/client-go/testing:go_default_library", "//staging/src/k8s.io/client-go/util/testing:go_default_library", - "//staging/src/k8s.io/component-base/featuregate/testing:go_default_library", "//vendor/github.com/stretchr/testify/assert:go_default_library", "//vendor/k8s.io/utils/pointer:go_default_library", ], diff --git a/pkg/volume/csi/nodeinfomanager/nodeinfomanager.go b/pkg/volume/csi/nodeinfomanager/nodeinfomanager.go index eaae5e3e7b3..5168bdbd4e4 100644 --- a/pkg/volume/csi/nodeinfomanager/nodeinfomanager.go +++ b/pkg/volume/csi/nodeinfomanager/nodeinfomanager.go @@ -37,10 +37,8 @@ import ( utilerrors "k8s.io/apimachinery/pkg/util/errors" "k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/util/wait" - utilfeature "k8s.io/apiserver/pkg/util/feature" clientset "k8s.io/client-go/kubernetes" "k8s.io/klog/v2" - "k8s.io/kubernetes/pkg/features" nodeutil "k8s.io/kubernetes/pkg/util/node" "k8s.io/kubernetes/pkg/volume" "k8s.io/kubernetes/pkg/volume/util" @@ -115,10 +113,7 @@ func (nim *nodeInfoManager) InstallCSIDriver(driverName string, driverNodeID str nodeUpdateFuncs := []nodeUpdateFunc{ updateNodeIDInNode(driverName, driverNodeID), - } - - if utilfeature.DefaultFeatureGate.Enabled(features.CSINodeInfo) { - nodeUpdateFuncs = append(nodeUpdateFuncs, updateTopologyLabels(topology)) + updateTopologyLabels(topology), } err := nim.updateNode(nodeUpdateFuncs...) @@ -126,28 +121,25 @@ func (nim *nodeInfoManager) InstallCSIDriver(driverName string, driverNodeID str return fmt.Errorf("error updating Node object with CSI driver node info: %v", err) } - if utilfeature.DefaultFeatureGate.Enabled(features.CSINodeInfo) { - err = nim.updateCSINode(driverName, driverNodeID, maxAttachLimit, topology) - if err != nil { - return fmt.Errorf("error updating CSINode object with CSI driver node info: %v", err) - } + err = nim.updateCSINode(driverName, driverNodeID, maxAttachLimit, topology) + if err != nil { + return fmt.Errorf("error updating CSINode object with CSI driver node info: %v", err) } + return nil } // UninstallCSIDriver removes the node ID annotation from the Node object and CSIDrivers field from the -// CSINode object. If the CSINOdeInfo object contains no CSIDrivers, it will be deleted. +// CSINode object. If the CSINodeInfo object contains no CSIDrivers, it will be deleted. // If multiple calls to UninstallCSIDriver() are made in parallel, some calls might receive Node or // CSINode update conflicts, which causes the function to retry the corresponding update. func (nim *nodeInfoManager) UninstallCSIDriver(driverName string) error { - if utilfeature.DefaultFeatureGate.Enabled(features.CSINodeInfo) { - err := nim.uninstallDriverFromCSINode(driverName) - if err != nil { - return fmt.Errorf("error uninstalling CSI driver from CSINode object %v", err) - } + err := nim.uninstallDriverFromCSINode(driverName) + if err != nil { + return fmt.Errorf("error uninstalling CSI driver from CSINode object %v", err) } - err := nim.updateNode( + err = nim.updateNode( removeMaxAttachLimit(driverName), removeNodeIDFromNode(driverName), ) diff --git a/pkg/volume/csi/nodeinfomanager/nodeinfomanager_test.go b/pkg/volume/csi/nodeinfomanager/nodeinfomanager_test.go index e27a6ddfc46..4961adf40b1 100644 --- a/pkg/volume/csi/nodeinfomanager/nodeinfomanager_test.go +++ b/pkg/volume/csi/nodeinfomanager/nodeinfomanager_test.go @@ -35,13 +35,10 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/strategicpatch" - utilfeature "k8s.io/apiserver/pkg/util/feature" "k8s.io/client-go/kubernetes/fake" clienttesting "k8s.io/client-go/testing" utiltesting "k8s.io/client-go/util/testing" - featuregatetesting "k8s.io/component-base/featuregate/testing" "k8s.io/kubernetes/pkg/apis/core/helper" - "k8s.io/kubernetes/pkg/features" volumetest "k8s.io/kubernetes/pkg/volume/testing" "k8s.io/kubernetes/pkg/volume/util" utilpointer "k8s.io/utils/pointer" @@ -604,7 +601,7 @@ func TestInstallCSIDriver(t *testing.T) { }, } - test(t, true /* addNodeInfo */, true /* csiNodeInfoEnabled */, testcases) + test(t, true /* addNodeInfo */, testcases) } func generateVolumeLimits(i int32) *storage.VolumeNodeResources { @@ -772,7 +769,7 @@ func TestUninstallCSIDriver(t *testing.T) { }, } - test(t, false /* addNodeInfo */, true /* csiNodeInfoEnabled */, testcases) + test(t, false /* addNodeInfo */, testcases) } func TestSetMigrationAnnotation(t *testing.T) { @@ -926,8 +923,6 @@ func TestSetMigrationAnnotation(t *testing.T) { } func TestInstallCSIDriverExistingAnnotation(t *testing.T) { - defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.CSINodeInfo, true)() - driverName := "com.example.csi/driver1" nodeID := "com.example.csi/some-node" @@ -1013,9 +1008,7 @@ func getClientSet(existingNode *v1.Node, existingCSINode *storage.CSINode) *fake return fake.NewSimpleClientset(objects...) } -func test(t *testing.T, addNodeInfo bool, csiNodeInfoEnabled bool, testcases []testcase) { - defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.CSINodeInfo, csiNodeInfoEnabled)() - +func test(t *testing.T, addNodeInfo bool, testcases []testcase) { for _, tc := range testcases { t.Logf("test case: %q", tc.name) @@ -1077,26 +1070,24 @@ func test(t *testing.T, addNodeInfo bool, csiNodeInfoEnabled bool, testcases []t t.Errorf("expected Node %v; got: %v", tc.expectedNode, node) } - if csiNodeInfoEnabled { - // CSINode validation - nodeInfo, err := client.StorageV1().CSINodes().Get(context.TODO(), nodeName, metav1.GetOptions{}) - if err != nil { - if !errors.IsNotFound(err) { - t.Errorf("error getting CSINode: %v", err) - } - continue - } - if !helper.Semantic.DeepEqual(nodeInfo, tc.expectedCSINode) { - t.Errorf("expected CSINode %v; got: %v", tc.expectedCSINode, nodeInfo) + // CSINode validation + nodeInfo, err := client.StorageV1().CSINodes().Get(context.TODO(), nodeName, metav1.GetOptions{}) + if err != nil { + if !errors.IsNotFound(err) { + t.Errorf("error getting CSINode: %v", err) } + continue + } + if !helper.Semantic.DeepEqual(nodeInfo, tc.expectedCSINode) { + t.Errorf("expected CSINode %v; got: %v", tc.expectedCSINode, nodeInfo) + } - if !addNodeInfo && tc.existingCSINode != nil && tc.existingNode != nil { - if tc.hasModified && helper.Semantic.DeepEqual(nodeInfo, tc.existingCSINode) { - t.Errorf("existing CSINode %v; got: %v", tc.existingCSINode, nodeInfo) - } - if !tc.hasModified && !helper.Semantic.DeepEqual(nodeInfo, tc.existingCSINode) { - t.Errorf("existing CSINode %v; got: %v", tc.existingCSINode, nodeInfo) - } + if !addNodeInfo && tc.existingCSINode != nil && tc.existingNode != nil { + if tc.hasModified && helper.Semantic.DeepEqual(nodeInfo, tc.existingCSINode) { + t.Errorf("existing CSINode %v; got: %v", tc.existingCSINode, nodeInfo) + } + if !tc.hasModified && !helper.Semantic.DeepEqual(nodeInfo, tc.existingCSINode) { + t.Errorf("existing CSINode %v; got: %v", tc.existingCSINode, nodeInfo) } } } diff --git a/plugin/pkg/admission/noderestriction/BUILD b/plugin/pkg/admission/noderestriction/BUILD index 736a3d046b6..3e602e60ad3 100644 --- a/plugin/pkg/admission/noderestriction/BUILD +++ b/plugin/pkg/admission/noderestriction/BUILD @@ -46,13 +46,11 @@ go_test( "//pkg/apis/policy:go_default_library", "//pkg/apis/storage:go_default_library", "//pkg/auth/nodeidentifier:go_default_library", - "//pkg/features:go_default_library", "//pkg/kubelet/apis:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/types:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/util/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library", "//staging/src/k8s.io/apiserver/pkg/admission:go_default_library", "//staging/src/k8s.io/apiserver/pkg/authentication/user:go_default_library", diff --git a/plugin/pkg/admission/noderestriction/admission.go b/plugin/pkg/admission/noderestriction/admission.go index 326165ddd3f..8d4edde256d 100644 --- a/plugin/pkg/admission/noderestriction/admission.go +++ b/plugin/pkg/admission/noderestriction/admission.go @@ -71,7 +71,6 @@ type Plugin struct { podsGetter corev1lister.PodLister nodesGetter corev1lister.NodeLister - csiNodeInfoEnabled bool expandPersistentVolumesEnabled bool } @@ -83,7 +82,6 @@ var ( // InspectFeatureGates allows setting bools without taking a dep on a global variable func (p *Plugin) InspectFeatureGates(featureGates featuregate.FeatureGate) { - p.csiNodeInfoEnabled = featureGates.Enabled(features.CSINodeInfo) p.expandPersistentVolumesEnabled = featureGates.Enabled(features.ExpandPersistentVolumes) } @@ -163,10 +161,7 @@ func (p *Plugin) Admit(ctx context.Context, a admission.Attributes, o admission. return p.admitLease(nodeName, a) case csiNodeResource: - if p.csiNodeInfoEnabled { - return p.admitCSINode(nodeName, a) - } - return admission.NewForbidden(a, fmt.Errorf("disabled by feature gates %s", features.CSINodeInfo)) + return p.admitCSINode(nodeName, a) default: return nil diff --git a/plugin/pkg/admission/noderestriction/admission_test.go b/plugin/pkg/admission/noderestriction/admission_test.go index 16948329333..e897e55221c 100644 --- a/plugin/pkg/admission/noderestriction/admission_test.go +++ b/plugin/pkg/admission/noderestriction/admission_test.go @@ -18,18 +18,15 @@ package noderestriction import ( "context" - "fmt" "reflect" "strings" "testing" "time" corev1 "k8s.io/api/core/v1" - v1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/types" - utilruntime "k8s.io/apimachinery/pkg/util/runtime" "k8s.io/apimachinery/pkg/util/sets" "k8s.io/apiserver/pkg/admission" "k8s.io/apiserver/pkg/authentication/user" @@ -42,28 +39,10 @@ import ( "k8s.io/kubernetes/pkg/apis/policy" storage "k8s.io/kubernetes/pkg/apis/storage" "k8s.io/kubernetes/pkg/auth/nodeidentifier" - "k8s.io/kubernetes/pkg/features" kubeletapis "k8s.io/kubernetes/pkg/kubelet/apis" "k8s.io/utils/pointer" ) -var ( - csiNodeInfoEnabledFeature = featuregate.NewFeatureGate() - csiNodeInfoDisabledFeature = featuregate.NewFeatureGate() -) - -func init() { - // all features need to be set on all featuregates for the tests. We set everything and then then the if's below override it. - relevantFeatures := map[featuregate.Feature]featuregate.FeatureSpec{ - features.CSINodeInfo: {Default: false}, - features.ExpandPersistentVolumes: {Default: false}, - } - utilruntime.Must(csiNodeInfoEnabledFeature.Add(relevantFeatures)) - utilruntime.Must(csiNodeInfoDisabledFeature.Add(relevantFeatures)) - - utilruntime.Must(csiNodeInfoEnabledFeature.SetFromMap(map[string]bool{string(features.CSINodeInfo): true})) -} - func makeTestPod(namespace, name, node string, mirror bool) (*api.Pod, *corev1.Pod) { corePod := &api.Pod{} corePod.Namespace = namespace @@ -398,7 +377,7 @@ func Test_nodePlugin_Admit(t *testing.T) { existingPodsIndex.Add(v1otherpod) existingPodsIndex.Add(v1unboundpod) - existingNodesIndex.Add(&v1.Node{ObjectMeta: mynodeObjMeta}) + existingNodesIndex.Add(&corev1.Node{ObjectMeta: mynodeObjMeta}) sapod, _ := makeTestPod("ns", "mysapod", "mynode", true) sapod.Spec.ServiceAccountName = "foo" @@ -1214,45 +1193,33 @@ func Test_nodePlugin_Admit(t *testing.T) { }, // CSINode { - name: "disallowed create CSINode - feature disabled", - attributes: admission.NewAttributesRecord(nodeInfo, nil, csiNodeKind, nodeInfo.Namespace, nodeInfo.Name, csiNodeResource, "", admission.Create, &metav1.CreateOptions{}, false, mynode), - features: csiNodeInfoDisabledFeature, - err: fmt.Sprintf("forbidden: disabled by feature gates %s", features.CSINodeInfo), - }, - { - name: "disallowed create another node's CSINode - feature enabled", + name: "disallowed create another node's CSINode", attributes: admission.NewAttributesRecord(nodeInfoWrongName, nil, csiNodeKind, nodeInfoWrongName.Namespace, nodeInfoWrongName.Name, csiNodeResource, "", admission.Create, &metav1.CreateOptions{}, false, mynode), - features: csiNodeInfoEnabledFeature, err: "forbidden: ", }, { - name: "disallowed update another node's CSINode - feature enabled", + name: "disallowed update another node's CSINode", attributes: admission.NewAttributesRecord(nodeInfoWrongName, nodeInfoWrongName, csiNodeKind, nodeInfoWrongName.Namespace, nodeInfoWrongName.Name, csiNodeResource, "", admission.Update, &metav1.UpdateOptions{}, false, mynode), - features: csiNodeInfoEnabledFeature, err: "forbidden: ", }, { - name: "disallowed delete another node's CSINode - feature enabled", + name: "disallowed delete another node's CSINode", attributes: admission.NewAttributesRecord(nil, nil, csiNodeKind, nodeInfoWrongName.Namespace, nodeInfoWrongName.Name, csiNodeResource, "", admission.Delete, &metav1.DeleteOptions{}, false, mynode), - features: csiNodeInfoEnabledFeature, err: "forbidden: ", }, { - name: "allowed create node CSINode - feature enabled", + name: "allowed create node CSINode", attributes: admission.NewAttributesRecord(nodeInfo, nil, csiNodeKind, nodeInfo.Namespace, nodeInfo.Name, csiNodeResource, "", admission.Create, &metav1.CreateOptions{}, false, mynode), - features: csiNodeInfoEnabledFeature, err: "", }, { - name: "allowed update node CSINode - feature enabled", + name: "allowed update node CSINode", attributes: admission.NewAttributesRecord(nodeInfo, nodeInfo, csiNodeKind, nodeInfo.Namespace, nodeInfo.Name, csiNodeResource, "", admission.Update, &metav1.UpdateOptions{}, false, mynode), - features: csiNodeInfoEnabledFeature, err: "", }, { - name: "allowed delete node CSINode - feature enabled", + name: "allowed delete node CSINode", attributes: admission.NewAttributesRecord(nil, nil, csiNodeKind, nodeInfo.Namespace, nodeInfo.Name, csiNodeResource, "", admission.Delete, &metav1.UpdateOptions{}, false, mynode), - features: csiNodeInfoEnabledFeature, err: "", }, } @@ -1264,11 +1231,11 @@ func Test_nodePlugin_Admit(t *testing.T) { func Test_nodePlugin_Admit_OwnerReference(t *testing.T) { expectedNodeIndex := cache.NewIndexer(cache.MetaNamespaceKeyFunc, nil) - expectedNodeIndex.Add(&v1.Node{ObjectMeta: metav1.ObjectMeta{Name: "mynode", UID: "mynode-uid"}}) + expectedNodeIndex.Add(&corev1.Node{ObjectMeta: metav1.ObjectMeta{Name: "mynode", UID: "mynode-uid"}}) expectedNode := corev1lister.NewNodeLister(expectedNodeIndex) unexpectedNodeIndex := cache.NewIndexer(cache.MetaNamespaceKeyFunc, nil) - unexpectedNodeIndex.Add(&v1.Node{ObjectMeta: metav1.ObjectMeta{Name: "mynode", UID: "mynode-unexpected-uid"}}) + unexpectedNodeIndex.Add(&corev1.Node{ObjectMeta: metav1.ObjectMeta{Name: "mynode", UID: "mynode-unexpected-uid"}}) unexpectedNode := corev1lister.NewNodeLister(unexpectedNodeIndex) noNodesIndex := cache.NewIndexer(cache.MetaNamespaceKeyFunc, nil) diff --git a/plugin/pkg/auth/authorizer/node/BUILD b/plugin/pkg/auth/authorizer/node/BUILD index 5759c73e267..9f4ad9ec93b 100644 --- a/plugin/pkg/auth/authorizer/node/BUILD +++ b/plugin/pkg/auth/authorizer/node/BUILD @@ -16,7 +16,6 @@ go_test( embed = [":go_default_library"], deps = [ "//pkg/auth/nodeidentifier:go_default_library", - "//pkg/features:go_default_library", "//plugin/pkg/auth/authorizer/rbac/bootstrappolicy:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/api/storage/v1:go_default_library", diff --git a/plugin/pkg/auth/authorizer/node/node_authorizer.go b/plugin/pkg/auth/authorizer/node/node_authorizer.go index 1da0c20ccec..661ab96fbac 100644 --- a/plugin/pkg/auth/authorizer/node/node_authorizer.go +++ b/plugin/pkg/auth/authorizer/node/node_authorizer.go @@ -127,10 +127,7 @@ func (r *NodeAuthorizer) Authorize(ctx context.Context, attrs authorizer.Attribu case leaseResource: return r.authorizeLease(nodeName, attrs) case csiNodeResource: - if r.features.Enabled(features.CSINodeInfo) { - return r.authorizeCSINode(nodeName, attrs) - } - return authorizer.DecisionNoOpinion, fmt.Sprintf("disabled by feature gates %s", features.CSINodeInfo), nil + return r.authorizeCSINode(nodeName, attrs) } } diff --git a/plugin/pkg/auth/authorizer/node/node_authorizer_test.go b/plugin/pkg/auth/authorizer/node/node_authorizer_test.go index 7c617043b52..5e4339db60d 100644 --- a/plugin/pkg/auth/authorizer/node/node_authorizer_test.go +++ b/plugin/pkg/auth/authorizer/node/node_authorizer_test.go @@ -20,14 +20,13 @@ import ( "context" "fmt" "math/rand" + "os" "runtime" "runtime/pprof" "sync/atomic" "testing" "time" - "os" - corev1 "k8s.io/api/core/v1" storagev1 "k8s.io/api/storage/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -37,24 +36,9 @@ import ( utilfeature "k8s.io/apiserver/pkg/util/feature" "k8s.io/component-base/featuregate" "k8s.io/kubernetes/pkg/auth/nodeidentifier" - "k8s.io/kubernetes/pkg/features" "k8s.io/kubernetes/plugin/pkg/auth/authorizer/rbac/bootstrappolicy" ) -var ( - csiNodeInfoEnabledFeature = featuregate.NewFeatureGate() - csiNodeInfoDisabledFeature = featuregate.NewFeatureGate() -) - -func init() { - if err := csiNodeInfoEnabledFeature.Add(map[featuregate.Feature]featuregate.FeatureSpec{features.CSINodeInfo: {Default: true}}); err != nil { - panic(err) - } - if err := csiNodeInfoDisabledFeature.Add(map[featuregate.Feature]featuregate.FeatureSpec{features.CSINodeInfo: {Default: false}}); err != nil { - panic(err) - } -} - func TestAuthorizer(t *testing.T) { g := NewGraph() @@ -282,82 +266,64 @@ func TestAuthorizer(t *testing.T) { }, // CSINode { - name: "disallowed CSINode - feature disabled", - attrs: authorizer.AttributesRecord{User: node0, ResourceRequest: true, Verb: "get", Resource: "csinodes", APIGroup: "storage.k8s.io", Name: "node0"}, - features: csiNodeInfoDisabledFeature, - expect: authorizer.DecisionNoOpinion, + name: "disallowed CSINode with subresource - feature enabled", + attrs: authorizer.AttributesRecord{User: node0, ResourceRequest: true, Verb: "get", Resource: "csinodes", Subresource: "csiDrivers", APIGroup: "storage.k8s.io", Name: "node0"}, + expect: authorizer.DecisionNoOpinion, }, { - name: "disallowed CSINode with subresource - feature enabled", - attrs: authorizer.AttributesRecord{User: node0, ResourceRequest: true, Verb: "get", Resource: "csinodes", Subresource: "csiDrivers", APIGroup: "storage.k8s.io", Name: "node0"}, - features: csiNodeInfoEnabledFeature, - expect: authorizer.DecisionNoOpinion, + name: "disallowed get another node's CSINode", + attrs: authorizer.AttributesRecord{User: node0, ResourceRequest: true, Verb: "get", Resource: "csinodes", APIGroup: "storage.k8s.io", Name: "node1"}, + expect: authorizer.DecisionNoOpinion, }, { - name: "disallowed get another node's CSINode - feature enabled", - attrs: authorizer.AttributesRecord{User: node0, ResourceRequest: true, Verb: "get", Resource: "csinodes", APIGroup: "storage.k8s.io", Name: "node1"}, - features: csiNodeInfoEnabledFeature, - expect: authorizer.DecisionNoOpinion, + name: "disallowed update another node's CSINode", + attrs: authorizer.AttributesRecord{User: node0, ResourceRequest: true, Verb: "update", Resource: "csinodes", APIGroup: "storage.k8s.io", Name: "node1"}, + expect: authorizer.DecisionNoOpinion, }, { - name: "disallowed update another node's CSINode - feature enabled", - attrs: authorizer.AttributesRecord{User: node0, ResourceRequest: true, Verb: "update", Resource: "csinodes", APIGroup: "storage.k8s.io", Name: "node1"}, - features: csiNodeInfoEnabledFeature, - expect: authorizer.DecisionNoOpinion, + name: "disallowed patch another node's CSINode", + attrs: authorizer.AttributesRecord{User: node0, ResourceRequest: true, Verb: "patch", Resource: "csinodes", APIGroup: "storage.k8s.io", Name: "node1"}, + expect: authorizer.DecisionNoOpinion, }, { - name: "disallowed patch another node's CSINode - feature enabled", - attrs: authorizer.AttributesRecord{User: node0, ResourceRequest: true, Verb: "patch", Resource: "csinodes", APIGroup: "storage.k8s.io", Name: "node1"}, - features: csiNodeInfoEnabledFeature, - expect: authorizer.DecisionNoOpinion, + name: "disallowed delete another node's CSINode", + attrs: authorizer.AttributesRecord{User: node0, ResourceRequest: true, Verb: "delete", Resource: "csinodes", APIGroup: "storage.k8s.io", Name: "node1"}, + expect: authorizer.DecisionNoOpinion, }, { - name: "disallowed delete another node's CSINode - feature enabled", - attrs: authorizer.AttributesRecord{User: node0, ResourceRequest: true, Verb: "delete", Resource: "csinodes", APIGroup: "storage.k8s.io", Name: "node1"}, - features: csiNodeInfoEnabledFeature, - expect: authorizer.DecisionNoOpinion, + name: "disallowed list CSINodes", + attrs: authorizer.AttributesRecord{User: node0, ResourceRequest: true, Verb: "list", Resource: "csinodes", APIGroup: "storage.k8s.io"}, + expect: authorizer.DecisionNoOpinion, }, { - name: "disallowed list CSINodes - feature enabled", - attrs: authorizer.AttributesRecord{User: node0, ResourceRequest: true, Verb: "list", Resource: "csinodes", APIGroup: "storage.k8s.io"}, - features: csiNodeInfoEnabledFeature, - expect: authorizer.DecisionNoOpinion, + name: "disallowed watch CSINodes", + attrs: authorizer.AttributesRecord{User: node0, ResourceRequest: true, Verb: "watch", Resource: "csinodes", APIGroup: "storage.k8s.io"}, + expect: authorizer.DecisionNoOpinion, }, { - name: "disallowed watch CSINodes - feature enabled", - attrs: authorizer.AttributesRecord{User: node0, ResourceRequest: true, Verb: "watch", Resource: "csinodes", APIGroup: "storage.k8s.io"}, - features: csiNodeInfoEnabledFeature, - expect: authorizer.DecisionNoOpinion, + name: "allowed get CSINode", + attrs: authorizer.AttributesRecord{User: node0, ResourceRequest: true, Verb: "get", Resource: "csinodes", APIGroup: "storage.k8s.io", Name: "node0"}, + expect: authorizer.DecisionAllow, }, { - name: "allowed get CSINode - feature enabled", - attrs: authorizer.AttributesRecord{User: node0, ResourceRequest: true, Verb: "get", Resource: "csinodes", APIGroup: "storage.k8s.io", Name: "node0"}, - features: csiNodeInfoEnabledFeature, - expect: authorizer.DecisionAllow, + name: "allowed create CSINode", + attrs: authorizer.AttributesRecord{User: node0, ResourceRequest: true, Verb: "create", Resource: "csinodes", APIGroup: "storage.k8s.io", Name: "node0"}, + expect: authorizer.DecisionAllow, }, { - name: "allowed create CSINode - feature enabled", - attrs: authorizer.AttributesRecord{User: node0, ResourceRequest: true, Verb: "create", Resource: "csinodes", APIGroup: "storage.k8s.io", Name: "node0"}, - features: csiNodeInfoEnabledFeature, - expect: authorizer.DecisionAllow, + name: "allowed update CSINode", + attrs: authorizer.AttributesRecord{User: node0, ResourceRequest: true, Verb: "update", Resource: "csinodes", APIGroup: "storage.k8s.io", Name: "node0"}, + expect: authorizer.DecisionAllow, }, { - name: "allowed update CSINode - feature enabled", - attrs: authorizer.AttributesRecord{User: node0, ResourceRequest: true, Verb: "update", Resource: "csinodes", APIGroup: "storage.k8s.io", Name: "node0"}, - features: csiNodeInfoEnabledFeature, - expect: authorizer.DecisionAllow, + name: "allowed patch CSINode", + attrs: authorizer.AttributesRecord{User: node0, ResourceRequest: true, Verb: "patch", Resource: "csinodes", APIGroup: "storage.k8s.io", Name: "node0"}, + expect: authorizer.DecisionAllow, }, { - name: "allowed patch CSINode - feature enabled", - attrs: authorizer.AttributesRecord{User: node0, ResourceRequest: true, Verb: "patch", Resource: "csinodes", APIGroup: "storage.k8s.io", Name: "node0"}, - features: csiNodeInfoEnabledFeature, - expect: authorizer.DecisionAllow, - }, - { - name: "allowed delete CSINode - feature enabled", - attrs: authorizer.AttributesRecord{User: node0, ResourceRequest: true, Verb: "delete", Resource: "csinodes", APIGroup: "storage.k8s.io", Name: "node0"}, - features: csiNodeInfoEnabledFeature, - expect: authorizer.DecisionAllow, + name: "allowed delete CSINode", + attrs: authorizer.AttributesRecord{User: node0, ResourceRequest: true, Verb: "delete", Resource: "csinodes", APIGroup: "storage.k8s.io", Name: "node0"}, + expect: authorizer.DecisionAllow, }, } diff --git a/plugin/pkg/auth/authorizer/rbac/bootstrappolicy/controller_policy.go b/plugin/pkg/auth/authorizer/rbac/bootstrappolicy/controller_policy.go index 2d326c62767..76b42bed7af 100644 --- a/plugin/pkg/auth/authorizer/rbac/bootstrappolicy/controller_policy.go +++ b/plugin/pkg/auth/authorizer/rbac/bootstrappolicy/controller_policy.go @@ -74,7 +74,7 @@ func buildControllerRoles() ([]rbacv1.ClusterRole, []rbacv1.ClusterRoleBinding) } role.Rules = append(role.Rules, rbacv1helpers.NewRule("get", "watch", "list").Groups("storage.k8s.io").Resources("csidrivers").RuleOrDie()) - if utilfeature.DefaultFeatureGate.Enabled(features.CSINodeInfo) && utilfeature.DefaultFeatureGate.Enabled(features.CSIMigration) { + if utilfeature.DefaultFeatureGate.Enabled(features.CSIMigration) { role.Rules = append(role.Rules, rbacv1helpers.NewRule("get", "watch", "list").Groups("storage.k8s.io").Resources("csinodes").RuleOrDie()) } diff --git a/plugin/pkg/auth/authorizer/rbac/bootstrappolicy/policy.go b/plugin/pkg/auth/authorizer/rbac/bootstrappolicy/policy.go index 352543a2281..cbbf8446d42 100644 --- a/plugin/pkg/auth/authorizer/rbac/bootstrappolicy/policy.go +++ b/plugin/pkg/auth/authorizer/rbac/bootstrappolicy/policy.go @@ -169,10 +169,8 @@ func NodeRules() []rbacv1.PolicyRule { // CSI csiDriverRule := rbacv1helpers.NewRule("get", "watch", "list").Groups("storage.k8s.io").Resources("csidrivers").RuleOrDie() nodePolicyRules = append(nodePolicyRules, csiDriverRule) - if utilfeature.DefaultFeatureGate.Enabled(features.CSINodeInfo) { - csiNodeInfoRule := rbacv1helpers.NewRule("get", "create", "update", "patch", "delete").Groups("storage.k8s.io").Resources("csinodes").RuleOrDie() - nodePolicyRules = append(nodePolicyRules, csiNodeInfoRule) - } + csiNodeInfoRule := rbacv1helpers.NewRule("get", "create", "update", "patch", "delete").Groups("storage.k8s.io").Resources("csinodes").RuleOrDie() + nodePolicyRules = append(nodePolicyRules, csiNodeInfoRule) // RuntimeClass nodePolicyRules = append(nodePolicyRules, rbacv1helpers.NewRule("get", "list", "watch").Groups("node.k8s.io").Resources("runtimeclasses").RuleOrDie()) diff --git a/test/integration/auth/node_test.go b/test/integration/auth/node_test.go index f2622ffbf24..86a2354d7d8 100644 --- a/test/integration/auth/node_test.go +++ b/test/integration/auth/node_test.go @@ -55,9 +55,6 @@ func TestNodeAuthorizer(t *testing.T) { // Enable DynamicKubeletConfig feature so that Node.Spec.ConfigSource can be set defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.DynamicKubeletConfig, true)() - // Enable CSINodeInfo feature so that nodes can create CSINode objects. - defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.CSINodeInfo, true)() - tokenFile, err := ioutil.TempFile("", "kubeconfig") if err != nil { t.Fatal(err) diff --git a/test/integration/etcd/BUILD b/test/integration/etcd/BUILD index ca9bc7f6753..4c2f9a0b15c 100644 --- a/test/integration/etcd/BUILD +++ b/test/integration/etcd/BUILD @@ -65,7 +65,6 @@ go_library( "//cmd/kube-apiserver/app:go_default_library", "//cmd/kube-apiserver/app/options:go_default_library", "//pkg/controlplane:go_default_library", - "//pkg/features:go_default_library", "//staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1:go_default_library", "//staging/src/k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/meta:go_default_library", @@ -75,7 +74,6 @@ go_library( "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library", "//staging/src/k8s.io/apiserver/pkg/server/options:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", "//staging/src/k8s.io/client-go/discovery/cached/memory:go_default_library", "//staging/src/k8s.io/client-go/dynamic:go_default_library", "//staging/src/k8s.io/client-go/kubernetes:go_default_library", diff --git a/test/integration/etcd/data.go b/test/integration/etcd/data.go index 53b83dd352d..d03d09812d9 100644 --- a/test/integration/etcd/data.go +++ b/test/integration/etcd/data.go @@ -20,8 +20,6 @@ import ( apiextensionsv1beta1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime/schema" - utilfeature "k8s.io/apiserver/pkg/util/feature" - "k8s.io/kubernetes/pkg/features" "k8s.io/kubernetes/test/utils/image" "k8s.io/utils/pointer" ) @@ -538,20 +536,18 @@ func GetEtcdStorageDataForNamespace(namespace string) map[schema.GroupVersionRes // -- } - // add csinodes if CSINodeInfo feature gate is enabled - if utilfeature.DefaultFeatureGate.Enabled(features.CSINodeInfo) { - // k8s.io/kubernetes/pkg/apis/storage/v1beta1 - etcdStorageData[gvr("storage.k8s.io", "v1beta1", "csinodes")] = StorageData{ - Stub: `{"metadata": {"name": "csini1"}, "spec": {"drivers": [{"name": "test-driver", "nodeID": "localhost", "topologyKeys": ["company.com/zone1", "company.com/zone2"]}]}}`, - ExpectedEtcdPath: "/registry/csinodes/csini1", - ExpectedGVK: gvkP("storage.k8s.io", "v1", "CSINode"), - } + // add csinodes + // k8s.io/kubernetes/pkg/apis/storage/v1beta1 + etcdStorageData[gvr("storage.k8s.io", "v1beta1", "csinodes")] = StorageData{ + Stub: `{"metadata": {"name": "csini1"}, "spec": {"drivers": [{"name": "test-driver", "nodeID": "localhost", "topologyKeys": ["company.com/zone1", "company.com/zone2"]}]}}`, + ExpectedEtcdPath: "/registry/csinodes/csini1", + ExpectedGVK: gvkP("storage.k8s.io", "v1", "CSINode"), + } - // k8s.io/kubernetes/pkg/apis/storage/v1 - etcdStorageData[gvr("storage.k8s.io", "v1", "csinodes")] = StorageData{ - Stub: `{"metadata": {"name": "csini2"}, "spec": {"drivers": [{"name": "test-driver", "nodeID": "localhost", "topologyKeys": ["company.com/zone1", "company.com/zone2"]}]}}`, - ExpectedEtcdPath: "/registry/csinodes/csini2", - } + // k8s.io/kubernetes/pkg/apis/storage/v1 + etcdStorageData[gvr("storage.k8s.io", "v1", "csinodes")] = StorageData{ + Stub: `{"metadata": {"name": "csini2"}, "spec": {"drivers": [{"name": "test-driver", "nodeID": "localhost", "topologyKeys": ["company.com/zone1", "company.com/zone2"]}]}}`, + ExpectedEtcdPath: "/registry/csinodes/csini2", } // add csidrivers diff --git a/test/integration/volume/attach_detach_test.go b/test/integration/volume/attach_detach_test.go index 116cdfc6b27..6530df1c874 100644 --- a/test/integration/volume/attach_detach_test.go +++ b/test/integration/volume/attach_detach_test.go @@ -211,8 +211,7 @@ func TestPodDeletionWithDswp(t *testing.T) { } func initCSIObjects(stopCh chan struct{}, informers clientgoinformers.SharedInformerFactory) { - if utilfeature.DefaultFeatureGate.Enabled(features.CSIMigration) && - utilfeature.DefaultFeatureGate.Enabled(features.CSINodeInfo) { + if utilfeature.DefaultFeatureGate.Enabled(features.CSIMigration) { go informers.Storage().V1().CSINodes().Informer().Run(stopCh) } go informers.Storage().V1().CSIDrivers().Informer().Run(stopCh)