From 805c1753cd3b3080be0c2e3181a2852c94ab11a2 Mon Sep 17 00:00:00 2001 From: wojtekt Date: Tue, 8 Sep 2020 08:21:57 +0200 Subject: [PATCH] Migrate scheduler, controller-manager and cloud-controller-manager to lease lock. --- .../app/options/options_test.go | 2 +- cmd/kube-scheduler/app/options/options_test.go | 14 +++++++------- pkg/controller/apis/config/v1alpha1/defaults.go | 5 ++++- pkg/scheduler/apis/config/v1beta1/defaults.go | 5 ++++- pkg/scheduler/apis/config/v1beta1/defaults_test.go | 10 +++++----- .../component-base/config/v1alpha1/defaults.go | 3 ++- 6 files changed, 23 insertions(+), 16 deletions(-) diff --git a/cmd/cloud-controller-manager/app/options/options_test.go b/cmd/cloud-controller-manager/app/options/options_test.go index 272cfca5d01..e8a6ad08844 100644 --- a/cmd/cloud-controller-manager/app/options/options_test.go +++ b/cmd/cloud-controller-manager/app/options/options_test.go @@ -49,7 +49,7 @@ func TestDefaultFlags(t *testing.T) { }, ControllerStartInterval: metav1.Duration{Duration: 0}, LeaderElection: componentbaseconfig.LeaderElectionConfiguration{ - ResourceLock: "endpointsleases", + ResourceLock: "leases", LeaderElect: true, LeaseDuration: metav1.Duration{Duration: 15 * time.Second}, RenewDeadline: metav1.Duration{Duration: 10 * time.Second}, diff --git a/cmd/kube-scheduler/app/options/options_test.go b/cmd/kube-scheduler/app/options/options_test.go index f4ed42afb24..e5f16b4fd4f 100644 --- a/cmd/kube-scheduler/app/options/options_test.go +++ b/cmd/kube-scheduler/app/options/options_test.go @@ -310,7 +310,7 @@ profiles: LeaseDuration: metav1.Duration{Duration: 15 * time.Second}, RenewDeadline: metav1.Duration{Duration: 10 * time.Second}, RetryPeriod: metav1.Duration{Duration: 2 * time.Second}, - ResourceLock: "endpointsleases", + ResourceLock: "leases", ResourceNamespace: "kube-system", ResourceName: "kube-scheduler", }, @@ -407,7 +407,7 @@ profiles: LeaseDuration: metav1.Duration{Duration: 15 * time.Second}, RenewDeadline: metav1.Duration{Duration: 10 * time.Second}, RetryPeriod: metav1.Duration{Duration: 2 * time.Second}, - ResourceLock: "endpointsleases", + ResourceLock: "leases", ResourceNamespace: "kube-system", ResourceName: "kube-scheduler", }, @@ -471,7 +471,7 @@ profiles: LeaseDuration: metav1.Duration{Duration: 15 * time.Second}, RenewDeadline: metav1.Duration{Duration: 10 * time.Second}, RetryPeriod: metav1.Duration{Duration: 2 * time.Second}, - ResourceLock: "endpointsleases", + ResourceLock: "leases", ResourceNamespace: "kube-system", ResourceName: "kube-scheduler", }, @@ -510,7 +510,7 @@ profiles: LeaseDuration: metav1.Duration{Duration: 15 * time.Second}, RenewDeadline: metav1.Duration{Duration: 10 * time.Second}, RetryPeriod: metav1.Duration{Duration: 2 * time.Second}, - ResourceLock: "endpointsleases", + ResourceLock: "leases", ResourceNamespace: "kube-system", ResourceName: "kube-scheduler", }, @@ -584,7 +584,7 @@ profiles: LeaseDuration: metav1.Duration{Duration: 15 * time.Second}, RenewDeadline: metav1.Duration{Duration: 10 * time.Second}, RetryPeriod: metav1.Duration{Duration: 2 * time.Second}, - ResourceLock: "endpointsleases", + ResourceLock: "leases", ResourceNamespace: "kube-system", ResourceName: "kube-scheduler", }, @@ -658,7 +658,7 @@ profiles: LeaseDuration: metav1.Duration{Duration: 15 * time.Second}, RenewDeadline: metav1.Duration{Duration: 10 * time.Second}, RetryPeriod: metav1.Duration{Duration: 2 * time.Second}, - ResourceLock: "endpointsleases", + ResourceLock: "leases", ResourceNamespace: "kube-system", ResourceName: "kube-scheduler", }, @@ -710,7 +710,7 @@ profiles: LeaseDuration: metav1.Duration{Duration: 15 * time.Second}, RenewDeadline: metav1.Duration{Duration: 10 * time.Second}, RetryPeriod: metav1.Duration{Duration: 2 * time.Second}, - ResourceLock: "endpointsleases", + ResourceLock: "leases", ResourceNamespace: "kube-system", ResourceName: "kube-scheduler", }, diff --git a/pkg/controller/apis/config/v1alpha1/defaults.go b/pkg/controller/apis/config/v1alpha1/defaults.go index d97580f8b3a..eea3ac3e7be 100644 --- a/pkg/controller/apis/config/v1alpha1/defaults.go +++ b/pkg/controller/apis/config/v1alpha1/defaults.go @@ -130,7 +130,10 @@ func RecommendedDefaultGenericControllerManagerConfiguration(obj *kubectrlmgrcon } if len(obj.LeaderElection.ResourceLock) == 0 { - obj.LeaderElection.ResourceLock = "endpointsleases" + // Use lease-based leader election to reduce cost. + // We migrated for EndpointsLease lock in 1.17 and starting in 1.20 we + // migrated to Lease lock. + obj.LeaderElection.ResourceLock = "leases" } // Use the default ClientConnectionConfiguration and LeaderElectionConfiguration options diff --git a/pkg/scheduler/apis/config/v1beta1/defaults.go b/pkg/scheduler/apis/config/v1beta1/defaults.go index ebf3b0f2353..0c30a35ca6c 100644 --- a/pkg/scheduler/apis/config/v1beta1/defaults.go +++ b/pkg/scheduler/apis/config/v1beta1/defaults.go @@ -109,7 +109,10 @@ func SetDefaults_KubeSchedulerConfiguration(obj *v1beta1.KubeSchedulerConfigurat } if len(obj.LeaderElection.ResourceLock) == 0 { - obj.LeaderElection.ResourceLock = "endpointsleases" + // Use lease-based leader election to reduce cost. + // We migrated for EndpointsLease lock in 1.17 and starting in 1.20 we + // migrated to Lease lock. + obj.LeaderElection.ResourceLock = "leases" } if len(obj.LeaderElection.ResourceNamespace) == 0 { obj.LeaderElection.ResourceNamespace = v1beta1.SchedulerDefaultLockObjectNamespace diff --git a/pkg/scheduler/apis/config/v1beta1/defaults_test.go b/pkg/scheduler/apis/config/v1beta1/defaults_test.go index f64175664f7..5142d510602 100644 --- a/pkg/scheduler/apis/config/v1beta1/defaults_test.go +++ b/pkg/scheduler/apis/config/v1beta1/defaults_test.go @@ -56,7 +56,7 @@ func TestSchedulerDefaults(t *testing.T) { LeaseDuration: metav1.Duration{Duration: 15 * time.Second}, RenewDeadline: metav1.Duration{Duration: 10 * time.Second}, RetryPeriod: metav1.Duration{Duration: 2 * time.Second}, - ResourceLock: "endpointsleases", + ResourceLock: "leases", ResourceNamespace: "kube-system", ResourceName: "kube-scheduler", }, @@ -96,7 +96,7 @@ func TestSchedulerDefaults(t *testing.T) { LeaseDuration: metav1.Duration{Duration: 15 * time.Second}, RenewDeadline: metav1.Duration{Duration: 10 * time.Second}, RetryPeriod: metav1.Duration{Duration: 2 * time.Second}, - ResourceLock: "endpointsleases", + ResourceLock: "leases", ResourceNamespace: "kube-system", ResourceName: "kube-scheduler", }, @@ -151,7 +151,7 @@ func TestSchedulerDefaults(t *testing.T) { LeaseDuration: metav1.Duration{Duration: 15 * time.Second}, RenewDeadline: metav1.Duration{Duration: 10 * time.Second}, RetryPeriod: metav1.Duration{Duration: 2 * time.Second}, - ResourceLock: "endpointsleases", + ResourceLock: "leases", ResourceNamespace: "kube-system", ResourceName: "kube-scheduler", }, @@ -200,7 +200,7 @@ func TestSchedulerDefaults(t *testing.T) { LeaseDuration: metav1.Duration{Duration: 15 * time.Second}, RenewDeadline: metav1.Duration{Duration: 10 * time.Second}, RetryPeriod: metav1.Duration{Duration: 2 * time.Second}, - ResourceLock: "endpointsleases", + ResourceLock: "leases", ResourceNamespace: "kube-system", ResourceName: "kube-scheduler", }, @@ -235,7 +235,7 @@ func TestSchedulerDefaults(t *testing.T) { LeaseDuration: metav1.Duration{Duration: 15 * time.Second}, RenewDeadline: metav1.Duration{Duration: 10 * time.Second}, RetryPeriod: metav1.Duration{Duration: 2 * time.Second}, - ResourceLock: "endpointsleases", + ResourceLock: "leases", ResourceNamespace: "kube-system", ResourceName: "kube-scheduler", }, diff --git a/staging/src/k8s.io/component-base/config/v1alpha1/defaults.go b/staging/src/k8s.io/component-base/config/v1alpha1/defaults.go index bbf08e11805..098c5739d38 100644 --- a/staging/src/k8s.io/component-base/config/v1alpha1/defaults.go +++ b/staging/src/k8s.io/component-base/config/v1alpha1/defaults.go @@ -44,7 +44,8 @@ func RecommendedDefaultLeaderElectionConfiguration(obj *LeaderElectionConfigurat obj.RetryPeriod = metav1.Duration{Duration: 2 * time.Second} } if obj.ResourceLock == "" { - // TODO: Migrate to LeaseLock. + // TODO(#80289): Figure out how to migrate to LeaseLock at this point. + // This will most probably require going through EndpointsLease first. obj.ResourceLock = EndpointsResourceLock } if obj.LeaderElect == nil {