Kubernetes 通过复制获取集群锁

Dim*_*thu 3 kubernetes

我有一个在 Kubernetes pod 中运行的应用程序,该应用程序使用复制控制器进行复制。但是,我需要一次由单个应用程序(一个复制)完成的一些关键任务。以前我使用 zookeeper 来获取集群锁来完成该任务。Kubernetes 有没有办法为特定的复制控制器获取集群锁?

CJ *_*len 6

Kubernetes 没有集群锁对象,但您可以使用复制控制器上的注释来指定锁持有者和 TTL。

例如,每个 pod 都可以读取注释 key "lock",如果为空(或 TTL 过期),则尝试写入"lock": "pod-xyz: 2015-12-22T18:39:12+00:00". 如果尝试多次写入,kubernetes 将接受一个,并通过 409 拒绝其他,因为资源版本不正确。然后,锁持有者将继续更新注释以刷新 TTL。

如果您有一个与此复制控制器相对应的服务,则将锁定注释放在服务而不是 RC 上可能更有意义。然后锁定语义将在软件升级(例如滚动更新)中继续存在。注释可以放在任何对象上,因此可以灵活地找出最适合您的方法。

podmaster.go有一个很好的例子来说明你可能用来实现它的逻辑。它直接针对 etcd 运行,如果您不介意引入另一个组件,您也可以这样做。