mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-22 11:21:47 +00:00
externalize storage object in use protection
prune listers from admission controller
This commit is contained in:
parent
3817e21c03
commit
3e205cadcc
@ -7,10 +7,7 @@ go_library(
|
|||||||
visibility = ["//visibility:public"],
|
visibility = ["//visibility:public"],
|
||||||
deps = [
|
deps = [
|
||||||
"//pkg/apis/core:go_default_library",
|
"//pkg/apis/core:go_default_library",
|
||||||
"//pkg/client/informers/informers_generated/internalversion:go_default_library",
|
|
||||||
"//pkg/client/listers/core/internalversion:go_default_library",
|
|
||||||
"//pkg/features:go_default_library",
|
"//pkg/features:go_default_library",
|
||||||
"//pkg/kubeapiserver/admission:go_default_library",
|
|
||||||
"//pkg/volume/util:go_default_library",
|
"//pkg/volume/util:go_default_library",
|
||||||
"//staging/src/k8s.io/apiserver/pkg/admission:go_default_library",
|
"//staging/src/k8s.io/apiserver/pkg/admission:go_default_library",
|
||||||
"//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library",
|
"//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library",
|
||||||
@ -24,8 +21,6 @@ go_test(
|
|||||||
embed = [":go_default_library"],
|
embed = [":go_default_library"],
|
||||||
deps = [
|
deps = [
|
||||||
"//pkg/apis/core:go_default_library",
|
"//pkg/apis/core:go_default_library",
|
||||||
"//pkg/client/informers/informers_generated/internalversion:go_default_library",
|
|
||||||
"//pkg/controller:go_default_library",
|
|
||||||
"//pkg/volume/util:go_default_library",
|
"//pkg/volume/util:go_default_library",
|
||||||
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
|
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
|
||||||
"//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library",
|
"//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library",
|
||||||
|
@ -17,18 +17,14 @@ limitations under the License.
|
|||||||
package storageobjectinuseprotection
|
package storageobjectinuseprotection
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
|
||||||
"io"
|
"io"
|
||||||
|
|
||||||
"github.com/golang/glog"
|
"github.com/golang/glog"
|
||||||
|
|
||||||
admission "k8s.io/apiserver/pkg/admission"
|
"k8s.io/apiserver/pkg/admission"
|
||||||
"k8s.io/apiserver/pkg/util/feature"
|
"k8s.io/apiserver/pkg/util/feature"
|
||||||
api "k8s.io/kubernetes/pkg/apis/core"
|
api "k8s.io/kubernetes/pkg/apis/core"
|
||||||
informers "k8s.io/kubernetes/pkg/client/informers/informers_generated/internalversion"
|
|
||||||
corelisters "k8s.io/kubernetes/pkg/client/listers/core/internalversion"
|
|
||||||
"k8s.io/kubernetes/pkg/features"
|
"k8s.io/kubernetes/pkg/features"
|
||||||
kubeapiserveradmission "k8s.io/kubernetes/pkg/kubeapiserver/admission"
|
|
||||||
volumeutil "k8s.io/kubernetes/pkg/volume/util"
|
volumeutil "k8s.io/kubernetes/pkg/volume/util"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -48,13 +44,9 @@ func Register(plugins *admission.Plugins) {
|
|||||||
// storageProtectionPlugin holds state for and implements the admission plugin.
|
// storageProtectionPlugin holds state for and implements the admission plugin.
|
||||||
type storageProtectionPlugin struct {
|
type storageProtectionPlugin struct {
|
||||||
*admission.Handler
|
*admission.Handler
|
||||||
|
|
||||||
pvcLister corelisters.PersistentVolumeClaimLister
|
|
||||||
pvLister corelisters.PersistentVolumeLister
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var _ admission.Interface = &storageProtectionPlugin{}
|
var _ admission.Interface = &storageProtectionPlugin{}
|
||||||
var _ = kubeapiserveradmission.WantsInternalKubeInformerFactory(&storageProtectionPlugin{})
|
|
||||||
|
|
||||||
// newPlugin creates a new admission plugin.
|
// newPlugin creates a new admission plugin.
|
||||||
func newPlugin() *storageProtectionPlugin {
|
func newPlugin() *storageProtectionPlugin {
|
||||||
@ -63,27 +55,6 @@ func newPlugin() *storageProtectionPlugin {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *storageProtectionPlugin) SetInternalKubeInformerFactory(f informers.SharedInformerFactory) {
|
|
||||||
pvcInformer := f.Core().InternalVersion().PersistentVolumeClaims()
|
|
||||||
c.pvcLister = pvcInformer.Lister()
|
|
||||||
pvInformer := f.Core().InternalVersion().PersistentVolumes()
|
|
||||||
c.pvLister = pvInformer.Lister()
|
|
||||||
c.SetReadyFunc(func() bool {
|
|
||||||
return pvcInformer.Informer().HasSynced() && pvInformer.Informer().HasSynced()
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// ValidateInitialization ensures lister is set.
|
|
||||||
func (c *storageProtectionPlugin) ValidateInitialization() error {
|
|
||||||
if c.pvcLister == nil {
|
|
||||||
return fmt.Errorf("missing PVC lister")
|
|
||||||
}
|
|
||||||
if c.pvLister == nil {
|
|
||||||
return fmt.Errorf("missing PV lister")
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
var (
|
var (
|
||||||
pvResource = api.Resource("persistentvolumes")
|
pvResource = api.Resource("persistentvolumes")
|
||||||
pvcResource = api.Resource("persistentvolumeclaims")
|
pvcResource = api.Resource("persistentvolumeclaims")
|
||||||
|
@ -29,8 +29,6 @@ import (
|
|||||||
"k8s.io/apiserver/pkg/admission"
|
"k8s.io/apiserver/pkg/admission"
|
||||||
"k8s.io/apiserver/pkg/util/feature"
|
"k8s.io/apiserver/pkg/util/feature"
|
||||||
api "k8s.io/kubernetes/pkg/apis/core"
|
api "k8s.io/kubernetes/pkg/apis/core"
|
||||||
informers "k8s.io/kubernetes/pkg/client/informers/informers_generated/internalversion"
|
|
||||||
"k8s.io/kubernetes/pkg/controller"
|
|
||||||
volumeutil "k8s.io/kubernetes/pkg/volume/util"
|
volumeutil "k8s.io/kubernetes/pkg/volume/util"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -118,8 +116,6 @@ func TestAdmit(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ctrl := newPlugin()
|
ctrl := newPlugin()
|
||||||
informerFactory := informers.NewSharedInformerFactory(nil, controller.NoResyncPeriodFunc())
|
|
||||||
ctrl.SetInternalKubeInformerFactory(informerFactory)
|
|
||||||
|
|
||||||
for _, test := range tests {
|
for _, test := range tests {
|
||||||
feature.DefaultFeatureGate.Set(fmt.Sprintf("StorageObjectInUseProtection=%v", test.featureEnabled))
|
feature.DefaultFeatureGate.Set(fmt.Sprintf("StorageObjectInUseProtection=%v", test.featureEnabled))
|
||||||
|
Loading…
Reference in New Issue
Block a user