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-pods
Readiness
和Liveness
探针是完全相同的。虽然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)