在以下场景中,有没有办法确定 Kubernetes-apiserver 正在与哪个 etcd 服务器通信?
- 假设我们有3 个主节点,配备外部负载均衡器和 3 个 etcd它们位于同一主机中,且 etcd 在 Master1 节点上运行,作为领导。
- 当执行 kubectl 命令时,外部负载均衡器以循环方式将流量路由到 3 个主节点之一。
- 假设HTTP请求命中Master3节点。
这里的问题是,Master3 节点上的 kubernetes-apiserver 是否与领导者 etcd(在 Master1 节点上)通信以通知资源状态,然后领导者 etcd 与其他两个跟随者分发数据?
(或者)
- Master3 节点上的 kubernetes-apiserver 是否与 Master3 节点上运行的 etcd 通信有关要存储的资源状态并通知 etcd 领导者?
kubernetes-apiserver.service 文件中的行:--etcd-servers=https://10.240.0.10:2379,https://10.240.0.11:2379,https://10.240.0.12:2379
似乎在所有 3 个主节点上运行的每个 kubenetes-apiserver 都知道所有 3 个 etcd 服务器。
答案1
根据文件:HA 集群主服务器复制的最佳实践
在这种情况下,当您为 API 服务器创建具有自己专用 etcd 数据库的单独集群时:每个服务器将与本地 etcd 通信,并且集群中的所有 API 服务器都将可用。
在这种情况下,系统的领导者会向所有追随者发送心跳,以保持集群稳定(需要一定数量的节点来同意集群的更新)。如果出现某些网络或其他问题,无领导者集群将无法进行更改(etcd 实例将不稳定,集群将无法调度新的 pod 等)。
此解决方案中的负载平衡至关重要。如果控制主服务器发生故障,API 将脱机,结果集群将无法响应请求、节点故障等。所有延迟都会传播到 Kubernetes 控制器。
希望这能有所帮助。请分享您的发现。