From a71f757148b48c608afbb538f5ed192c2e0a928b Mon Sep 17 00:00:00 2001 From: Brendan Burns Date: Thu, 26 Oct 2017 18:15:23 +0000 Subject: [PATCH] wqFlag gate node exclusion for service load balancers. --- pkg/controller/service/BUILD | 2 ++ pkg/controller/service/service_controller.go | 10 +++++++--- pkg/features/kube_features.go | 7 +++++++ 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/pkg/controller/service/BUILD b/pkg/controller/service/BUILD index 8e37fd9612c..11766c49ca0 100644 --- a/pkg/controller/service/BUILD +++ b/pkg/controller/service/BUILD @@ -17,12 +17,14 @@ go_library( "//pkg/api/v1/helper:go_default_library", "//pkg/cloudprovider:go_default_library", "//pkg/controller:go_default_library", + "//pkg/features:go_default_library", "//pkg/util/metrics:go_default_library", "//vendor/github.com/golang/glog:go_default_library", "//vendor/k8s.io/api/core/v1:go_default_library", "//vendor/k8s.io/apimachinery/pkg/api/errors:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/runtime:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/wait:go_default_library", + "//vendor/k8s.io/apiserver/pkg/util/feature:go_default_library", "//vendor/k8s.io/client-go/informers/core/v1:go_default_library", "//vendor/k8s.io/client-go/kubernetes:go_default_library", "//vendor/k8s.io/client-go/kubernetes/scheme:go_default_library", diff --git a/pkg/controller/service/service_controller.go b/pkg/controller/service/service_controller.go index f37314b15de..c9590b7a17b 100644 --- a/pkg/controller/service/service_controller.go +++ b/pkg/controller/service/service_controller.go @@ -29,6 +29,7 @@ import ( "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/util/runtime" "k8s.io/apimachinery/pkg/util/wait" + utilfeature "k8s.io/apiserver/pkg/util/feature" coreinformers "k8s.io/client-go/informers/core/v1" clientset "k8s.io/client-go/kubernetes" "k8s.io/client-go/kubernetes/scheme" @@ -40,6 +41,7 @@ import ( v1helper "k8s.io/kubernetes/pkg/api/v1/helper" "k8s.io/kubernetes/pkg/cloudprovider" "k8s.io/kubernetes/pkg/controller" + kubefeatures "k8s.io/kubernetes/pkg/features" "k8s.io/kubernetes/pkg/util/metrics" ) @@ -69,7 +71,7 @@ const ( // LabelNodeRoleExcludeBalancer specifies that the node should be // exclude from load balancers created by a cloud provider. - LabelNodeRoleExcludeBalancer = "alpha.node.role.kubernetes.io/exclude-balancer" + LabelNodeRoleExcludeBalancer = "alpha.service-controller.kubernetes.io/exclude-balancer" ) type cachedService struct { @@ -613,8 +615,10 @@ func getNodeConditionPredicate() corelisters.NodeConditionPredicate { return false } - if _, hasExcludeBalancerLabel := node.Labels[LabelNodeRoleExcludeBalancer]; hasExcludeBalancerLabel { - return false + if utilfeature.DefaultFeatureGate.Enabled(kubefeatures.ServiceNodeExclusion) { + if _, hasExcludeBalancerLabel := node.Labels[LabelNodeRoleExcludeBalancer]; hasExcludeBalancerLabel { + return false + } } // If we have no info, don't accept diff --git a/pkg/features/kube_features.go b/pkg/features/kube_features.go index 7033678cc69..197397c472b 100644 --- a/pkg/features/kube_features.go +++ b/pkg/features/kube_features.go @@ -163,6 +163,12 @@ const ( // // Enable pods to consume pre-allocated huge pages of varying page sizes HugePages utilfeature.Feature = "HugePages" + + // owner @brendandburns + // alpha: v1.8 + // + // Enable nodes to exclude themselves from service load balancers + ServiceNodeExclusion utilfeature.Feature = "ServiceNodeExclusion" ) func init() { @@ -194,6 +200,7 @@ var defaultKubernetesFeatureGates = map[utilfeature.Feature]utilfeature.FeatureS MountPropagation: {Default: false, PreRelease: utilfeature.Alpha}, ExpandPersistentVolumes: {Default: false, PreRelease: utilfeature.Alpha}, CPUManager: {Default: false, PreRelease: utilfeature.Alpha}, + ServiceNodeExclusion: {Default: false, PreRelease: utilfeature.Alpha}, // inherited features from generic apiserver, relisted here to get a conflict if it is changed // unintentionally on either side: