繁体   English   中英

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

[英]How to share a jar amongst several Kubernetes containers?

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

但是每当 jar 文件发生更改时,我们都需要构建和部署所有容器。 有没有办法将 jar 文件共享到 4 个容器,不需要 ys 来构建和部署所有 4 个容器,只需要更新 jar?

这就像将 tomcat lib 文件夹共享到 kubernetes 中的另一个容器,每当 jar 文件发生更改时,它们都会自动复制到所有容器。

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

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

这意味着,如果您看到一个 pod 运行一个标记为 20200228 的映像,那么您就确切地知道其中的软件,包括共享的 jar,并且您可以在集群外准确地测试该映像。 如果您发现出现问题,甚至可能是在共享 jar 中,您可以将部署标记更改回 20200227,以便在解决问题的同时获得昨天的构建。

如果您以某种方式手动部署 jar 文件并将它们作为卷安装到 pod 中,您将失去所有这些:您必须手动重新启动 pod 以查看新的 jar 文件,如果不手动注入 jar,则无法离线测试图像文件,如果出现问题,您需要尝试手动还原多项内容。


就机制而言,您需要某种可以由多个 pod 并发读取的,并且可以从集群外部写入或由单个 pod 写入。 PersistentVolumes的讨论具有访问模式的概念,因此您需要 ReadOnlyMany(和外部可访问)或 ReadWriteMany 的内容。 根据您可用的环境,您唯一的选择可能是 NFS 服务器。 这是可能的,但这是一个额外的维护部分,您必须在集群基础架构之外自行设置。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM