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

k8s pod 莫名奇妙异常

  •  
  •   Martin9 · 101 天前 · 1717 次点击
    这是一个创建于 101 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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