Kubernetes上本地挂载jar包与将jar打进容器的比较

本文对比分析了在CI/CD流程中,将JAR包直接挂载到容器与将其打包进容器镜像两种方法的优劣。通过实际操作,详细阐述了各自的实施步骤、所需时间及遇到的问题,最终选择了挂载JAR包的方式以提高部署效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一,前言

先说说我这边大概的一个代码的更新过程
JAVA后端:dev > push Code > repository hooks > jenkins > git pull > mvn package  > kubernetes apply > 钉钉通知 > access success  = 90s - without an outage

为了加快更新速度,其中一些细节处理,如添加hook,减少mvn的编译包(增量编译),kubernetes滚动更新,Pod的检测保证不停机。

 

二,先说jar打进容器

这边使用的是jenkins,大概说一下之前的实现方式。

JAVA后端:dev > push Code > repository hooks > jenkins > git pull > mvn package(在mvn打包docker镜像,并上传仓库)  > kubernetes apply(更改镜像版本) > 钉钉通知 > access success  = xx秒(因时间太久没采用这种方式) - without an outage

1,可以不使用mvn插件进行打包也行,不过需要自己写命令脚本

2,在更改yaml文件镜像版本  使用sed进行替换(寻找某些变量进行标识,如jenkins内置变量,git版本号等等)

3,使用这种方式,有个问题就是需要清理旧的镜像,因为我这边,更新的次数太频繁,所以放弃这种了

4,采用这种方式会少了一些细节处理的问题,如脚本判断,只需要关注清理旧的镜像,耗费时间

 

三,本地挂载jar包

这里用的就是前言说的那种步骤

JAVA后端:dev > push Code > repository hooks > jenkins > git pull > mvn package  > kubernetes apply > 钉钉通知 > access success  = 90s - without an outage

1,这里需要注意的是 yaml文件的编写,(Deployment,imagePullPolicy,command,hostPath,一些健康检测,就绪检测等等)

2,上面说的就是拉取镜像方式,使用java -jar去启动,挂载jar包进去,滚动更新,并检测是否就绪,之后在替换

3,这种挂载方式,需要有一个共享存储,这里使用的nfs。如果没有共享存储,jar包是没办法同步的,因为用的hostPath

4,只所以采用这种方式,是因为不想在dev环境上浪费太多docker build,docker push时间(虽然是内网,但是也需要浪费30-40秒)

5,如何进行apply呢(因为不改动yaml的情况下是没办法进行替换的)解决方法,写了个替换版本的脚本,有2个镜像,每次更新去执行,如果yaml的版本是A,就替换成B,如果yaml版本是B,就替换成A

 

四,本地挂载jar包与将jar打进容器的比较

其实选择两种都会有些不好的地方,只能选更为合适自己的,因我这边需要加快这种流程的速度,所以选择挂载方式

说说他们不好的地方

本地挂载jar包:

1,需要nfs存储,

2,需要将挂载的路径不能与jenkins 编译后的java里的target一致(如果一直会出现在mvn打包过程中,会将旧的jar包替换,这个过程会出现某些noclass,服务会报错),
解决方法:使用rsync ,如果mvn编译后是 /JAVA/target/java.jar    那就把挂载目录设置为/新的jar包路径/java.jar

rsync -av /JAVA/target/java.jar /新的jar包路径/java.jar   

报错截图:

 

将jar打进容器

1,清理旧的镜像,而且每个镜像在200M左右(使用的oracleJDK=130M,jar包几十M)

2,耗费时间(在docker build  docker push)

 

五,本地挂载jar包与将jar打进容器的比较

他们好的地方就是。

本地挂载jar包:

1,快速,不需要等待打包镜像的时间

 

将jar打进容器

1,方便,不需要执行太多花里胡哨的操作

 

整个过程为自己的操作过程,如果有更好的方式,麻烦告知下,也想更好的接触更多技术

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值