mirror of
https://github.com/ceph/ceph-csi.git
synced 2024-11-23 23:00:19 +00:00
67 lines
3.0 KiB
Go
67 lines
3.0 KiB
Go
|
/*
|
||
|
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 object that is used for locking during "+
|
||
|
"leader election. Supported options are `endpoints` (default) and `configmaps`.")
|
||
|
}
|