0

TL;DR : 在一个意想不到的时间点,所有处理来自我们入口的流量的“web”-pod 都变得不健康。大约一个小时左右,然后一切又恢复了健康。我试图弄清楚发生了什么,因为我的任何行为似乎都没有导致突然修复。我有大约一个小时的停机时间,但我不知道为什么,这很可怕(幸运的是它还没有生产……)。


我会尽可能地描述情况;目前,平台/源没有发生重大变化,我们的 kubernetes 集群 (GKE) 的外部正常运行时间检查提醒我该平台无法访问。果然。在向端点执行请求时,我得到了一个HTTP Error 502.

在描述其中一个 web-pod 时,我注意到运行状况检查失败:

  Warning  Unhealthy              11m (x3 over 11m)  kubelet, gke-test-001-web-6a31v8hq-p5ff  Readiness probe failed: Get http://10.52.25.179:3000/healthz/full: dial tcp 10.52.25.179:3000: getsockopt: connection refused

进一步调查,很明显Readiness所有 web-pod 上的所有探测都失败了;这导致了中断。

另一个需要注意的奇怪的事情是:目前对于这些 web-podsReadinessLiveness探针是完全相同的。虽然Readiness检查始终标记为Failed,但 Liveness探测器从未这样做过。

我决定进一步调查这个问题,我注意到为Readiness检查设置的端点在以下位置工作得很好:

从 POD:

root@webpod-76c8ctc6t8-2prjz:/var/lib/webapp# curl -iL 10.52.25.179:3000/healthz/full.json
HTTP/1.1 200 OK
Connection: close
Content-Type: application/json; charset=utf-8

{"healthy":true,"message":"success"}

从节点:

root@gke-test-001-web-6a31v8hq-p5ff ~ $ curl -iL http://10.52.25.179:3000/healthz/full.json
HTTP/1.1 200 OK
Connection: close
Content-Type: application/json; charset=utf-8

{"healthy":true,"message":"success"}

这是在健康检查不断返回为Failed. 不知何故,我得到的结果与每个节点上的 kubelet 得到的结果不同?

我确实注意到以下内容:

[Mon Oct 29 16:06:57 2018] cbr0: port 16(veth34a6a4ce) entered disabled state

在我看来,pod-overlay-network 的网桥已被禁用,但如果这真的导致了问题,我将根本无法访问 pod 的 IP……

我尝试了以下事情:

  • 验证被认为“不健康”的豆荚(据我说它们是健康的)
  • ifup和界面ifdown_cbr0
  • 杀死其中一个节点上的 kubelet 并检查是否修复了相应的Readyness检查(它没有)
  • 重新启动一个节点并检查是否修复了相应的Readyness检查(它没有)
  • 删除分配给 web-pods 的节点池中的所有节点,看看新节点是否解决了问题(它没有)

就在它突然出现之前,在我能够确定问题之前,大约一个小时后,我的豆荚又恢复了健康,平台运行良好......

谁知道这里发生了什么?如果再次发生这种情况,我能做些什么?

(请注意,片段中的时间可能会有很大差异,因为这些时间来自不同的时间点;时间戳为 UTC)

4

1 回答 1

0

这个问题最终与失败的准备检查无关。

实际原因是由于人为错误导致配置映射没有加载到正确的位置!

于 2018-11-07T16:31:16.657 回答