有没有办法确定 Kubernetes-apiserver 正在与哪个 etcd 服务器通信?

有没有办法确定 Kubernetes-apiserver 正在与哪个 etcd 服务器通信?

在以下场景中,有没有办法确定 Kubernetes-apiserver 正在与哪个 etcd 服务器通信?

  1. 假设我们有3 个主节点,配备外部负载均衡器和 3 个 etcd它们位于同一主机中,且 etcd 在 Master1 节点上运行,作为领导。
  2. 当执行 kubectl 命令时,外部负载均衡器以循环方式将流量路由到 3 个主节点之一。
  3. 假设HTTP请求命中Master3节点。
  4. 这里的问题是,Master3 节点上的 kubernetes-apiserver 是否与领导者 etcd(在 Master1 节点上)通信以通知资源状态,然后领导者 etcd 与其他两个跟随者分发数据?

    (或者)

  5. 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 控制器。

您可以找到的其他资源这里这里这里

希望这能有所帮助。请分享您的发现。

相关内容