kubernetes - 在 Kubernetes 集群上缺少共识的实际后果?
问题描述
在 Kubernetes 集群上缺少共识的实际后果是什么?或者换句话说:Kubernetes 集群上的哪些功能需要共识?什么行得通,什么行不通?
例如(实际上仅作为示例):
- 现有的 Pod 会继续运行吗?
- 豆荚仍然可以水平缩放吗?
示例场景:具有两个节点的集群丢失了一个节点。不可能达成共识。
解决方案
共识是 etcd 的基础——Kubernetes 所基于的分布式数据库。如果没有达成共识,您可以从数据库读取但不能写入。例如,如果 3 个节点中只有 1 个可用。
当你失去仲裁时,etcd 进入只读状态,它可以响应数据,但不能执行新的操作,因为它无法决定是否允许该操作。
Kubernetes 的设计使 Pod 只需要 Kubernetes 来进行更改,例如部署。之后,它们以松散耦合的方式独立于 Kubernetes 运行。
构建 Kubernetes 是为了在 etcd 数据库中保持所需的状态。然后控制器观察 etcd 的变化并根据变化采取行动。这意味着如果 etcd 没有达成共识,您将无法扩展或更改 pod 的任何配置。Kubernetes 做了许多自愈操作,但是如果 etcd 不可用,它们将无法工作,因为所有操作都是通过 ApiServer 和 etcd 完成的。
失去法定人数意味着无法进行新的操作。所有正在运行的东西都将继续运行,直到出现故障。
推荐阅读
- python - Django:在 def post() 中返回与 PostListView 相同的数据
- java - 获取内存中的日志对象 - Logback
- arrays - 无法将值存储在数组中
- php - 对 url $_GET 提交中的 xss 攻击的担忧
- vim - 如何在 Vim 中正确缩进 HTML
- python - 使用 csv 文件时不进入 for 循环
- java - 响应中的 Set-Cookie 标头被浏览器(Cookie)丢弃
- javascript - 如何在不同的文件夹和子文件夹中使用 Grunt 动态重命名文件并使用版本号?
- javascript - OffScreenCanvas 和触摸事件
- python - 从 API 获取响应时出现 JsonDecodeError