首页 文章 精选 留言 我的

精选列表

搜索[deployment],共2490篇文章
优秀的个人博客,低调大师

K8S避坑指南 - Deployment更新POD内容器无法收到SIGTERM信号

简述 容器化后,在应用发布时,某个服务重启,导致该服务调用方大量报错,直到服务重启完成。报错的内容是RPC调用失败,我们的RPC这块是有优雅关闭的,也就是说,在进程收到SIGTERM信号后,我们通过JVM的ShutdownHook机制,注册了RPC服务的反注册钩子,在进程收到SIGTERM时应用会主动从注册中心摘除自身防止调用方大量报错。但是为什么容器化后会导致这个问题呢? 问题排查 应用正常启动查看容器内进程 # yum install psmisc # pstree -p bash(1)───java(22)─┬─{java}(23) ├─{java}(24) ├─{java}(25) ├─{java}(26) ├─{java}(27) ├─{java}(28) ├─{java}(29) ├─{java}(30) ... # ps -ef UID PID PPID C STIME TTY TIME CMD root 1 0 0 09:50 ? 00:00:00 /bin/bash run.sh start root 22 1 15 09:50 ? 00:01:20 /app/3rd/jdk/default/bin/java -Xmx512m -Xms512m ... root 49 0 0 09:51 pts/0 00:00:00 bash root 263 49 0 09:59 pts/0 00:00:00 ps -ef 在容器内正常kill 22子进程,可见我们应用的shutdown钩子可以正确处理善后工作但是,在实际生产中,我们的deploy滚动更新时,通过查看被删除pod的日志,发现pod被terminate的时候,应用进程并未正确处理SIGTERM信号,问题产生。 问题分析 根据对Kubernetes机制的调研,如图:https://kubernetes.io/docs/concepts/workloads/pods/pod/#termination-of-pods因为我们的容器是通过run.sh脚本启动,这个在前面截图可以看到,java进程是1号run.sh进程的子进程,对应Kubernetes原理,可知22号java进程在POD删除时不一定会收到SIGTERM,所以导致了我们的shutdown hook不生效。 问题解决 既然已经定位问题,那么解决问题的方法就有了思路,run.sh执行java进程后,将进程上下文让给java进程,java进程接管,java进程变为容器内的1号进程。我们参考了这篇文章受到启发https://yeasy.gitbooks.io/docker_practice/content/image/dockerfile/entrypoint.html在run.sh执行java前面增加exec命令即可然后,重新build镜像,发布,查看进程,发现我们的java进程已经是1号进程然后重启,再查看重启前POD留下的日志问题解决!

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

优质分享App

优质分享App

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

用户登录
用户注册