使用 Kuberentes 对象进行悲观锁定

问题描述 投票:0回答:1

想知道使用 Kubernetes 对象进行悲观锁定是否正确。

例如,如果我想确保只有一个进程(或服务或 Pod)会处理一组资源。我可以使用

ConfigMap
作为锁吗,这样,如果两个或多个进程尝试创建同名的
ConfigMap
,只有一个成功的进程会获取锁,另一个进程将会失败。

(ConfigMap 可以包含所有支持信息,例如创建日期以支持到期)

考虑到 etcd 的特性,这应该没问题。 https://etcd.io/docs/v3.3/learning/api_guarantees/#consistency

Kubernetes 中有一个 Lease 对象,似乎就是为此目的而设计的: https://kubernetes.io/docs/reference/kubernetes-api/cluster-resources/lease-v1/ (但没有记录,我发现的是用于维护有关节点可用性的信息)

那么,这是正确的吗?这种方法有什么缺点?

使用 Zookeeper 或 Redlock 或其他替代方案有什么优势?

(忽略这可能会给 API 服务器带来高负载的事实)

谢谢你!

kubernetes locking
1个回答
0
投票

是的,情况确实如此,因为 Kubernetes API 服务器(和/或等)的一致性保证

© www.soinside.com 2019 - 2024. All rights reserved.