在 Kubernetes 集群上失去共识的实际后果是什么?



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

例如(实际上只是例如(:

  • 现有 Pod 会继续运行吗?
  • 豆荚还能水平缩放吗?

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

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

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

了解 etcd 共识以及如何从故障中恢复

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

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

失去仲裁意味着无法执行任何新操作。正在运行的所有内容将继续运行,直到出现故障。

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

最新更新