Skip to content

Commit ed5546b

Browse files
committed
enable metrics of clientgo leader election
1 parent 1d59342 commit ed5546b

File tree

3 files changed

+46
-0
lines changed

3 files changed

+46
-0
lines changed

pkg/manager/internal.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,9 @@ type controllerManager struct {
141141
// webhookServer if unset, and Add() it to controllerManager.
142142
webhookServerOnce sync.Once
143143

144+
// leaderElectionID is the name of the resource that leader election
145+
// will use for holding the leader lock.
146+
leaderElectionID string
144147
// leaseDuration is the duration that non-leader candidates will
145148
// wait to force acquire leadership.
146149
leaseDuration time.Duration
@@ -633,6 +636,7 @@ func (cm *controllerManager) startLeaderElection(ctx context.Context) (err error
633636
},
634637
},
635638
ReleaseOnCancel: cm.leaderElectionReleaseOnCancel,
639+
Name: cm.leaderElectionID,
636640
})
637641
if err != nil {
638642
return err

pkg/manager/manager.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -422,6 +422,7 @@ func New(config *rest.Config, options Options) (Manager, error) {
422422
host: options.Host,
423423
certDir: options.CertDir,
424424
webhookServer: options.WebhookServer,
425+
leaderElectionID: options.LeaderElectionID,
425426
leaseDuration: *options.LeaseDuration,
426427
renewDeadline: *options.RenewDeadline,
427428
retryPeriod: *options.RetryPeriod,

pkg/metrics/leaderelection.go

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package metrics
2+
3+
import (
4+
"github.com/prometheus/client_golang/prometheus"
5+
"k8s.io/client-go/tools/leaderelection"
6+
)
7+
8+
// This file is copied and adapted from k8s.io/component-base/metrics/prometheus/clientgo/leaderelection
9+
// which registers metrics to the k8s legacy Registry. We require very
10+
// similar functionality, but must register metrics to a different Registry.
11+
12+
var (
13+
leaderGauge = prometheus.NewGaugeVec(prometheus.GaugeOpts{
14+
Name: "leader_election_master_status",
15+
Help: "Gauge of if the reporting system is master of the relevant lease, 0 indicates backup, 1 indicates master. 'name' is the string used to identify the lease. Please make sure to group by name.",
16+
}, []string{"name"})
17+
)
18+
19+
func init() {
20+
Registry.MustRegister(leaderGauge)
21+
22+
leaderelection.SetProvider(leaderelectionMetricsProvider{})
23+
}
24+
25+
type leaderelectionMetricsProvider struct{}
26+
27+
func (leaderelectionMetricsProvider) NewLeaderMetric() leaderelection.SwitchMetric {
28+
return &switchAdapter{gauge: leaderGauge}
29+
}
30+
31+
type switchAdapter struct {
32+
gauge *prometheus.GaugeVec
33+
}
34+
35+
func (s *switchAdapter) On(name string) {
36+
s.gauge.WithLabelValues(name).Set(1.0)
37+
}
38+
39+
func (s *switchAdapter) Off(name string) {
40+
s.gauge.WithLabelValues(name).Set(0.0)
41+
}

0 commit comments

Comments
 (0)