diff --git a/cmd/cloud-controller-manager/app/controllermanager.go b/cmd/cloud-controller-manager/app/controllermanager.go index 8f54fcb766..d5d89c48ce 100644 --- a/cmd/cloud-controller-manager/app/controllermanager.go +++ b/cmd/cloud-controller-manager/app/controllermanager.go @@ -33,13 +33,13 @@ import ( v1core "k8s.io/client-go/kubernetes/typed/core/v1" restclient "k8s.io/client-go/rest" "k8s.io/client-go/tools/clientcmd" + "k8s.io/client-go/tools/leaderelection" + "k8s.io/client-go/tools/leaderelection/resourcelock" "k8s.io/client-go/tools/record" "k8s.io/kubernetes/cmd/cloud-controller-manager/app/options" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" informers "k8s.io/kubernetes/pkg/client/informers/informers_generated/externalversions" - "k8s.io/kubernetes/pkg/client/leaderelection" - "k8s.io/kubernetes/pkg/client/leaderelection/resourcelock" "k8s.io/kubernetes/pkg/cloudprovider" "k8s.io/kubernetes/pkg/controller" nodecontroller "k8s.io/kubernetes/pkg/controller/cloud" diff --git a/cmd/cloud-controller-manager/app/options/options.go b/cmd/cloud-controller-manager/app/options/options.go index 74a5174968..0f5a3e7968 100644 --- a/cmd/cloud-controller-manager/app/options/options.go +++ b/cmd/cloud-controller-manager/app/options/options.go @@ -22,7 +22,7 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" utilfeature "k8s.io/apiserver/pkg/util/feature" "k8s.io/kubernetes/pkg/apis/componentconfig" - "k8s.io/kubernetes/pkg/client/leaderelection" + "k8s.io/kubernetes/pkg/client/leaderelectionconfig" "k8s.io/kubernetes/pkg/master/ports" // add the kubernetes feature gates @@ -56,7 +56,7 @@ func NewCloudControllerManagerServer() *CloudControllerManagerServer { ContentType: "application/vnd.kubernetes.protobuf", KubeAPIQPS: 20.0, KubeAPIBurst: 30, - LeaderElection: leaderelection.DefaultLeaderElectionConfiguration(), + LeaderElection: leaderelectionconfig.DefaultLeaderElectionConfiguration(), ControllerStartInterval: metav1.Duration{Duration: 0 * time.Second}, }, NodeStatusUpdateFrequency: metav1.Duration{Duration: 5 * time.Minute}, @@ -90,7 +90,7 @@ func (s *CloudControllerManagerServer) AddFlags(fs *pflag.FlagSet) { fs.Int32Var(&s.KubeAPIBurst, "kube-api-burst", s.KubeAPIBurst, "Burst to use while talking with kubernetes apiserver") fs.DurationVar(&s.ControllerStartInterval.Duration, "controller-start-interval", s.ControllerStartInterval.Duration, "Interval between starting controller managers.") - leaderelection.BindFlags(&s.LeaderElection, fs) + leaderelectionconfig.BindFlags(&s.LeaderElection, fs) utilfeature.DefaultFeatureGate.AddFlag(fs) } diff --git a/cmd/kube-controller-manager/app/controllermanager.go b/cmd/kube-controller-manager/app/controllermanager.go index e9a54a3729..79a2728736 100644 --- a/cmd/kube-controller-manager/app/controllermanager.go +++ b/cmd/kube-controller-manager/app/controllermanager.go @@ -46,12 +46,12 @@ import ( "k8s.io/client-go/tools/record" certutil "k8s.io/client-go/util/cert" + "k8s.io/client-go/tools/leaderelection" + "k8s.io/client-go/tools/leaderelection/resourcelock" "k8s.io/kubernetes/cmd/kube-controller-manager/app/options" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" informers "k8s.io/kubernetes/pkg/client/informers/informers_generated/externalversions" - "k8s.io/kubernetes/pkg/client/leaderelection" - "k8s.io/kubernetes/pkg/client/leaderelection/resourcelock" "k8s.io/kubernetes/pkg/cloudprovider" "k8s.io/kubernetes/pkg/controller" serviceaccountcontroller "k8s.io/kubernetes/pkg/controller/serviceaccount" diff --git a/cmd/kube-controller-manager/app/options/options.go b/cmd/kube-controller-manager/app/options/options.go index dec8d1f1ad..895e4d67ad 100644 --- a/cmd/kube-controller-manager/app/options/options.go +++ b/cmd/kube-controller-manager/app/options/options.go @@ -28,7 +28,7 @@ import ( "k8s.io/apimachinery/pkg/util/sets" utilfeature "k8s.io/apiserver/pkg/util/feature" "k8s.io/kubernetes/pkg/apis/componentconfig" - "k8s.io/kubernetes/pkg/client/leaderelection" + "k8s.io/kubernetes/pkg/client/leaderelectionconfig" "k8s.io/kubernetes/pkg/controller/garbagecollector" "k8s.io/kubernetes/pkg/master/ports" @@ -106,7 +106,7 @@ func NewCMServer() *CMServer { ContentType: "application/vnd.kubernetes.protobuf", KubeAPIQPS: 20.0, KubeAPIBurst: 30, - LeaderElection: leaderelection.DefaultLeaderElectionConfiguration(), + LeaderElection: leaderelectionconfig.DefaultLeaderElectionConfiguration(), ControllerStartInterval: metav1.Duration{Duration: 0 * time.Second}, EnableGarbageCollector: true, ConcurrentGCSyncs: 20, @@ -227,7 +227,7 @@ func (s *CMServer) AddFlags(fs *pflag.FlagSet, allControllers []string, disabled fs.BoolVar(&s.EnableTaintManager, "enable-taint-manager", s.EnableTaintManager, "WARNING: Beta feature. If set to true enables NoExecute Taints and will evict all not-tolerating Pod running on Nodes tainted with this kind of Taints.") fs.BoolVar(&s.HorizontalPodAutoscalerUseRESTClients, "horizontal-pod-autoscaler-use-rest-clients", s.HorizontalPodAutoscalerUseRESTClients, "WARNING: alpha feature. If set to true, causes the horizontal pod autoscaler controller to use REST clients through the kube-aggregator, instead of using the legacy metrics client through the API server proxy. This is required for custom metrics support in the horizonal pod autoscaler.") - leaderelection.BindFlags(&s.LeaderElection, fs) + leaderelectionconfig.BindFlags(&s.LeaderElection, fs) utilfeature.DefaultFeatureGate.AddFlag(fs) } diff --git a/federation/cmd/federation-controller-manager/app/options/options.go b/federation/cmd/federation-controller-manager/app/options/options.go index 2a6768fcc0..e6659c3697 100644 --- a/federation/cmd/federation-controller-manager/app/options/options.go +++ b/federation/cmd/federation-controller-manager/app/options/options.go @@ -28,7 +28,7 @@ import ( utilflag "k8s.io/apiserver/pkg/util/flag" "k8s.io/kubernetes/federation/pkg/dnsprovider" "k8s.io/kubernetes/pkg/apis/componentconfig" - "k8s.io/kubernetes/pkg/client/leaderelection" + "k8s.io/kubernetes/pkg/client/leaderelectionconfig" ) type ControllerManagerConfiguration struct { @@ -98,7 +98,7 @@ func NewCMServer() *CMServer { ClusterMonitorPeriod: metav1.Duration{Duration: 40 * time.Second}, APIServerQPS: 20.0, APIServerBurst: 30, - LeaderElection: leaderelection.DefaultLeaderElectionConfiguration(), + LeaderElection: leaderelectionconfig.DefaultLeaderElectionConfiguration(), Controllers: make(utilflag.ConfigurationMap), }, } @@ -129,5 +129,5 @@ func (s *CMServer) AddFlags(fs *pflag.FlagSet) { "A set of key=value pairs that describe controller configuration "+ "to enable/disable specific controllers. Key should be the resource name (like services) and value should be true or false. "+ "For example: services=false,ingresses=false") - leaderelection.BindFlags(&s.LeaderElection, fs) + leaderelectionconfig.BindFlags(&s.LeaderElection, fs) } diff --git a/pkg/client/leaderelectionconfig/config.go b/pkg/client/leaderelectionconfig/config.go new file mode 100644 index 0000000000..626f43229c --- /dev/null +++ b/pkg/client/leaderelectionconfig/config.go @@ -0,0 +1,66 @@ +/* +Copyright 2017 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package leaderelectionconfig + +import ( + "time" + + "github.com/spf13/pflag" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + rl "k8s.io/client-go/tools/leaderelection/resourcelock" + "k8s.io/kubernetes/pkg/apis/componentconfig" +) + +const ( + DefaultLeaseDuration = 15 * time.Second + DefaultRenewDeadline = 10 * time.Second + DefaultRetryPeriod = 2 * time.Second +) + +func DefaultLeaderElectionConfiguration() componentconfig.LeaderElectionConfiguration { + return componentconfig.LeaderElectionConfiguration{ + LeaderElect: false, + LeaseDuration: metav1.Duration{Duration: DefaultLeaseDuration}, + RenewDeadline: metav1.Duration{Duration: DefaultRenewDeadline}, + RetryPeriod: metav1.Duration{Duration: DefaultRetryPeriod}, + ResourceLock: rl.EndpointsResourceLock, + } +} + +// BindFlags binds the common LeaderElectionCLIConfig flags to a flagset +func BindFlags(l *componentconfig.LeaderElectionConfiguration, fs *pflag.FlagSet) { + fs.BoolVar(&l.LeaderElect, "leader-elect", l.LeaderElect, ""+ + "Start a leader election client and gain leadership before "+ + "executing the main loop. Enable this when running replicated "+ + "components for high availability.") + fs.DurationVar(&l.LeaseDuration.Duration, "leader-elect-lease-duration", l.LeaseDuration.Duration, ""+ + "The duration that non-leader candidates will wait after observing a leadership "+ + "renewal until attempting to acquire leadership of a led but unrenewed leader "+ + "slot. This is effectively the maximum duration that a leader can be stopped "+ + "before it is replaced by another candidate. This is only applicable if leader "+ + "election is enabled.") + fs.DurationVar(&l.RenewDeadline.Duration, "leader-elect-renew-deadline", l.RenewDeadline.Duration, ""+ + "The interval between attempts by the acting master to renew a leadership slot "+ + "before it stops leading. This must be less than or equal to the lease duration. "+ + "This is only applicable if leader election is enabled.") + fs.DurationVar(&l.RetryPeriod.Duration, "leader-elect-retry-period", l.RetryPeriod.Duration, ""+ + "The duration the clients should wait between attempting acquisition and renewal "+ + "of a leadership. This is only applicable if leader election is enabled.") + fs.StringVar(&l.ResourceLock, "leader-elect-resource-lock", l.ResourceLock, ""+ + "The type of resource resource object that is used for locking during"+ + "leader election. Supported options are `endpoints` (default) and `configmap`.") +} diff --git a/pkg/controller/endpoint/endpoints_controller.go b/pkg/controller/endpoint/endpoints_controller.go index 27d43f11bc..00ff8193de 100644 --- a/pkg/controller/endpoint/endpoints_controller.go +++ b/pkg/controller/endpoint/endpoints_controller.go @@ -30,13 +30,13 @@ import ( "k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/util/wait" "k8s.io/client-go/tools/cache" + "k8s.io/client-go/tools/leaderelection/resourcelock" "k8s.io/client-go/util/workqueue" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/v1/endpoints" podutil "k8s.io/kubernetes/pkg/api/v1/pod" "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" coreinformers "k8s.io/kubernetes/pkg/client/informers/informers_generated/externalversions/core/v1" - "k8s.io/kubernetes/pkg/client/leaderelection/resourcelock" corelisters "k8s.io/kubernetes/pkg/client/listers/core/v1" "k8s.io/kubernetes/pkg/controller" "k8s.io/kubernetes/pkg/util/metrics" diff --git a/plugin/cmd/kube-scheduler/app/options/options.go b/plugin/cmd/kube-scheduler/app/options/options.go index 9c00323e31..a1c30cc30b 100644 --- a/plugin/cmd/kube-scheduler/app/options/options.go +++ b/plugin/cmd/kube-scheduler/app/options/options.go @@ -24,7 +24,7 @@ import ( "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/apis/componentconfig" "k8s.io/kubernetes/pkg/apis/componentconfig/v1alpha1" - "k8s.io/kubernetes/pkg/client/leaderelection" + "k8s.io/kubernetes/pkg/client/leaderelectionconfig" kubeletapis "k8s.io/kubernetes/pkg/kubelet/apis" "k8s.io/kubernetes/plugin/pkg/scheduler/factory" @@ -91,6 +91,6 @@ func (s *SchedulerServer) AddFlags(fs *pflag.FlagSet) { fs.MarkDeprecated("hard-pod-affinity-symmetric-weight", "This option was moved to the policy configuration file") fs.StringVar(&s.FailureDomains, "failure-domains", kubeletapis.DefaultFailureDomains, "Indicate the \"all topologies\" set for an empty topologyKey when it's used for PreferredDuringScheduling pod anti-affinity.") fs.MarkDeprecated("failure-domains", "Doesn't have any effect. Will be removed in future version.") - leaderelection.BindFlags(&s.LeaderElection, fs) + leaderelectionconfig.BindFlags(&s.LeaderElection, fs) utilfeature.DefaultFeatureGate.AddFlag(fs) } diff --git a/plugin/cmd/kube-scheduler/app/server.go b/plugin/cmd/kube-scheduler/app/server.go index 653e3398f4..06f7708bad 100644 --- a/plugin/cmd/kube-scheduler/app/server.go +++ b/plugin/cmd/kube-scheduler/app/server.go @@ -28,9 +28,9 @@ import ( "k8s.io/apiserver/pkg/server/healthz" + "k8s.io/client-go/tools/leaderelection" + "k8s.io/client-go/tools/leaderelection/resourcelock" informers "k8s.io/kubernetes/pkg/client/informers/informers_generated/externalversions" - "k8s.io/kubernetes/pkg/client/leaderelection" - "k8s.io/kubernetes/pkg/client/leaderelection/resourcelock" "k8s.io/kubernetes/pkg/controller" "k8s.io/kubernetes/pkg/util/configz" "k8s.io/kubernetes/plugin/cmd/kube-scheduler/app/options" diff --git a/pkg/client/leaderelection/BUILD b/staging/src/k8s.io/client-go/tools/leaderelection/BUILD similarity index 100% rename from pkg/client/leaderelection/BUILD rename to staging/src/k8s.io/client-go/tools/leaderelection/BUILD diff --git a/pkg/client/leaderelection/OWNERS b/staging/src/k8s.io/client-go/tools/leaderelection/OWNERS similarity index 100% rename from pkg/client/leaderelection/OWNERS rename to staging/src/k8s.io/client-go/tools/leaderelection/OWNERS diff --git a/pkg/client/leaderelection/leaderelection.go b/staging/src/k8s.io/client-go/tools/leaderelection/leaderelection.go similarity index 80% rename from pkg/client/leaderelection/leaderelection.go rename to staging/src/k8s.io/client-go/tools/leaderelection/leaderelection.go index 8a526ad451..249640b31b 100644 --- a/pkg/client/leaderelection/leaderelection.go +++ b/staging/src/k8s.io/client-go/tools/leaderelection/leaderelection.go @@ -57,18 +57,13 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/util/runtime" "k8s.io/apimachinery/pkg/util/wait" - "k8s.io/kubernetes/pkg/apis/componentconfig" - rl "k8s.io/kubernetes/pkg/client/leaderelection/resourcelock" + rl "k8s.io/client-go/tools/leaderelection/resourcelock" "github.com/golang/glog" - "github.com/spf13/pflag" ) const ( - JitterFactor = 1.2 - DefaultLeaseDuration = 15 * time.Second - DefaultRenewDeadline = 10 * time.Second - DefaultRetryPeriod = 2 * time.Second + JitterFactor = 1.2 ) // NewLeaderElector creates a LeaderElector from a LeaderElectionConfig @@ -277,37 +272,3 @@ func (l *LeaderElector) maybeReportTransition() { go l.config.Callbacks.OnNewLeader(l.reportedLeader) } } - -func DefaultLeaderElectionConfiguration() componentconfig.LeaderElectionConfiguration { - return componentconfig.LeaderElectionConfiguration{ - LeaderElect: false, - LeaseDuration: metav1.Duration{Duration: DefaultLeaseDuration}, - RenewDeadline: metav1.Duration{Duration: DefaultRenewDeadline}, - RetryPeriod: metav1.Duration{Duration: DefaultRetryPeriod}, - ResourceLock: rl.EndpointsResourceLock, - } -} - -// BindFlags binds the common LeaderElectionCLIConfig flags to a flagset -func BindFlags(l *componentconfig.LeaderElectionConfiguration, fs *pflag.FlagSet) { - fs.BoolVar(&l.LeaderElect, "leader-elect", l.LeaderElect, ""+ - "Start a leader election client and gain leadership before "+ - "executing the main loop. Enable this when running replicated "+ - "components for high availability.") - fs.DurationVar(&l.LeaseDuration.Duration, "leader-elect-lease-duration", l.LeaseDuration.Duration, ""+ - "The duration that non-leader candidates will wait after observing a leadership "+ - "renewal until attempting to acquire leadership of a led but unrenewed leader "+ - "slot. This is effectively the maximum duration that a leader can be stopped "+ - "before it is replaced by another candidate. This is only applicable if leader "+ - "election is enabled.") - fs.DurationVar(&l.RenewDeadline.Duration, "leader-elect-renew-deadline", l.RenewDeadline.Duration, ""+ - "The interval between attempts by the acting master to renew a leadership slot "+ - "before it stops leading. This must be less than or equal to the lease duration. "+ - "This is only applicable if leader election is enabled.") - fs.DurationVar(&l.RetryPeriod.Duration, "leader-elect-retry-period", l.RetryPeriod.Duration, ""+ - "The duration the clients should wait between attempting acquisition and renewal "+ - "of a leadership. This is only applicable if leader election is enabled.") - fs.StringVar(&l.ResourceLock, "leader-elect-resource-lock", l.ResourceLock, ""+ - "The type of resource resource object that is used for locking during"+ - "leader election. Supported options are `endpoints` (default) and `configmap`.") -} diff --git a/pkg/client/leaderelection/leaderelection_test.go b/staging/src/k8s.io/client-go/tools/leaderelection/leaderelection_test.go similarity index 98% rename from pkg/client/leaderelection/leaderelection_test.go rename to staging/src/k8s.io/client-go/tools/leaderelection/leaderelection_test.go index 5f6819548f..5e58646316 100644 --- a/pkg/client/leaderelection/leaderelection_test.go +++ b/staging/src/k8s.io/client-go/tools/leaderelection/leaderelection_test.go @@ -26,10 +26,10 @@ import ( "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" + fakecorev1 "k8s.io/client-go/kubernetes/typed/core/v1/fake" core "k8s.io/client-go/testing" + rl "k8s.io/client-go/tools/leaderelection/resourcelock" "k8s.io/client-go/tools/record" - fakecorev1 "k8s.io/kubernetes/pkg/client/clientset_generated/clientset/typed/core/v1/fake" - rl "k8s.io/kubernetes/pkg/client/leaderelection/resourcelock" ) func createLockObject(objectType string, objectMeta metav1.ObjectMeta) (obj runtime.Object) { diff --git a/pkg/client/leaderelection/resourcelock/BUILD b/staging/src/k8s.io/client-go/tools/leaderelection/resourcelock/BUILD similarity index 100% rename from pkg/client/leaderelection/resourcelock/BUILD rename to staging/src/k8s.io/client-go/tools/leaderelection/resourcelock/BUILD diff --git a/pkg/client/leaderelection/resourcelock/configmaplock.go b/staging/src/k8s.io/client-go/tools/leaderelection/resourcelock/configmaplock.go similarity index 97% rename from pkg/client/leaderelection/resourcelock/configmaplock.go rename to staging/src/k8s.io/client-go/tools/leaderelection/resourcelock/configmaplock.go index 55235e56e9..69e8c5a7a0 100644 --- a/pkg/client/leaderelection/resourcelock/configmaplock.go +++ b/staging/src/k8s.io/client-go/tools/leaderelection/resourcelock/configmaplock.go @@ -23,7 +23,7 @@ import ( "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - corev1client "k8s.io/kubernetes/pkg/client/clientset_generated/clientset/typed/core/v1" + corev1client "k8s.io/client-go/kubernetes/typed/core/v1" ) // TODO: This is almost a exact replica of Endpoints lock. diff --git a/pkg/client/leaderelection/resourcelock/endpointslock.go b/staging/src/k8s.io/client-go/tools/leaderelection/resourcelock/endpointslock.go similarity index 97% rename from pkg/client/leaderelection/resourcelock/endpointslock.go rename to staging/src/k8s.io/client-go/tools/leaderelection/resourcelock/endpointslock.go index 144c7a1c14..6f7dcfb0cc 100644 --- a/pkg/client/leaderelection/resourcelock/endpointslock.go +++ b/staging/src/k8s.io/client-go/tools/leaderelection/resourcelock/endpointslock.go @@ -23,7 +23,7 @@ import ( "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - corev1client "k8s.io/kubernetes/pkg/client/clientset_generated/clientset/typed/core/v1" + corev1client "k8s.io/client-go/kubernetes/typed/core/v1" ) type EndpointsLock struct { diff --git a/pkg/client/leaderelection/resourcelock/interface.go b/staging/src/k8s.io/client-go/tools/leaderelection/resourcelock/interface.go similarity index 98% rename from pkg/client/leaderelection/resourcelock/interface.go rename to staging/src/k8s.io/client-go/tools/leaderelection/resourcelock/interface.go index 6e9d5ce54e..a6ea691742 100644 --- a/pkg/client/leaderelection/resourcelock/interface.go +++ b/staging/src/k8s.io/client-go/tools/leaderelection/resourcelock/interface.go @@ -20,8 +20,8 @@ import ( "fmt" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + cs "k8s.io/client-go/kubernetes" "k8s.io/client-go/tools/record" - cs "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" ) const ( diff --git a/test/test_owners.csv b/test/test_owners.csv index 236d70a4ae..abcafc00c3 100644 --- a/test/test_owners.csv +++ b/test/test_owners.csv @@ -645,7 +645,7 @@ k8s.io/kubernetes/pkg/apis/rbac/validation,erictune,0, k8s.io/kubernetes/pkg/apis/storage/validation,caesarxuchao,1, k8s.io/kubernetes/pkg/auth/authorizer/abac,liggitt,0, k8s.io/kubernetes/pkg/client/chaosclient,deads2k,1, -k8s.io/kubernetes/pkg/client/leaderelection,xiang90,1, +k8s.io/client-go/tools/leaderelection,xiang90,1, k8s.io/kubernetes/pkg/client/legacylisters,jsafrane,1, k8s.io/kubernetes/pkg/client/listers/batch/internalversion,mqliang,0, k8s.io/kubernetes/pkg/client/listers/extensions/internalversion,eparis,1,