CI/CD 过程中配置文件(application.yml)合并是否有异常?

CI/CD 过程中,可能涉及到合并几份 YML 文件,通常,简单的话我们会用 shell 去合并,如果复杂,可能会在服务器上使用 yq 合并 yml 文件,合并过程可能导致节点信息丢失,导致无法启动 Tomcat。

大部分情况仔细看日志信息提示缺少的配置项,补上即可。
这里的坑可能是,如果 yml 文件里面有空值,采用 yq 合并 yml 文件的时候,他会自动删除空值的节点,导致启动失败。

JVM 内存过大导致 POD OOMKILL

这是最常见的问题,部署的时候一般我们会 limit resources.cpu 和 memory ,Spring Cloud 以及 Spring Boot 项目在启动的时候非常耗内存,可能没有完全启动成功之前,POD 就被 K8S 当成内存溢出(OOM) KILL 了。

通常如果还设置了健康检查,那么就会导致 POD 无限重启,无法启动成功。

解决办法是在 DOCKERFILE 中限制 JVM 的内存限制:

1
ENV JAVA_OPTS="-Xmx512m"

对于 K8S 的 memory limit 也可设置为 512Mi,重新构建镜像后,即可解决问题。