Google Container Engine 中的间歇性 DNS 故障

jwa*_*ack 6 google-compute-engine kubernetes google-kubernetes-engine

[用调查结果的详细信息重写了问题。]

我正在运行一个包含大约 100 个容器的 Google Container Engine 集群,每天执行大约 100,000 个 API 调用。一些 pod 开始在 DNS 解析中失败 50%。我深入研究了这一点,它只发生在正在运行的节点上的 pod 上kube-dns。我还注意到,这只发生在系统中的节点因内存不足而关闭之前。

后台 resque 作业附加到 Google API,然后将数据上传到 S3。当我看到失败的作业时,它们会因“名称解析暂时失败”而失败。这发生在“accounts.google.com”和“s3.amazonaws.com”上。

当我登录到服务器,并尝试以连接到这些(或其他主机)hostnslookupdig它似乎工作就好了。当我连接到 rails 控制台并运行在队列中失败的相同代码时,我不会发生故障。然而,正如我所说,这些后台故障似乎是间歇性的(大约 50% 的时间运行在节点上运行的工作程序kube-dns)。

到目前为止,我的临时修复是删除失败的 pod,并让 kubernetes 重新安排它们,并继续这样做,直到 kubernetes 将它们安排到一个没有运行的节点kube-dns

顺便说一下,删除故障节点并没有解决这个问题。它只是导致 kubernetes 将所有内容移动到其他节点并移动了问题。

jwa*_*ack 0

我通过升级到 Kubernetes 1.4 解决了这个问题。

1.4 版本包含多项修复,以防止 Kubernetes 在内存不足的情况下崩溃。我认为这有助于减少遇到此问题的可能性,尽管我不相信核心问题已得到解决(除非问题是由于kube-dns节点命中时 kubernetes 系统不稳定而导致其中一个实例崩溃或无响应) OOM)。