From 77df6bc9a854507c8f8b7018b63923ef8403cacb Mon Sep 17 00:00:00 2001 From: Rob Scott Date: Thu, 14 Nov 2019 10:52:09 -0800 Subject: [PATCH] Ensuring EndpointSlice controller does not start when feature gate or API are disabled --- cmd/kube-controller-manager/app/BUILD | 1 + cmd/kube-controller-manager/app/discovery.go | 14 ++++++++++++++ 2 files changed, 15 insertions(+) diff --git a/cmd/kube-controller-manager/app/BUILD b/cmd/kube-controller-manager/app/BUILD index 6ccdf043e1a..5b99320fd24 100644 --- a/cmd/kube-controller-manager/app/BUILD +++ b/cmd/kube-controller-manager/app/BUILD @@ -109,6 +109,7 @@ go_library( "//pkg/volume/util:go_default_library", "//pkg/volume/vsphere_volume:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", + "//staging/src/k8s.io/api/discovery/v1beta1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime/schema: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", diff --git a/cmd/kube-controller-manager/app/discovery.go b/cmd/kube-controller-manager/app/discovery.go index 7306ccd8da4..d547aaac790 100644 --- a/cmd/kube-controller-manager/app/discovery.go +++ b/cmd/kube-controller-manager/app/discovery.go @@ -23,10 +23,24 @@ package app import ( "net/http" + discoveryv1beta1 "k8s.io/api/discovery/v1beta1" + utilfeature "k8s.io/apiserver/pkg/util/feature" + "k8s.io/klog" endpointslicecontroller "k8s.io/kubernetes/pkg/controller/endpointslice" + "k8s.io/kubernetes/pkg/features" ) func startEndpointSliceController(ctx ControllerContext) (http.Handler, bool, error) { + if !utilfeature.DefaultFeatureGate.Enabled(features.EndpointSlice) { + klog.V(4).Infof("Not starting endpointslice-controller since EndpointSlice feature gate is disabled") + return nil, false, nil + } + + if !ctx.AvailableResources[discoveryv1beta1.SchemeGroupVersion.WithResource("endpointslices")] { + klog.Warningf("Not starting endpointslice-controller since discovery.k8s.io/v1beta1 resources are not available") + return nil, false, nil + } + go endpointslicecontroller.NewController( ctx.InformerFactory.Core().V1().Pods(), ctx.InformerFactory.Core().V1().Services(),