关于 Java 服务上 k8s 的最佳实践(配置文件和 debug)?
- 0次
- 2021-06-02 18:19:11
- idczone
俺现在按照公司要求, 要将 java 服务上 k8s, 但有几点不明, 想问问做过的老铁们, 以下几个方面的最佳实践是什么
一 配置文件
本来配置文件就是跟随代码的, 为不同的环境创建不同的配置文件, maven 打包时, 根据环境参数就可以打包不同的配置文件.
这样的好处就是
1. 可以很直观的看到不同环境的配置
2. 选择适当的配置文件, 可以直接本地启动服务(进而可以很方便的 debug)
但, 如果使用 ConfigMap 的形式, 是不是需要把所有 java 服务的配置文件使用一个单独的 repo 来管理起来? 而且这些美国服务器配置文件的更新也是要走单独的 CI/CD 流程?
而这样的话, java 服务本身就不需要知道具体的配置是什么了?
二 远程 debug
原来 java 在虚拟机上运行时, 俺可以很方便的远程 debug, 但现在服务以 pod 形式运行, 而 pod 的生命周期交给了 k8s. 俺想 debug 的话, 得
1. 先打开 k8s 的端口转发
2. debug 期间, 健康探针如果发现服务"不健康"了(其实还是健康的, 只是俺在 debug), pod 就会被干掉, 这样就无法继续调试了, 怎么办?
你的问题不是上 k8s,而是容器化。
第一个问题是这样的,配置只跟环境有关,不同环境运行的容器镜像应该是一致的。
要达到这样的状态,你需要做一些工作。
第二个,远程 debug 的时候为啥会认为服务不健康呢?
1. 上配置中心;
2. 测试环境你可以关了健康检查?
1. configmap 挂载进去,确实可以用单独的仓库放配置
2. 多打点 log,试试 Arthas
刚帮一个公司把 php 搬到阿里 ack 上。让我继续来
第一个如果用 spring 的话可以看看 spring cloud kubernetes,第二个如果是用 intellij 或是 vs code 开发的话,可以用 google 的 cloud code 来远程 debug
1. configmap 作为本地文件挂载到 pod 里面
2. 可以用 skaffold 远程调试: https://skaffold.dev/
感谢大佬们建议, 刚接触这玩意, 俺要按着大佬们的方向摸索一番