我们在进行日常开发调试的时候经常遇到一个窘境,就是我们修改的代码在开发环境很难及时生效,一天下来,大多数时间都被消耗在调试和部署上面,最后没有办法,除了加班还是只能加班。
为了解决这个问题,Coding 开发了一个叫做
Nocalhost
的工具,给我们在 Kubernetes 环境下进行开发带来了全新的体验,Nocalhost 可以帮助我们把本地的代码实时的同步到 Kubernetes Pod 容器上。而且进一步的,
Nocalhost
可以完美结合 Java 热加载神器JRebel
,实现 Java 代码实时编译并生效,这样我们就可以像开发脚本程序一样构建云原生下的 Java 应用程序。
一、插件介绍
Nocalhost
Nocalhost 是一款开源的基于 IDE 的云原生应用开发工具,主要支持以下能力:
- 提供直接在 Kubernetes 集群中构建、测试和调试应用程序
- 提供易于使用的 IDE 插件(支持 VS Code 和 JetBrains),即使在 Kubernetes 集群中进行开发和调试,Nocalhost 也能保持和本地开发一样的开发体验
- 使用即时文件同步进行开发: 即时将您的代码更改同步到远端容器,而无需重建镜像或重新启动容器。
JRebel
JRebel 是一款 Java 热部署工具,可以完美实现代码修改后,无需重启应用即可生效。
二、配置步骤
1. 安装 Nocalhost 插件
2. 安装 JRebel 插件
3. 将 Kubernetes 集群添加到 Nocalhost
4. 将应用镜像推送到集群
本地将代码打包成镜像,并将镜像推送到 Kubernetes 镜像仓库。
5. 部署应用镜像
在 Kubernetes 集群部署应用。
6. nocalhost 连接应用
7. nocalhost 配置接口转发
需要将远程容器的接口转发到本地,后面在 JRebel 里面配置远程机器的时候用这个转发后的地址和端口就可以了。
8. JRebel 配置远程机器
9. Nocalhost 远程启动
10. 代码开发和调试
看到下面的输出即为配置成功,这样本地修改的代码,会实时编译后在远程 Pod 上生效。
三、小结
通过上面的配置,我们就可以通过 Nocalhost + JRebel 在本地开发和调试远程 Kubernetes 集群上的应用。而且这样带来的好处是,我们本地不再需要费劲和集群上的数据库/消息组件打通,也不用再考虑本地开发机器和实际部署机器不一致带来的问题。
以上代码可以在我的 GitHub 仓库 hunterzhang86/nocalhost-jrebel-demo 中找到。
本文亦通过 NoOne's Blog 发表,更多分享请关注公众号 NoOneNoOne