K8S 如何优雅滚动发布 Java 应用,每次重新发布都会出现超时跟 502 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
0576coder
V2EX    程序员

K8S 如何优雅滚动发布 Java 应用,每次重新发布都会出现超时跟 502

  •  
  •   0576coder 2021-07-28 16:37:51 +08:00 3906 次点击
    这是一个创建于 1543 天前的主题,其中的信息可能已经有所发展或是发生改变。

    目前公司正在全面上 k8s 。作为一个算是边缘部门,所以就被当做第二批小白鼠强行迁移了 k8s 。

    目前项目重新发布的时候业务方请求我 http 接口的时候会出现 connect timeout 或者直接 response 502 了

    java 应用是单机的 spring boot 目前线上 3 节点,应用内部也实现了优雅停机相关代码。

    因为线上的 k8s 对我来说就是个黑盒,我也不知道运维怎么配置的。听运维说,公司 go 那边的项目是因为服务化了,每次下线 pod 前会通知网关来下掉这个节点。所以 go 的服务没出现我这边的情况。

    我那边的线路直接就是内网域名解析到 ingress 然后 ingress 负载到后面 services services 后面就是我 java 应用 3 个 pod 节点了。

    有没有遇到过类似问题的小伙伴,求你们的最佳实践

    16 条回复    2021-07-30 09:11:00 +08:00
    qq850482461
        1
    qq850482461  
       2021-07-28 16:48:38 +08:00
    问下运维有没有配置 readinessProbe,我认为你这个问题是 Pod 启动成功了,但是 java 应用还没有启动完毕,流量通过 ingress 就进入了你新发布的 Pod 中,所以访问 502
    yongle1117
        2
    yongle1117  
       2021-07-28 16:52:14 +08:00
    首先在 Spring boot 中配置优雅关闭,然后 K8S 的 readinessProbe 要配置的,K8S 的 deployment 的配置最好在关闭前让 pod 休眠一定的时间,让 pod 里的应用好处理完当前已经进来的请求
    arischow
        3
    arischow  
       2021-07-28 16:53:58 +08:00
    很有可能是像 1 楼说的情况。
    0576coder
        4
    0576coder  
    OP
       2021-07-28 16:54:11 +08:00
    @qq850482461
    这个有健康检查 有个接口 运维会先访问该接口 我可以找运维确认下- -
    0576coder
        5
    0576coder  
    OP
       2021-07-28 16:55:37 +08:00
    @yongle1117 感谢老哥 我问下运维
    baiyi
        6
    baiyi  
       2021-07-28 16:56:05 +08:00
    看起来你的问题在于 Pod 启动后程序还没有成功跑起来,如果是这样的话可以加个就绪探测器试试
    jeffh
        7
    jeffh  
       2021-07-28 16:57:37 +08:00
    应该是 pod 启动后内部的 java 程序还没启动,配置健康检查就可以了
    wiken
        8
    wiken  
       2021-07-28 17:38:01 +08:00
    探针了解下
    Heroininu
        9
    Heroininu  
       2021-07-28 17:43:15 +08:00
    echo1937
        10
    echo1937  
       2021-07-28 17:44:51 +08:00 via iPhone
    cyaki
        11
    cyaki  
       2021-07-29 08:19:14 +08:00 via Android
    光配置了探针还不够,还需要配置 prestop hook,让睡个几秒
    eudore
        12
    eudore  
       2021-07-29 09:43:50 +08:00
    健康检查没做
    gscoder
        13
    gscoder  
       2021-07-29 10:21:57 +08:00
    就绪检查+健康检查+滚动发布 k8s 支持的。 你们运维有点菜,应该就是只是部署了,但什么都不懂
    eric96
        14
    eric96  
       2021-07-29 10:48:34 +08:00
    健康检查没做,pod 启动了但是 java 程序还没完全起来导致的(自己写的启动生命周期,包括各种服务注册,初始化数据,注册端口等)
    如果有检查点,价格健康检查的探针。再不济,直接规定最小的启动等待时间就行了
    0576coder
        15
    0576coder  
    OP
       2021-07-29 10:56:13 +08:00
    各位老哥 我来汇报一下后续情况


    发布的时候出现超时跟 502 其实是有两个原因的

    * 最初的时候运维下掉 pod 的时候没做优雅停机,导致部分留在老节点里的请求没处理完就退出了

    * 后面重新发布的时候还是有几条超时,其实问题的主要原因是在新拉起的节点上,因为我那边用了挺多东西的,而且我提供给运维健康检查的接口其实就是自己手动写了个 /health 接口,其实这时候 jar 包刚被拉起,很多东西刚初始化,所以它起来了,但是它还没完全就绪,所以我准备用 9 楼老哥提供的官方文档的方法 重新配一个健康检查的接口

    感谢各位老哥
    NUT
        16
    NUT  
       2021-07-30 09:11:00 +08:00
    @qq850482461 #1 这个老哥正解。 用 readiness +liveness 就行。无缝滚动更新。我们 java 服务启动就得 3 分钟。 这过程太酸爽了。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2502 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 02:03 PVG 10:03 LAX 19:03 JFK 22:03
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86