【Pod故障处理】Pod 无限重启且流量异常

故障现象

Pod 突然不断重启,期间有流量进入,这部分流量异常。

原因

Pod 之前所在节点异常,重建漂移到了其它节点去启动。

Pod 重建后由于基础镜像中依赖的一个服务有问题导致启动较慢,因为同时配置了 ReadinessProbe 与 LivenessProbe,大概率是启动时所有健康检查都失败,达到 LivenessProbe 失败次数阈值,又被重启。

Pod 配置了 preStop 实现优雅终止,被重启前会先执行 preStop,优雅终止的时长较长,preStop 期间 ReadinessProbe 还会继续探测。

探测方式使用的 TCP 探测,进程优雅终止过程中 TCP 探测仍然会成功(没完全退出前端口监听仍然存在),但实际此时进程已不会处理新请求了。

LivenessProbe 结果不会影响 Pod Ready 状态,是否 Ready 主要取决于 ReadinessProbe 结果,由于 preStop 期间 ReadinessProbe 是成功的,Pod 就变 Ready 了。

Pod Ready 但实际无法处理请求,业务就会异常。

总结

Pod 慢启动 + 存活探测 导致被无限重启。需要延长 initialDelaySecondsStartProbe 来保护慢启动容器。

TCP 探测方式不能完全真实反映业务健康状态,导致在优雅终止过程中,ReadinessProbe 探测成功让流量放进来而业务却不会处理,导致流量异常。需要使用更好的探测方式,建议业务提供 HTTP 探活接口,使用 HTTP 探测业务真实健康状态。

现象描述

容器进程主动退出(不是被外界中断停止)时,退出状态码通常在0 - 128之间。根据规定,正常退出时状态码为0,状态码为1 - 127则说明为程序发生异常导致其主动退出。例如,当检测到程序启动参数和条件不满足要求,或者程序运行过程中发生 panic 但没有捕获处理就会导致程序主动退出。 可首先参考 通过 Exit Code 定位 Pod 异常退出原因 查看对应容器进程的退出状态码,缩小异常问题范围。

可能原因

DNS 无法解析

程序配置有误

排查方法

检查 DNS 是否无法解析

若程序依赖集群 DNS 服务,则解析失败将导致程序报错并主动退出。例如,程序启动时需要连接数据库,且数据库使用 service 名称或外部域名都需要 DNS 解析,若解析失败将引发程序报错并主动退出,导致容器进程主动退出。解析失败的可能原因如下:

集群网络存在异常,Pod 无法连接集群 DNS 服务。

集群 DNS 服务故障,无法响应解析请求。

Service 或域名地址配置有误,致使其无法解析。

检查程序配置

程序配置有错误也可能引起容器进程主动退出,可能原因如下:

配置文件格式错误,程序启动时解析配置失败从而报错退出。

配置内容不符合规范。例如,配置中某个必选字段未填写,导致配置校验不通过,程序报错主动退出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值