首页 > 解决方案 > 在 Kubernetes 集群上缺少共识的实际后果?

问题描述

在 Kubernetes 集群上缺少共识的实际后果是什么?或者换句话说:Kubernetes 集群上的哪些功能需要共识?什么行得通,什么行不通?

例如(实际上仅作为示例):

示例场景:具有两个节点的集群丢失了一个节点。不可能达成共识。

标签: kubernetesgoogle-kubernetes-engineetcdconsensus

解决方案


共识是 etcd 的基础——Kubernetes 所基于的分布式数据库。如果没有达成共识,您可以从数据库读取但不能写入。例如,如果 3 个节点中只有 1 个可用。

当你失去仲裁时,etcd 进入只读状态,它可以响应数据,但不能执行新的操作,因为它无法决定是否允许该操作。

了解 Etcd 共识以及如何从失败中恢复

Kubernetes 的设计使 Pod 只需要 Kubernetes 来进行更改,例如部署。之后,它们以松散耦合的方式独立于 Kubernetes 运行。

构建 Kubernetes 是为了在 etcd 数据库中保持所需的状态。然后控制器观察 etcd 的变化并根据变化采取行动。这意味着如果 etcd 没有达成共识,您将无法扩展或更改 pod 的任何配置。Kubernetes 做了许多自愈操作,但是如果 etcd 不可用,它们将无法工作,因为所有操作都是通过 ApiServer 和 etcd 完成的。

失去法定人数意味着无法进行新的操作。所有正在运行的东西都将继续运行,直到出现故障。

了解 etcd 和 Kubernetes 中的分布式共识


推荐阅读