From 24d5279c59f1285fa8f589599d937ebee24f7ea4 Mon Sep 17 00:00:00 2001 From: Chao Xu Date: Fri, 7 Jul 2017 13:59:32 -0700 Subject: [PATCH 1/4] move leaderelection package to client-go --- .../app/controllermanager.go | 4 +- .../app/options/options.go | 6 +- .../app/controllermanager.go | 4 +- .../app/options/options.go | 6 +- .../app/options/options.go | 6 +- pkg/client/leaderelectionconfig/config.go | 66 +++++++++++++++++++ .../endpoint/endpoints_controller.go | 2 +- .../cmd/kube-scheduler/app/options/options.go | 4 +- plugin/cmd/kube-scheduler/app/server.go | 4 +- .../client-go/tools}/leaderelection/BUILD | 0 .../client-go/tools}/leaderelection/OWNERS | 0 .../tools}/leaderelection/leaderelection.go | 43 +----------- .../leaderelection/leaderelection_test.go | 4 +- .../tools}/leaderelection/resourcelock/BUILD | 0 .../resourcelock/configmaplock.go | 2 +- .../resourcelock/endpointslock.go | 2 +- .../leaderelection/resourcelock/interface.go | 2 +- test/test_owners.csv | 2 +- 18 files changed, 92 insertions(+), 65 deletions(-) create mode 100644 pkg/client/leaderelectionconfig/config.go rename {pkg/client => staging/src/k8s.io/client-go/tools}/leaderelection/BUILD (100%) rename {pkg/client => staging/src/k8s.io/client-go/tools}/leaderelection/OWNERS (100%) rename {pkg/client => staging/src/k8s.io/client-go/tools}/leaderelection/leaderelection.go (80%) rename {pkg/client => staging/src/k8s.io/client-go/tools}/leaderelection/leaderelection_test.go (98%) rename {pkg/client => staging/src/k8s.io/client-go/tools}/leaderelection/resourcelock/BUILD (100%) rename {pkg/client => staging/src/k8s.io/client-go/tools}/leaderelection/resourcelock/configmaplock.go (97%) rename {pkg/client => staging/src/k8s.io/client-go/tools}/leaderelection/resourcelock/endpointslock.go (97%) rename {pkg/client => staging/src/k8s.io/client-go/tools}/leaderelection/resourcelock/interface.go (98%) diff --git a/cmd/cloud-controller-manager/app/controllermanager.go b/cmd/cloud-controller-manager/app/controllermanager.go index 8f54fcb766e..d5d89c48cea 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 74a51749680..0f5a3e79689 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 e9a54a37296..79a27287365 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 dec8d1f1adc..895e4d67ad4 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 2a6768fcc0f..e6659c36977 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 00000000000..626f43229ca --- /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 27d43f11bc3..00ff8193de8 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 9c00323e317..a1c30cc30b5 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 653e3398f49..06f7708bad7 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 8a526ad451b..249640b31b4 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 5f6819548fa..5e58646316f 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 55235e56e9e..69e8c5a7a09 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 144c7a1c141..6f7dcfb0cc9 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 6e9d5ce54e4..a6ea6917423 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 236d70a4ae8..abcafc00c32 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, From 56de7e702e6fc2d2d09d1b5f2c79e37f9f4d0190 Mon Sep 17 00:00:00 2001 From: Chao Xu Date: Fri, 7 Jul 2017 17:19:03 -0700 Subject: [PATCH 2/4] obvious fix --- cmd/cloud-controller-manager/app/controllermanager.go | 3 ++- cmd/kube-controller-manager/app/controllermanager.go | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/cmd/cloud-controller-manager/app/controllermanager.go b/cmd/cloud-controller-manager/app/controllermanager.go index d5d89c48cea..c4297c16855 100644 --- a/cmd/cloud-controller-manager/app/controllermanager.go +++ b/cmd/cloud-controller-manager/app/controllermanager.go @@ -30,6 +30,7 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/util/wait" "k8s.io/apiserver/pkg/server/healthz" + "k8s.io/client-go/kubernetes" v1core "k8s.io/client-go/kubernetes/typed/core/v1" restclient "k8s.io/client-go/rest" "k8s.io/client-go/tools/clientcmd" @@ -102,7 +103,7 @@ func Run(s *options.CloudControllerManagerServer, cloud cloudprovider.Interface) if err != nil { glog.Fatalf("Invalid API configuration: %v", err) } - leaderElectionClient := clientset.NewForConfigOrDie(restclient.AddUserAgent(kubeconfig, "leader-election")) + leaderElectionClient := kubernetes.NewForConfigOrDie(restclient.AddUserAgent(kubeconfig, "leader-election")) // Start the external controller manager server go func() { diff --git a/cmd/kube-controller-manager/app/controllermanager.go b/cmd/kube-controller-manager/app/controllermanager.go index 79a27287365..9147a1130d9 100644 --- a/cmd/kube-controller-manager/app/controllermanager.go +++ b/cmd/kube-controller-manager/app/controllermanager.go @@ -40,6 +40,7 @@ import ( clientv1 "k8s.io/api/core/v1" "k8s.io/client-go/discovery" + "k8s.io/client-go/kubernetes" v1core "k8s.io/client-go/kubernetes/typed/core/v1" restclient "k8s.io/client-go/rest" "k8s.io/client-go/tools/clientcmd" @@ -127,7 +128,7 @@ func Run(s *options.CMServer) error { if err != nil { glog.Fatalf("Invalid API configuration: %v", err) } - leaderElectionClient := clientset.NewForConfigOrDie(restclient.AddUserAgent(kubeconfig, "leader-election")) + leaderElectionClient := kubernetes.NewForConfigOrDie(restclient.AddUserAgent(kubeconfig, "leader-election")) go func() { mux := http.NewServeMux() From 016963b955e8cfdb941c975eff315c993261101c Mon Sep 17 00:00:00 2001 From: Chao Xu Date: Fri, 7 Jul 2017 19:03:20 -0700 Subject: [PATCH 3/4] let scheduler use client-go's client when initilaizer leaderelection --- plugin/cmd/kube-scheduler/app/configurator.go | 14 ++++++++++---- plugin/cmd/kube-scheduler/app/server.go | 4 ++-- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/plugin/cmd/kube-scheduler/app/configurator.go b/plugin/cmd/kube-scheduler/app/configurator.go index 7b0871cb30c..7acb0ba98b0 100644 --- a/plugin/cmd/kube-scheduler/app/configurator.go +++ b/plugin/cmd/kube-scheduler/app/configurator.go @@ -28,6 +28,7 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" + "k8s.io/client-go/kubernetes" v1core "k8s.io/client-go/kubernetes/typed/core/v1" restclient "k8s.io/client-go/rest" @@ -54,10 +55,11 @@ func createRecorder(kubecli *clientset.Clientset, s *options.SchedulerServer) re return eventBroadcaster.NewRecorder(api.Scheme, clientv1.EventSource{Component: s.SchedulerName}) } -func createClient(s *options.SchedulerServer) (*clientset.Clientset, error) { +// TODO: convert scheduler to only use client-go's clientset. +func createClient(s *options.SchedulerServer) (*clientset.Clientset, *kubernetes.Clientset, error) { kubeconfig, err := clientcmd.BuildConfigFromFlags(s.Master, s.Kubeconfig) if err != nil { - return nil, fmt.Errorf("unable to build config from flags: %v", err) + return nil, nil, fmt.Errorf("unable to build config from flags: %v", err) } kubeconfig.ContentType = s.ContentType @@ -67,9 +69,13 @@ func createClient(s *options.SchedulerServer) (*clientset.Clientset, error) { cli, err := clientset.NewForConfig(restclient.AddUserAgent(kubeconfig, "leader-election")) if err != nil { - return nil, fmt.Errorf("invalid API configuration: %v", err) + return nil, nil, fmt.Errorf("invalid API configuration: %v", err) } - return cli, nil + clientgoCli, err := kubernetes.NewForConfig(restclient.AddUserAgent(kubeconfig, "leader-election")) + if err != nil { + return nil, nil, fmt.Errorf("invalid API configuration: %v", err) + } + return cli, clientgoCli, nil } // CreateScheduler encapsulates the entire creation of a runnable scheduler. diff --git a/plugin/cmd/kube-scheduler/app/server.go b/plugin/cmd/kube-scheduler/app/server.go index 06f7708bad7..8e369931fb1 100644 --- a/plugin/cmd/kube-scheduler/app/server.go +++ b/plugin/cmd/kube-scheduler/app/server.go @@ -65,7 +65,7 @@ through the API as necessary.`, // Run runs the specified SchedulerServer. This should never exit. func Run(s *options.SchedulerServer) error { - kubecli, err := createClient(s) + kubecli, clientgoCli, err := createClient(s) if err != nil { return fmt.Errorf("unable to create kube client: %v", err) } @@ -121,7 +121,7 @@ func Run(s *options.SchedulerServer) error { rl, err := resourcelock.New(s.LeaderElection.ResourceLock, s.LockObjectNamespace, s.LockObjectName, - kubecli, + clientgoCli, resourcelock.ResourceLockConfig{ Identity: id, EventRecorder: recorder, From 65cedeeb433638a977ad8d1be9870c2567671f04 Mon Sep 17 00:00:00 2001 From: Chao Xu Date: Fri, 7 Jul 2017 14:04:25 -0700 Subject: [PATCH 4/4] update bazel --- cmd/cloud-controller-manager/app/BUILD | 5 +-- .../app/options/BUILD | 2 +- cmd/kube-controller-manager/app/BUILD | 5 +-- cmd/kube-controller-manager/app/options/BUILD | 2 +- .../app/options/BUILD | 2 +- pkg/BUILD | 2 +- pkg/client/leaderelectionconfig/BUILD | 33 +++++++++++++++++++ pkg/controller/endpoint/BUILD | 2 +- plugin/cmd/kube-scheduler/app/BUILD | 5 +-- plugin/cmd/kube-scheduler/app/options/BUILD | 2 +- .../client-go/tools/leaderelection/BUILD | 24 ++------------ .../tools/leaderelection/resourcelock/BUILD | 17 ++-------- 12 files changed, 53 insertions(+), 48 deletions(-) create mode 100644 pkg/client/leaderelectionconfig/BUILD diff --git a/cmd/cloud-controller-manager/app/BUILD b/cmd/cloud-controller-manager/app/BUILD index d0a20816d9f..31ccc737252 100644 --- a/cmd/cloud-controller-manager/app/BUILD +++ b/cmd/cloud-controller-manager/app/BUILD @@ -16,8 +16,6 @@ go_library( "//pkg/api:go_default_library", "//pkg/client/clientset_generated/clientset:go_default_library", "//pkg/client/informers/informers_generated/externalversions:go_default_library", - "//pkg/client/leaderelection:go_default_library", - "//pkg/client/leaderelection/resourcelock:go_default_library", "//pkg/cloudprovider:go_default_library", "//pkg/controller:go_default_library", "//pkg/controller/cloud:go_default_library", @@ -32,9 +30,12 @@ go_library( "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/wait:go_default_library", "//vendor/k8s.io/apiserver/pkg/server/healthz:go_default_library", + "//vendor/k8s.io/client-go/kubernetes:go_default_library", "//vendor/k8s.io/client-go/kubernetes/typed/core/v1:go_default_library", "//vendor/k8s.io/client-go/rest:go_default_library", "//vendor/k8s.io/client-go/tools/clientcmd:go_default_library", + "//vendor/k8s.io/client-go/tools/leaderelection:go_default_library", + "//vendor/k8s.io/client-go/tools/leaderelection/resourcelock:go_default_library", "//vendor/k8s.io/client-go/tools/record:go_default_library", ], ) diff --git a/cmd/cloud-controller-manager/app/options/BUILD b/cmd/cloud-controller-manager/app/options/BUILD index aa17941dbe9..94a6333d054 100644 --- a/cmd/cloud-controller-manager/app/options/BUILD +++ b/cmd/cloud-controller-manager/app/options/BUILD @@ -13,7 +13,7 @@ go_library( tags = ["automanaged"], deps = [ "//pkg/apis/componentconfig:go_default_library", - "//pkg/client/leaderelection:go_default_library", + "//pkg/client/leaderelectionconfig:go_default_library", "//pkg/features:go_default_library", "//pkg/master/ports:go_default_library", "//vendor/github.com/spf13/pflag:go_default_library", diff --git a/cmd/kube-controller-manager/app/BUILD b/cmd/kube-controller-manager/app/BUILD index 6ca5640a9a4..4003b04fce1 100644 --- a/cmd/kube-controller-manager/app/BUILD +++ b/cmd/kube-controller-manager/app/BUILD @@ -30,8 +30,6 @@ go_library( "//pkg/apis/componentconfig:go_default_library", "//pkg/client/clientset_generated/clientset:go_default_library", "//pkg/client/informers/informers_generated/externalversions:go_default_library", - "//pkg/client/leaderelection:go_default_library", - "//pkg/client/leaderelection/resourcelock:go_default_library", "//pkg/cloudprovider:go_default_library", "//pkg/cloudprovider/providers:go_default_library", "//pkg/cloudprovider/providers/aws:go_default_library", @@ -105,9 +103,12 @@ go_library( "//vendor/k8s.io/apiserver/pkg/util/feature:go_default_library", "//vendor/k8s.io/client-go/discovery:go_default_library", "//vendor/k8s.io/client-go/dynamic:go_default_library", + "//vendor/k8s.io/client-go/kubernetes:go_default_library", "//vendor/k8s.io/client-go/kubernetes/typed/core/v1:go_default_library", "//vendor/k8s.io/client-go/rest:go_default_library", "//vendor/k8s.io/client-go/tools/clientcmd:go_default_library", + "//vendor/k8s.io/client-go/tools/leaderelection:go_default_library", + "//vendor/k8s.io/client-go/tools/leaderelection/resourcelock:go_default_library", "//vendor/k8s.io/client-go/tools/record:go_default_library", "//vendor/k8s.io/client-go/util/cert:go_default_library", "//vendor/k8s.io/metrics/pkg/client/clientset_generated/clientset/typed/metrics/v1alpha1:go_default_library", diff --git a/cmd/kube-controller-manager/app/options/BUILD b/cmd/kube-controller-manager/app/options/BUILD index 95a03df4fe9..39f587d08a7 100644 --- a/cmd/kube-controller-manager/app/options/BUILD +++ b/cmd/kube-controller-manager/app/options/BUILD @@ -13,7 +13,7 @@ go_library( tags = ["automanaged"], deps = [ "//pkg/apis/componentconfig:go_default_library", - "//pkg/client/leaderelection:go_default_library", + "//pkg/client/leaderelectionconfig:go_default_library", "//pkg/controller/garbagecollector:go_default_library", "//pkg/features:go_default_library", "//pkg/master/ports:go_default_library", diff --git a/federation/cmd/federation-controller-manager/app/options/BUILD b/federation/cmd/federation-controller-manager/app/options/BUILD index 12379369987..72e4bdfcde4 100644 --- a/federation/cmd/federation-controller-manager/app/options/BUILD +++ b/federation/cmd/federation-controller-manager/app/options/BUILD @@ -14,7 +14,7 @@ go_library( deps = [ "//federation/pkg/dnsprovider:go_default_library", "//pkg/apis/componentconfig:go_default_library", - "//pkg/client/leaderelection:go_default_library", + "//pkg/client/leaderelectionconfig:go_default_library", "//vendor/github.com/spf13/pflag:go_default_library", "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//vendor/k8s.io/apiserver/pkg/util/flag:go_default_library", diff --git a/pkg/BUILD b/pkg/BUILD index b7edeac6d32..e1a6f98a96e 100644 --- a/pkg/BUILD +++ b/pkg/BUILD @@ -44,7 +44,7 @@ filegroup( "//pkg/client/conditions:all-srcs", "//pkg/client/informers/informers_generated/externalversions:all-srcs", "//pkg/client/informers/informers_generated/internalversion:all-srcs", - "//pkg/client/leaderelection:all-srcs", + "//pkg/client/leaderelectionconfig:all-srcs", "//pkg/client/listers/admissionregistration/internalversion:all-srcs", "//pkg/client/listers/admissionregistration/v1alpha1:all-srcs", "//pkg/client/listers/apps/internalversion:all-srcs", diff --git a/pkg/client/leaderelectionconfig/BUILD b/pkg/client/leaderelectionconfig/BUILD new file mode 100644 index 00000000000..17dc8e1376f --- /dev/null +++ b/pkg/client/leaderelectionconfig/BUILD @@ -0,0 +1,33 @@ +package(default_visibility = ["//visibility:public"]) + +licenses(["notice"]) + +load( + "@io_bazel_rules_go//go:def.bzl", + "go_library", +) + +go_library( + name = "go_default_library", + srcs = ["config.go"], + tags = ["automanaged"], + deps = [ + "//pkg/apis/componentconfig:go_default_library", + "//vendor/github.com/spf13/pflag:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", + "//vendor/k8s.io/client-go/tools/leaderelection/resourcelock:go_default_library", + ], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [":package-srcs"], + tags = ["automanaged"], +) diff --git a/pkg/controller/endpoint/BUILD b/pkg/controller/endpoint/BUILD index 73c88318711..b56e9d96020 100644 --- a/pkg/controller/endpoint/BUILD +++ b/pkg/controller/endpoint/BUILD @@ -21,7 +21,6 @@ go_library( "//pkg/api/v1/pod:go_default_library", "//pkg/client/clientset_generated/clientset:go_default_library", "//pkg/client/informers/informers_generated/externalversions/core/v1:go_default_library", - "//pkg/client/leaderelection/resourcelock:go_default_library", "//pkg/client/listers/core/v1:go_default_library", "//pkg/controller:go_default_library", "//pkg/util/metrics:go_default_library", @@ -34,6 +33,7 @@ go_library( "//vendor/k8s.io/apimachinery/pkg/util/sets:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/wait:go_default_library", "//vendor/k8s.io/client-go/tools/cache:go_default_library", + "//vendor/k8s.io/client-go/tools/leaderelection/resourcelock:go_default_library", "//vendor/k8s.io/client-go/util/workqueue:go_default_library", ], ) diff --git a/plugin/cmd/kube-scheduler/app/BUILD b/plugin/cmd/kube-scheduler/app/BUILD index 807faa64bcc..08802b9991c 100644 --- a/plugin/cmd/kube-scheduler/app/BUILD +++ b/plugin/cmd/kube-scheduler/app/BUILD @@ -22,8 +22,6 @@ go_library( "//pkg/client/informers/informers_generated/externalversions/apps/v1beta1:go_default_library", "//pkg/client/informers/informers_generated/externalversions/core/v1:go_default_library", "//pkg/client/informers/informers_generated/externalversions/extensions/v1beta1:go_default_library", - "//pkg/client/leaderelection:go_default_library", - "//pkg/client/leaderelection/resourcelock:go_default_library", "//pkg/controller:go_default_library", "//pkg/util/configz:go_default_library", "//plugin/cmd/kube-scheduler/app/options:go_default_library", @@ -40,9 +38,12 @@ go_library( "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library", "//vendor/k8s.io/apiserver/pkg/server/healthz:go_default_library", + "//vendor/k8s.io/client-go/kubernetes:go_default_library", "//vendor/k8s.io/client-go/kubernetes/typed/core/v1:go_default_library", "//vendor/k8s.io/client-go/rest:go_default_library", "//vendor/k8s.io/client-go/tools/clientcmd:go_default_library", + "//vendor/k8s.io/client-go/tools/leaderelection:go_default_library", + "//vendor/k8s.io/client-go/tools/leaderelection/resourcelock:go_default_library", "//vendor/k8s.io/client-go/tools/record:go_default_library", ], ) diff --git a/plugin/cmd/kube-scheduler/app/options/BUILD b/plugin/cmd/kube-scheduler/app/options/BUILD index 2dd85f4b3ce..6aa7266cf21 100644 --- a/plugin/cmd/kube-scheduler/app/options/BUILD +++ b/plugin/cmd/kube-scheduler/app/options/BUILD @@ -16,7 +16,7 @@ go_library( "//pkg/apis/componentconfig:go_default_library", "//pkg/apis/componentconfig/install:go_default_library", "//pkg/apis/componentconfig/v1alpha1:go_default_library", - "//pkg/client/leaderelection:go_default_library", + "//pkg/client/leaderelectionconfig:go_default_library", "//pkg/features:go_default_library", "//pkg/kubelet/apis:go_default_library", "//plugin/pkg/scheduler/factory:go_default_library", diff --git a/staging/src/k8s.io/client-go/tools/leaderelection/BUILD b/staging/src/k8s.io/client-go/tools/leaderelection/BUILD index 53ef737d051..302b9a1d1e0 100644 --- a/staging/src/k8s.io/client-go/tools/leaderelection/BUILD +++ b/staging/src/k8s.io/client-go/tools/leaderelection/BUILD @@ -13,14 +13,12 @@ go_library( srcs = ["leaderelection.go"], tags = ["automanaged"], deps = [ - "//pkg/apis/componentconfig:go_default_library", - "//pkg/client/leaderelection/resourcelock:go_default_library", "//vendor/github.com/golang/glog:go_default_library", - "//vendor/github.com/spf13/pflag:go_default_library", "//vendor/k8s.io/apimachinery/pkg/api/errors:go_default_library", "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1: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/client-go/tools/leaderelection/resourcelock:go_default_library", ], ) @@ -30,29 +28,13 @@ go_test( library = ":go_default_library", tags = ["automanaged"], deps = [ - "//pkg/client/clientset_generated/clientset/typed/core/v1/fake:go_default_library", - "//pkg/client/leaderelection/resourcelock: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/apis/meta/v1:go_default_library", "//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library", + "//vendor/k8s.io/client-go/kubernetes/typed/core/v1/fake:go_default_library", "//vendor/k8s.io/client-go/testing:go_default_library", + "//vendor/k8s.io/client-go/tools/leaderelection/resourcelock:go_default_library", "//vendor/k8s.io/client-go/tools/record:go_default_library", ], ) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [ - ":package-srcs", - "//pkg/client/leaderelection/resourcelock:all-srcs", - ], - tags = ["automanaged"], -) diff --git a/staging/src/k8s.io/client-go/tools/leaderelection/resourcelock/BUILD b/staging/src/k8s.io/client-go/tools/leaderelection/resourcelock/BUILD index cd0985719bd..d8196354e16 100644 --- a/staging/src/k8s.io/client-go/tools/leaderelection/resourcelock/BUILD +++ b/staging/src/k8s.io/client-go/tools/leaderelection/resourcelock/BUILD @@ -16,23 +16,10 @@ go_library( ], tags = ["automanaged"], deps = [ - "//pkg/client/clientset_generated/clientset:go_default_library", - "//pkg/client/clientset_generated/clientset/typed/core/v1:go_default_library", "//vendor/k8s.io/api/core/v1:go_default_library", "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", + "//vendor/k8s.io/client-go/kubernetes:go_default_library", + "//vendor/k8s.io/client-go/kubernetes/typed/core/v1:go_default_library", "//vendor/k8s.io/client-go/tools/record:go_default_library", ], ) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], -)