在操作员框架中使用带租约的领导者选举pod成为领导者后,如何执行功能?

问题描述

我正在尝试运行一个容器的3个容器/副本,我希望其中一个容器作为领导者运行,如果该特定容器停止或发生故障,则其他非领导者运行的容器应立即担任领导继续执行领导吊舱所需的执行。为了清楚起见,其他吊舱将执行,但是领导吊舱一旦获得领导权,则会执行一些其他吊舱不会执行的额外代码。这是我关注的Docs的链接。

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

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能够运行到“我是领导者”打印语句并执行我希望Leader Pod可以执行的任务。即使我可以在某个地方传递某个函数,使其一旦获得领导就可以执行,我也很好。目前,我在某个地方犯了一个错误,在这三个豆荚中的一个获得领导之后,我无能为力。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...