如何在多个Kubernetes容器之间共享一个jar?

时间:2020-02-28 09:27:17

标签: java docker kubernetes

我的应用程序是一个基于Java的应用程序,我们做了tomcat dockerized实现。我们有四个应用程序,并创建了四个容器。我们有一个公共的身份验证库, 容器,我们已将该jar文件移动到/lib文件夹中,应用程序正常运行。

但是只要jar文件发生更改,我们就需要构建和部署所有容器。是否可以将jar文件共享到4个不需要ys来构建和部署只需要更新jar的4个容器的容器?

就像将tomcat lib文件夹共享到kubernetes中的另一个容器一样,只要对jar文件进行更改,它们就会自动复制到所有容器中。

1 个答案:

答案 0 :(得分:1)

这不是标准做法,您不应该这样做。另外,操作上也很棘手。

Docker映像通常是自包含的,并且包括它们的所有依赖性,在您的情况下,包括重复的jar文件。在带有正在积极开发软件的Kubernetes集群的环境中,您应确保每个映像都有唯一的映像标签,可能是时间戳或源代码控制提交ID之类的东西,可能是由构建系统分配的。然后,您可以使用新的图像标签更新您的部署;这会触发Kubernetes提取新映像并重新启动容器。

这意味着,如果您看到一个运行着标记为20200228的映像的Pod,那么您将确切地知道其中包含的软件(包括共享jar),并且可以在群集之外准确地测试该映像。如果发现有问题,甚至在共享jar中,都可以将部署标签更改回20200227,以在解决问题的同时获取昨天的版本。

如果您以某种方式手动部署jar文件并将其作为卷安装到pod中,则会丢失所有这些:您必须手动重新启动pod才能看到新的jar文件,如果没有手动操作,就无法脱机测试映像注入jar文件,如果出现问题,您需要尝试手动恢复多个内容。


就机制而言,您将需要某种Volume,它可以同时由多个Pod读取,并且可以从集群外部写入,也可以由单个Pod写入。 PersistentVolumes的讨论具有access mode的概念,因此您需要ReadOnlyMany(并且可以从外部访问)或ReadWriteMany。根据您可用的环境,您唯一的选择可能是NFS服务器。这是可能的,但这是需要维护的另一部分,您必须在群集基础结构之外自行设置。