... | ... | @@ -28,14 +28,13 @@ |
|
|
|
|
|
注意到这是一个很老的文章。它提到了一个[PR](https://github.com/kubernetes-retired/contrib/pull/353/files),可以看到人家是怎么实现的。这 PR 的 repo 已经 retired。那是不是说,这里所说的方法,就不能用了呢?并不是,这 PR 其实使用了 "k8s.io/kubernetes/pkg/client/leaderelection"这个包。在新版本的 k8s 中,leaderelection 位于[这里](https://github.com/kubernetes/client-go/blob/master/tools/leaderelection/leaderelection.go),应该是还在被维护着的。
|
|
|
|
|
|
leaderelection 对应的 go package 文档在[这里](https://pkg.go.dev/k8s.io/client-go/tools/leaderelection)。它在 overview 中有一些关于局限性的说明,让人想到魔鬼都住在细节中。
|
|
|
leaderelection 对应的 go package 文档在[这里](https://pkg.go.dev/k8s.io/client-go/tools/leaderelection)。它在 overview 中有一些关于局限性的说明,让人想到魔鬼都住在细节中。另外,目前这 leaderelection 是处于 alpha 阶段的 API。
|
|
|
|
|
|
另外,[Simple leader election with Kubernetes and Docker](https://kubernetes.io/blog/2016/01/simple-leader-election-with-kubernetes/)一文也提到了如何在应用程序中方便地使用 leader selection: 可以把 leader selection 做到 side car 中,暴露出 http 端口,应用服务访问这个端口来获取 leader 信息。
|
|
|
另外,[Simple leader election with Kubernetes and Docker](https://kubernetes.io/blog/2016/01/simple-leader-election-with-kubernetes/)一文也提到了如何在应用程序中方便地使用 leader selection: 可以把 leader selection 做到 side car 中,暴露出 http 接口,应用服务访问这个接口来获取 leader 信息。
|
|
|
|
|
|
从 leaderelection [源码](https://github.com/kubernetes/client-go/blob/master/tools/leaderelection/leaderelection.go 还可以看到,它还有个 NewLeaderHealthzAdaptor ,能够把健康状态整合到 leader election 里面。(不过,如果使用 side car 方式,这会引入循环依赖?不过这应该是小问题。)
|
|
|
|
|
|
另外,从源码看到,经过这些年, leaderelection 的实现机制,变得更加方法。除了 endpoint , 它还可以依托于 configmap、 lease 和“锁的组合”,见[这里](https://github.com/kubernetes/client-go/tree/master/tools/leaderelection/resourcelock)。
|
|
|
从 leaderelection [源码](https://github.com/kubernetes/client-go/blob/master/tools/leaderelection/leaderelection.go 中可以看到,它还有个 NewLeaderHealthzAdaptor ,能够把健康状态整合到 leader election 里面。(不过,如果使用 side car 方式,这会引入循环依赖?不过这应该是小问题。)
|
|
|
|
|
|
另外,从源码中可以看到,经过这些年, leaderelection 的实现机制,变得更加丰富。除了 endpoint , 它还可以依托于 configmap、 lease 和“锁的组合”,见[这里](https://github.com/kubernetes/client-go/tree/master/tools/leaderelection/resourcelock)。
|
|
|
|
|
|
[Deep dive into Kubernetes Simple Leader Election](https://medium.com/michaelbi-22303/deep-dive-into-kubernetes-simple-leader-election-3712a8be3a99) 对 [Simple leader election with Kubernetes and Docker](https://kubernetes.io/blog/2016/01/simple-leader-election-with-kubernetes/) 进行了解说。
|
|
|
|
... | ... | |