HAOJX

K8s leaderElection选主的写法套路

字数统计: 169阅读时长: 1 min
2022/01/08 Share
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
package main

import (
"context"
"fmt"
meatv1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/client-go/tools/leaderelection"
"k8s.io/client-go/tools/leaderelection/resourcelock"
"kube-base3/lib/kubeConfig"
"time"
)

func main() {
id := "app1"
client := kubeConfig.InitClient()
lock := &resourcelock.LeaseLock{
LeaseMeta: meatv1.ObjectMeta{
Name: "myapp-lock",
Namespace: "default",
},
Client: client.CoordinationV1(),
LockConfig: resourcelock.ResourceLockConfig{
Identity: id,
},
}

leaderelection.RunOrDie(context.Background(), leaderelection.LeaderElectionConfig{
Lock: lock,
ReleaseOnCancel: true,

//租约时间 必须要打印renewDeadline
LeaseDuration: 30 * time.Second,

//leader持有时间
RenewDeadline: 20 * time.Second, //这个值必须大于RetryPeriod*1.2

//其他成员重试竞争leader时间间隔
RetryPeriod: 5 * time.Second,
Callbacks: leaderelection.LeaderCallbacks{
OnStartedLeading: func(ctx context.Context) {
fmt.Println("选主")
},
OnNewLeader: func(identity string) {
if identity == id {
return
}
fmt.Println("领导不是自己,是", identity)
},
OnStoppedLeading: func() {

},
},
})
}
CATALOG