Lease — lightweight coordination mechanism for distributed systems.
1apiVersion: coordination.k8s.io/v12kind: Lease3metadata:4 name: my-app-leader5 namespace: kube-system6spec:7 holderIdentity: "pod-abc123"8 leaseDurationSeconds: 159 leaseTransitions: 010 acquireTime: "2024-01-15T10:00:00Z"11 renewTime: "2024-01-15T10:00:15Z"12 strategy: LeaseCandidate
1// Go example for leader election2import (3 "context"4 "k8s.io/client-go/tools/leaderelection"5 "k8s.io/client-go/tools/leaderelection/resourcelock"6)78lock := &resourcelock.LeaseLock{9 LeasesMeta: metav1.ObjectMeta{10 Name: "my-app-leader",11 Namespace: "kube-system",12 },13 LockConfig: resourcelock.ResourceLockConfig{14 Identity: hostname,15 },16 Client: clientset.CoordinationV1(),17}1819leaderelection.RunOrDie(ctx, leaderelection.LeaderElectionConfig{20 Lock: lock,21 LeaseDuration: 15 * time.Second,22 RenewDeadline: 10 * time.Second,23 RetryPeriod: 2 * time.Second,24 Callbacks: leaderelection.LeaderCallbacks{25 OnStartedLeading: func(ctx context.Context) {26 // Start controller27 },28 OnStoppedLeading: func() {29 // Cleanup30 },31 },32})
Use cases:
vs ConfigMap/Endpoints for locking: