V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Martin9
V2EX  ›  Kubernetes

k8s pod 莫名奇妙异常

  •  
  •   Martin9 · 2022-06-28 13:28:40 +08:00 · 2423 次点击
    这是一个创建于 861 天前的主题,其中的信息可能已经有所发展或是发生改变。

    用的是 Azure 的 k8s ,生产环境默认 3 个 pod ,但偶尔会发生某个 pod 突然坏了。
    请求到正常的 pod 就没事,如果请求到坏的 pod 就会报超时,感觉是连接数据库出问题了,但进入到 pod 手动连数据库也正常。
    查看出问题的 pod 的 log ,也没什么记录。
    重启 pod 之后又正常了,可能是啥情况?

    15 条回复    2022-07-04 13:20:27 +08:00
    hahastudio
        1
    hahastudio  
       2022-06-28 13:33:21 +08:00
    那个坏了的 pod 里,进程里用的 sql connection 断开了没有重连?
    手工连数据库应该是新开了一个 connection 吧
    hetal
        2
    hetal  
       2022-06-28 13:50:28 +08:00
    不是 pod 异常,而是 pod 里的服务异常...
    Martin9
        3
    Martin9  
    OP
       2022-06-28 13:51:45 +08:00
    @hetal #2 对,但是异常的服务请求再来的时候也没有 error log
    Martin9
        4
    Martin9  
    OP
       2022-06-28 13:54:59 +08:00
    @hahastudio #1 用的 springboot 自带的连接池,不知道是不是连接池的问题。
    novolunt
        5
    novolunt  
       2022-06-28 14:15:55 +08:00
    debug 开起来看看,有没有监控 cpu 和内存,是不是超出限制。
    dayeye2006199
        6
    dayeye2006199  
       2022-06-28 14:17:09 +08:00
    建议先配置一下 readiness probe ,先保证如果一个 pod 响应异常,至少应该不下发流量
    nicholasxuu
        7
    nicholasxuu  
       2022-06-28 14:32:20 +08:00
    pod 加 health check 了吗?
    konakona
        8
    konakona  
       2022-06-28 15:14:07 +08:00
    考虑到实效性,没能第一时间看到 Resource 的 Event ,那么就建议将主进程和关联服务的日志都 stdout ,然后由 logstage 收集。

    方便你追溯问题。如果不是 restart:always ,那么异常 POD 就会保持状态,可以方便排查。
    cheng6563
        9
    cheng6563  
       2022-06-28 15:28:54 +08:00
    Java 服务遇到莫名“卡死”时首先看看有无 OOM 异常。
    然后,加个 spring boot actuator 依赖,暴露个检查的接口 /actuator/health ,把这个接口配到 k8s 的 readiness probe 上去
    wtfedc
        10
    wtfedc  
       2022-06-28 17:51:09 +08:00
    ingress 和 service 的连通最好也测一下
    yyttrr
        11
    yyttrr  
       2022-06-28 18:13:06 +08:00
    1.加可读探针、存活探针避免请求到异常的 pod
    tanghanyu
        12
    tanghanyu  
       2022-06-29 09:11:20 +08:00
    LiveinessProbe 和 ReadinessProbe 都配置一下吧
    psydonki
        13
    psydonki  
       2022-06-29 11:05:34 +08:00 via Android
    @Martin9 感觉跟我现在遇到的问题很像…目前的想法是看能不能用 ephemeral container, 挂载到出问题的 pod 上, 再通过 netstat 看具体的连接状态。

    https://kubernetes.io/docs/tasks/debug/debug-application/debug-running-pod/#ephemeral-container
    panzhc
        14
    panzhc  
       2022-07-03 23:12:13 +08:00
    1. 这种问题一般先看看网络连接情况,对比连接池配置;再抓个堆栈,看看线程情况。
    2. 应用提供健康检查接口,配置到 Deployment 上,健康检查接口如果走数据库连接(最简单的方式,不会带来很大压力),可以在数据库连接出问题时及时重启 Pod 。
    Martin9
        15
    Martin9  
    OP
       2022-07-04 13:20:27 +08:00
    不知道为什么不能 append 了,问题找到了:
    是因为并发提高导致 JDBC 连接数不够,服务无响应了;
    解决方式是修改了连接池的配置,提高了连接数。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3412 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 11:04 · PVG 19:04 · LAX 03:04 · JFK 06:04
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.