EKS中Pod存活探针无报错却频繁重启问题排查求助
排查EKS Pod容器存活探针失败重启问题
一、直接验证探针执行结果
- 进入问题容器手动执行健康检查脚本/命令,确认执行状态与输出:
执行后通过kubectl exec -it <pod名称> -c <问题容器名> -- /path/to/grpc-health-check-scriptecho $?查看返回码,非0值说明脚本本身存在执行失败问题。 - 查看容器日志获取探针执行细节:
探针的错误输出通常会写入容器日志,可补充事件中缺失的失败原因。kubectl logs <pod名称> -c <问题容器名> --previous # 查看重启前的日志 kubectl logs <pod名称> -c <问题容器名>
二、检查探针配置参数合理性
- 确认存活探针的时间参数:
initialDelaySeconds:若容器启动较慢,该值过小会导致启动初期探针误判timeoutSeconds:若健康检查脚本执行耗时较长,该值过小会被判定为超时失败failureThreshold:若设为1,单次探针失败就会触发重启,需确认是否为偶发超时导致
- 核对Deployment中的探针配置示例:
livenessProbe: exec: command: ["sh", "/scripts/grpc-health-check.sh"] initialDelaySeconds: 30 periodSeconds: 300 timeoutSeconds: 5 failureThreshold: 1
三、排查gRPC健康检查脚本问题
- 验证脚本依赖工具:在容器内执行
which grpcurl,确认工具已正确安装且版本与服务兼容 - 检查脚本内配置:确认目标地址、端口、服务名是否正确,避免因
localhost网络异常、服务名拼写错误导致检查失败 - 确认脚本权限:执行
ls -l /path/to/grpc-health-check-script,若无执行权限,需在Dockerfile中添加chmod +x /path/to/grpc-health-check-script步骤
四、检查容器资源与状态
- 查看容器资源使用情况,确认是否因达到
resources.limits导致探针执行时资源不足:kubectl top pod <pod名称> -c <问题容器名> - 查看Pod完整事件,排查关联异常:
重点关注节点资源不足、容器网络不通等关联事件。kubectl describe pod <pod名称>
五、验证Docker镜像构建问题
- 检查Dockerfile:确认已安装健康检查依赖工具、设置脚本可执行权限、配置必要环境变量
- 本地测试镜像:拉取镜像后手动运行,验证健康检查脚本是否正常执行:
docker run --rm <镜像名> /path/to/grpc-health-check-script
六、集群层面排查
- 查看kubelet日志获取探针执行详情:
kubelet日志会记录探针执行的具体错误(如命令找不到、执行超时等),kubelet Pod通常在kubectl logs -n kube-system <kubelet-pod名称> -c kubelet | grep <pod名称>kube-system命名空间,命名格式类似ip-xxx-xxx-xxx-xxx.ec2.internal - 检查节点网络策略:确认未阻断容器内部gRPC健康检查请求(如localhost端口未被防火墙拦截)
内容的提问来源于stack exchange,提问作者Raghav Patel
相关产品推荐
相关产品推荐

