https://github.com/edgedelta/leader-election
A wrapper for leader election mechanism in Kubernetes
https://github.com/edgedelta/leader-election
go kubernetes leader-election
Last synced: 4 months ago
JSON representation
A wrapper for leader election mechanism in Kubernetes
- Host: GitHub
- URL: https://github.com/edgedelta/leader-election
- Owner: edgedelta
- License: mit
- Created: 2021-06-21T23:44:22.000Z (about 5 years ago)
- Default Branch: master
- Last Pushed: 2023-11-22T14:44:04.000Z (over 2 years ago)
- Last Synced: 2025-12-18T09:21:44.905Z (7 months ago)
- Topics: go, kubernetes, leader-election
- Language: Go
- Homepage:
- Size: 34.2 KB
- Stars: 21
- Watchers: 10
- Forks: 4
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README

## Kubernetes Leader Election Library for Go
This library provides a thin wrapper for kubernetes leader election. It can be used to elect a leader between multiple replica deployments/daemonsets. Behind the scenes kubernetes lease objects are used to persist leader information.
```
go get github.com/edgedelta/leader-election
```
### Example usage
```go
import (
...
"github.com/edgedelta/leader-election"
)
func main() {
le, err := leaderelection.New(
leaderelection.WithLeaseDuration(15*time.Second),
leaderelection.WithRenewTime(10*time.Second),
leaderelection.WithRetryPeriod(2*time.Second),
leaderelection.WithLeaseNamespace("custom-ns"))
if err != nil {
// Handle error
}
if err := le.Start(); err != nil {
// Handle error
}
// run the leader election based logic
ctx, cancel := context.WithCancel(context.Background())
go run(le, ctx)
// wait for termination signal
termSignal := make(chan os.Signal, 1)
signal.Notify(termSignal, os.Interrupt, syscall.SIGINT, syscall.SIGTERM)
<-termSignal
// stop leader election engine
cancel()
if err := le.Stop(); err != nil {
// Handle error
}
}
func run(le *leaderelection.K8sLeaderEngine, ctx context.Context) {
// do leader stuff as long as le.IsLeader() and ctx is not Done
}
```
### Check the lease holder
```
kubectl get lease -n custom-ns
```