微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决在操作员框架中使用带租约的领导者选举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 举报,一经查实,本站将立刻删除。