【问题标题】:Is there a way to give classpath in Kubernetes deployment/pod definition?有没有办法在 Kubernetes 部署/pod 定义中给出类路径?
【发布时间】:2020-10-23 19:41:07
【问题描述】:

我有一个应用程序战争,它读取 API 实现 jar 文件以在内存中加载一些数据。我目前正在做的是在生成我的应用程序图像时使用 docker 文件将那个 jar 复制到我的“application-war/lib”目录中。

这样做的缺点是每当需要更改 jar 时;我需要重新创建我的应用程序战争 docker 映像。

有没有办法可以外部化这个 jar 文件位置,我只需要重新启动正在运行的 pod 而不是每次都创建一个新图像。

我的意思是,如果我可以提供一个额外的 CLASSPATH,我的 pod 容器可以在启动时读取。

谢谢

【问题讨论】:

    标签: docker kubernetes dockerfile kubernetes-pod kubernetes-deployment


    【解决方案1】:

    您已经以正确的方式进行操作。 应该始终为每个构建创建 docker 映像,以便您也有历史记录。更改正在运行的 pod 中的某些内容并以某种方式重新启动它不是一个好习惯。

    如果您仍然想这样做,您可以将外部卷挂载到您的 pod 并配置您的应用程序服务器以从该位置读取 war 文件。在这种情况下,您仍然需要通过其他方式访问该卷,以便将文件放在那里。

    【讨论】:

    • 如何让服务器从安装在 POD 中的卷中读取客户端 jar?
    • 你需要在配置中告诉你的应用服务器
    【解决方案2】:

    提供更多上下文。 @Hazim 所说的一切都是正确的,我完全同意他关于您以正确的方式进行当前构建的观点,因为它允许您查看映像历史记录并在需要时快速切换。

    至于在图像中使用外部文件。 您需要设置一个PV - persistent volumePVC - persistent volume claim 将使用它。 Configure a Pod to Use a PersistentVolume for Storage 上提供了带有示例的非常详细的描述。 它展示了如何在你的节点上创建一个文件夹,在其中放置一个文件,稍后将加载到pod。您不会将该文件加载到pod,而是使用Dockerfile 中的路径来加载.jar 文件。

    如果您的.jar 文件由key=value 条目组成,您也可以使用ConfigMap 而不是PV。这在 Redis 应用程序中得到了很好的解释,您可以在此处查看 DOCKER / KUBERNETES - CONFIGURE A POD TO USE A CONFIGMAP

    我希望这能提供所有需要的信息。

    【讨论】:

    • Crou,我的基础映像是一种 docker 项目,它以 spring 批处理文件作为输入并运行在外部 jar 中定义其类的作业。我的用户目前要做的是他们必须使用我的图像构建一个新图像,他们将他们的 jar 复制到我的 app/lib 目录中,并创建一个新图像来运行他们的项目。我只是想通过设置 CLASSPATH 来避免这种情况,我可以从那里读取他们的 jar 来运行他们的工作。我知道 PV、PVC 的概念,并且可以在应用程序容器中看到它们的 jar,但无法使其成为 Kubernetes yaml 定义的类路径的一部分。
    • 我认为您现在要配置的是如何告诉您的应用程序服务器(Tomcat、Jboss 等)从不同的类路径读取,而不是在 kubernetes yaml 中指定某个位置。如果您的应用服务器可以通过 configmap 或环境变量进行配置,那么可以将其添加到您的 kubernetes yaml 定义中
    猜你喜欢
    • 1970-01-01
    • 2019-10-25
    • 1970-01-01
    • 2019-05-27
    • 1970-01-01
    • 1970-01-01
    • 2013-09-17
    • 2020-03-02
    • 2016-09-13
    相关资源
    最近更新 更多