From 995a2a400683f2adef1e6871228802bc7ba956cb Mon Sep 17 00:00:00 2001 From: Garrybest Date: Fri, 11 Mar 2022 15:33:55 +0800 Subject: [PATCH] fix descheduler crash Signed-off-by: Garrybest --- artifacts/deploy/karmada-descheduler.yaml | 2 +- cmd/descheduler/app/options/options.go | 21 +++++++++++++++++++-- pkg/descheduler/core/helper.go | 3 ++- pkg/descheduler/descheduler.go | 2 +- 4 files changed, 23 insertions(+), 5 deletions(-) diff --git a/artifacts/deploy/karmada-descheduler.yaml b/artifacts/deploy/karmada-descheduler.yaml index 470fe46dc..71ba0dbe0 100644 --- a/artifacts/deploy/karmada-descheduler.yaml +++ b/artifacts/deploy/karmada-descheduler.yaml @@ -24,7 +24,7 @@ spec: imagePullPolicy: IfNotPresent command: - /bin/karmada-descheduler - - --karmada-kubeconfig=/etc/kubeconfig + - --kubeconfig=/etc/kubeconfig - --bind-address=0.0.0.0 - --v=4 volumeMounts: diff --git a/cmd/descheduler/app/options/options.go b/cmd/descheduler/app/options/options.go index b10f41d9f..d57cfd58d 100644 --- a/cmd/descheduler/app/options/options.go +++ b/cmd/descheduler/app/options/options.go @@ -5,6 +5,7 @@ import ( "github.com/spf13/pflag" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/client-go/tools/leaderelection/resourcelock" componentbaseconfig "k8s.io/component-base/config" "github.com/karmada-io/karmada/pkg/util" @@ -18,6 +19,12 @@ const ( defaultUnschedulableThreshold = 5 * time.Minute ) +var ( + defaultElectionLeaseDuration = metav1.Duration{Duration: 15 * time.Second} + defaultElectionRenewDeadline = metav1.Duration{Duration: 10 * time.Second} + defaultElectionRetryPeriod = metav1.Duration{Duration: 2 * time.Second} +) + // Options contains everything necessary to create and run scheduler-estimator. type Options struct { LeaderElection componentbaseconfig.LeaderElectionConfiguration @@ -42,9 +49,19 @@ type Options struct { UnschedulableThreshold metav1.Duration } -// NewOptions builds an empty options. +// NewOptions builds a default descheduler options. func NewOptions() *Options { - return &Options{} + return &Options{ + LeaderElection: componentbaseconfig.LeaderElectionConfiguration{ + LeaderElect: true, + ResourceLock: resourcelock.LeasesResourceLock, + ResourceNamespace: util.NamespaceKarmadaSystem, + ResourceName: "karmada-descheduler", + LeaseDuration: defaultElectionLeaseDuration, + RenewDeadline: defaultElectionRenewDeadline, + RetryPeriod: defaultElectionRetryPeriod, + }, + } } // AddFlags adds flags of estimator to the specified FlagSet diff --git a/pkg/descheduler/core/helper.go b/pkg/descheduler/core/helper.go index 6cdd72f1b..7972c2811 100644 --- a/pkg/descheduler/core/helper.go +++ b/pkg/descheduler/core/helper.go @@ -7,6 +7,7 @@ import ( "math" "time" + "github.com/kr/pretty" "k8s.io/klog/v2" workv1alpha2 "github.com/karmada-io/karmada/pkg/apis/work/v1alpha2" @@ -75,7 +76,7 @@ func (h *SchedulingResultHelper) FillUnschedulableReplicas(unschedulableThreshol } } - klog.V(4).Infof("Target undesired cluster of unschedulable replica result: %v", undesiredClusters) + klog.V(4).Infof("Target undesired cluster of unschedulable replica result: %s", pretty.Sprint(undesiredClusters)) } // GetUndesiredClusters returns the cluster which of ready replicas are not reach the ready ones. diff --git a/pkg/descheduler/descheduler.go b/pkg/descheduler/descheduler.go index 7ee77264e..55c2150c7 100644 --- a/pkg/descheduler/descheduler.go +++ b/pkg/descheduler/descheduler.go @@ -128,7 +128,7 @@ func (d *Descheduler) descheduleOnce() { } bindings = core.FilterBindings(bindings) for _, binding := range bindings { - d.deschedulerWorker.Add(binding) + d.deschedulerWorker.Enqueue(binding) } }