想知道使用 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 API 服务器(和/或等)的一致性保证