![有没有办法确定 Kubernetes-apiserver 正在与哪个 etcd 服务器通信?](https://linux22.com/image/738908/%E6%9C%89%E6%B2%A1%E6%9C%89%E5%8A%9E%E6%B3%95%E7%A1%AE%E5%AE%9A%20Kubernetes-apiserver%20%E6%AD%A3%E5%9C%A8%E4%B8%8E%E5%93%AA%E4%B8%AA%20etcd%20%E6%9C%8D%E5%8A%A1%E5%99%A8%E9%80%9A%E4%BF%A1%EF%BC%9F.png)
在以下场景中,有没有办法确定 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 控制器。
希望这能有所帮助。请分享您的发现。