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,
LeaseDuration: 30 * time.Second,
RenewDeadline: 20 * time.Second,
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() { }, }, }) }
|