Kubernetes 中断可能是由 kube-dns 引起的

Kubernetes 中断可能是由 kube-dns 引起的

我们有一个生产 kubernetes 集群,它经常会半定期地出现大约 1-5 分钟的中断。我们正在尝试排除故障,但遇到了各种信息/知识方面的缺口,希望能得到一些帮助。

我们所有的自定义代码和软件都是高度可用的,并且至少部署了 2 个副本,并且它们的高可用性已经在负载下进行了测试。

Kubernetes 集群运行竞价型实例,当仅包含我们的 Pod 的竞价型实例停止运行后,一切仍能顺利运行,不会出现任何中断。然而,我们注意到,当包含它的节点停止运行后kube-dns,我们确实会遇到(但并非总是)这些中断。

我们在 GKE 上运行 1.25,因此只能使用kube-dns。我们每 3 个节点运行 1 个kube-dns副本(我们通常运行 9 个节点),已通过 configmap 指定至少 3 个kube-dns节点kube-dns-autoscaler。出于各种原因,我们还在运行 Istio 1.17.1,但不是对于 mTLS。我们还有一个 PDB,kube-dns它只允许 1 次中断。

我们看到,我们的大多数服务在相互请求时都会开始超时(istio-proxy访问日志往往会记录504 UT错误),而一些服务实际上会记录错误EAI_AGAIN,这意味着 DNS 超时。我们还运行了一个单独的应用程序,它会直接 ping 各种服务名称以及服务的 IP 地址(开始这样做是为了排除故障),我们可以看到,在EAI_AGAIN发生错误的时候,IP 地址 ping 成功,但服务名称请求失败 - 进一步表明kube-dns与问题有关。

我们还针对有和没有 Sidecar 的 Pod 检查了这些服务与 IP ping istio-proxy,可以看到相同的行为,这意味着问题在于不是由于istio

我们唯一开始考虑的事情是实施,NodeLocal DNSCache以便所有节点都有 DNS 缓存,并可能掩盖任何间歇性kube-dns问题。然而,我们不确定这是否有用,并且担心这会掩盖更大的问题。

我们还可以在非生产环境中看到同样的问题,但尚未能够在任何地方重现此问题。它就是发生了。即使重新启动/删除节点似乎也不会导致这种情况发生。

我还无法增加日志记录级别,kube-dns因为 GKE 已锁定部署资源并恢复了日志记录级别......

我们希望得到一些关于如何进一步排除故障和解决这个问题的建议。谢谢

相关内容