在 HA kubernetes 集群中,多个控制平面如何同步数据?

问题描述

在 HA Kubernetes 集群中,我们配置了多个控制平面(主节点),但是多个控制平面如何同步它们的数据?当我们使用 kubectl 命令创建一个 pod 时,请求通过云负载均衡器到达控制平面之一。我想了解其他控制平面如何将其数据与收到新请求的控制平面同步?

解决方法

首先,请注意API Server是唯一直接与etcd对话的组件。
在 Kubernetes 集群(例如 kubectl create)上所做的每项更改都会在 etcd 数据库中创建适当的条目,并且您从 kubectl get 命令获得的所有内容都存储在 etcd。

在此 article 中,您可以找到有关 API 服务器etcd 之间通信的详细说明。

Etcd使用RAFT协议进行leader选举,leader处理所有需要集群共识的客户端请求(不需要共识的请求可以由任何集群成员处理):

etcd 建立在 Raft 共识算法之上,以确保集群中所有节点的数据存储一致性——容错分布式系统的赌注。

Raft 通过选举的领导节点实现这种一致性,该领导节点管理集群中其他节点的复制,称为跟随者。领导者接受来自客户端的请求,然后将其转发给跟随者节点。一旦领导者确定大多数跟随者节点已将每个新请求存储为日志条目,它就会将该条目应用于其本地状态机,并将该执行的结果——“写入”——返回给客户端。如果追随者崩溃或网络数据包丢失,领导者会重试,直到所有追随者都一致地存储了所有日志条目。

有关 etcdraft 共识算法的更多信息,请参见此 documentation