Kubernetes pod被选为领导者后,如何使用leader with lease-in operator framework执行功能?

Kubernetes pod被选为领导者后,如何使用leader with lease-in operator framework执行功能?,kubernetes,replicaset,operator-sdk,leader-election,Kubernetes,Replicaset,Operator Sdk,Leader Election,我正在尝试运行一个容器的3个吊舱/副本,其中我希望其中一个吊舱作为领队运行,如果该吊舱停止或失败,其他非领队运行吊舱应立即领队继续执行领队吊舱要求的执行。为了清楚起见,其他吊舱将执行,但一旦领导吊舱获得领导权,它将执行一些其他吊舱不会执行的额外代码。这是我所关注的问题的链接 下面是我运行的一个测试示例,在运行容器应该运行的实际代码时遇到问题 package main import ( "fmt" "github.com/operator-framew

我正在尝试运行一个容器的3个吊舱/副本,其中我希望其中一个吊舱作为领队运行,如果该吊舱停止或失败,其他非领队运行吊舱应立即领队继续执行领队吊舱要求的执行。为了清楚起见,其他吊舱将执行,但一旦领导吊舱获得领导权,它将执行一些其他吊舱不会执行的额外代码。这是我所关注的问题的链接

下面是我运行的一个测试示例,在运行容器应该运行的实际代码时遇到问题

package main
import (
    "fmt"
    "github.com/operator-framework/operator-lib/leader"
    "sigs.k8s.io/controller-runtime/pkg/manager"
    "sigs.k8s.io/controller-runtime/pkg/client/config"
    "sigs.k8s.io/controller-runtime/pkg/manager/signals"
    "context"
    "time"
    "os"
)

func main() {
    fmt.Println("Program has started successfully")

    cfg, err := config.GetConfig()
    if err != nil {
        os.Exit(1)
    }

    opts := manager.Options{
        LeaderElection:     true,
        LeaderElectionID:   "memcached-operator-lock",
    }
    fmt.Println("Creating a manager")
    mgr, err := manager.New(cfg, opts)
    if err := mgr.Start(signals.SetupSignalHandler()); err != nil {
        fmt.Println(err, "Manager exited non-zero")
        os.Exit(1)
    }
    fmt.Println("Competing to become the leader")
    err = leader.Become(context.TODO(), "memcached-operator-lock")
    if err != nil {
        fmt.Println("Failed to retry for leader lock because : %v ", err)
    }
    fmt.Println("I am the leader, i will pause for 4 minutes")
    time.Sleep(4 * time.Minute)
}
先导吊舱的日志如下所示:

[diamanti@appserv41 leader_test]$ kubectl logs test-rs-qbm7k
Program has started successfully
Creating a manager
I1007 00:14:10.785904       1 leaderelection.go:242] attempting to acquire leader lease  default/memcached-operator-lock...
I1007 00:14:28.184916       1 leaderelection.go:252] successfully acquired lease default/memcached-operator-lock
我希望pod能够运行到“我是领导者”打印语句,并执行我希望领导者pod能够执行的任务。即使我能在某个地方传递一个函数,一旦它获得领导权,它就可以被执行,这对我来说也没问题。目前,我在某个地方犯了一个错误,在3个吊舱中的一个获得领导权后,我什么也做不了