有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在几个Kubernetes容器之间共享一个罐子?

我的应用程序是一个基于Java的应用程序,我们完成了tomcat Docked实现。我们有四个应用程序,并创建了四个容器。我们有一个用于身份验证的公共库 容器我们已经将这个jar文件移到了/lib文件夹,应用程序运行良好

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

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


共 (1) 个答案

  1. # 1 楼答案

    这不是标准做法,你不应该这么做。此外,这在操作上也很棘手

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

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

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


    就机制而言,您需要某种类型的Volume,可以由多个pod同时读取,或者从集群外部写入,或者由单个pod写入。关于PersistentVolumes的讨论有一个access mode的概念,所以你需要一些现成的(外部可访问的)或可读写的东西。根据可用的环境,您唯一的选择可能是NFS服务器。这是可能的,但这是一个需要维护的额外部分,您必须自己在集群基础设施之外进行设置