错误的(?)准备检查结果导致无法解释的中断

时间:2018-10-30 09:22:04

标签: kubernetes google-kubernetes-engine kubernetes-health-check kubernetes-pod

TL; DR : 在一个意外的时间点,所有处理来自我们入口的流量的“网络”站点都变得不健康。大约一个小时左右,然后一切恢复健康。我正在尝试找出发生的情况,因为看来我的任何动作都不是造成突然维修的原因。我大约有一个小时的停机时间,我不知道为什么,这很可怕(幸运的是,还没有生产……)。


我将尽一切可能描述这种情况;此刻,平台/源没有发生重大变化,我们的kubernetes集群(GKE)的外部正常运行时间检查提醒我该平台不可访问。果然。向端点执行请求时,我得到了HTTP Error 502

当描述一个网络舱时,我注意到健康检查失败:

  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

进一步调查,很明显,所有网络Pod上的所有Readiness探测都失败了;这是造成停机的原因。

  

另一个需要注意的怪异现象是:目前,这些   web-pods ReadinessLiveness探针完全相同。   尽管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"}

从NODE:

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

在我看来,豆荚覆盖网络的网桥被禁用了,但是如果这确实引起了问题,我将根本无法获得豆荚的IP ...

我尝试了以下操作:

  • 验证被认为“不健康”的豆荚(根据我的说法,它们是健康的)
  • ifupifdown cbr0界面
  • 杀死其中一个节点上的kubelet,并检查其是否固定了Readyness个检查(没有)
  • 重新引导节点,并检查该节点是否修复了各自的Readyness检查(不是)
  • 删除分配给web-pods的节点池中的所有节点,并查看是否有新节点解决了该问题(不是)

突然之间,大约一小时后,在我能够确定问题之前,我的豆荚又恢复了健康,并且平台运行正常...

谁知道这里发生了什么?关于再次发生这种情况该怎么办?

(请注意,摘要中的时间可能相差很大,因为它们来自不同的时间点;时间戳为UTC)

1 个答案:

答案 0 :(得分:0)

此问题最终与准备就绪检查失败无关。

实际原因是由于人为错误而未将configmap加载到正确的位置!