Openshift 如何启动一个 fat-jar
How is Openshift starting a fat-jar
我在 Openshift 上部署了一个带有 Spring-boot fat-jar 的映像。我的图像基于 redhat-openjdk18-openshift:1.2.
我的应用程序启动正常,我在终端中看到以下内容
Starting the Java application using /opt/run-java/run-java.sh ...
exec java -javaagent:/opt/jolokia/jolokia.jar=config=/opt/jolokia/etc/jolokia.properties
-XX:+UseParallelGC -XX:MinHeapFreeRatio=20 -XX:MaxHeapFreeRatio=40
-XX:GCTimeRatio=4 -XX:AdaptiveSizePolicyWeight=90 -XX:MaxMetaspaceSize=100m
-XX:+ExitOnOutOfMemoryError -cp . -jar /deployments/MYAPPLICATION.jar
我的问题是:
- 这种胶水是从哪里来的(exec java ...)? Openshift 如何知道这个 jar 文件是可执行的?
- 我想添加一些命令行参数。我发现以下方法有效:
但后来我把上面的 Jolokia 东西弄丢了。有没有更好的方法?
更新:
我使用以下策略:
策略:
..sourceStrategy:
....来自:
......种类:ImageStreamTag
......姓名:'redhat-openjdk18-openshift:1.2'
......命名空间:openshift
然后喜欢:
oc 开始构建 $SERVICE_NAME --from-file=my-app.jar
此外,您链接的文档正是我所遵循的。参见上面的步骤 (2)。然后我松了 Jolokia 的东西。我想我正在寻找一种方法来扩展现有的入口点,而不是重载它。
命令exec java -javaagent:/opt/jolokia/jolokia.jar=config=/opt/jolokia/etc/jolokia.properties
是容器的入口点,是容器运行时执行的命令和参数。构建映像时设置入口点。
您没有说您使用什么策略来构建映像,但是如果您想要更好地控制入口点和其他容器参数,那么您可以使用 Docker strategy。您将使用此方法完全控制图像,因此您可以设置环境变量、参数和自变量等内容。
如果您不想为构建配置操心,那么您可以使用 Dockerfile 在 Openshift 外部构建镜像,然后将镜像直接部署到 openshift。这里是 Dockerfile tutorial.
编辑:
此外,我认为您仍然可以使用您当前正在尝试的方法,但您需要手动将 Jolokia args 添加到规范中,但我认为最好的方法仍然是在构建配置,您可以在其中控制整个图像的入口点和参数,而不是覆盖现有入口点。这是容器内 运行ning 命令的 documentation。
编辑:
根据您提供的更新,我认为切换到 docker 策略仍然是您的最佳选择。 source 策略只是自动为您构建图像,但正如我上面提到的 dockerfile 策略将让您控制整个构建过程。这是内联 docker 文件的示例:
apiVersion: v1
kind: BuildConfig
metadata:
annotations:
description: Defines how to build the application
labels:
application: MYAPPLICATION
name: MYAPPLICATION
namespace: PROJECT_NAME
spec:
output:
to:
kind: ImageStreamTag
name: MYAPPLICATION:latest
source:
binary: {}
dockerfile: |-
FROM redhat-openjdk18-openshift:1.2
COPY deployments/* /
ENTRYPOINT java -jar MYAPPLICATION.jar
type: Binary
strategy:
dockerStrategy:
from:
kind: ImageStreamTag
name: redhat-openjdk18-openshift:1.2
type: Docker
这样您就可以通过复制现有命令并添加您想要的任何其他命令来扩展入口点。您可能需要在您的项目中创建 openjdk 图像流,如果它不存在的话。
我在 Openshift 上部署了一个带有 Spring-boot fat-jar 的映像。我的图像基于 redhat-openjdk18-openshift:1.2.
我的应用程序启动正常,我在终端中看到以下内容
Starting the Java application using /opt/run-java/run-java.sh ...
exec java -javaagent:/opt/jolokia/jolokia.jar=config=/opt/jolokia/etc/jolokia.properties
-XX:+UseParallelGC -XX:MinHeapFreeRatio=20 -XX:MaxHeapFreeRatio=40
-XX:GCTimeRatio=4 -XX:AdaptiveSizePolicyWeight=90 -XX:MaxMetaspaceSize=100m
-XX:+ExitOnOutOfMemoryError -cp . -jar /deployments/MYAPPLICATION.jar
我的问题是:
- 这种胶水是从哪里来的(exec java ...)? Openshift 如何知道这个 jar 文件是可执行的?
- 我想添加一些命令行参数。我发现以下方法有效:
但后来我把上面的 Jolokia 东西弄丢了。有没有更好的方法?
更新: 我使用以下策略:
策略:
..sourceStrategy:
....来自:
......种类:ImageStreamTag
......姓名:'redhat-openjdk18-openshift:1.2'
......命名空间:openshift
然后喜欢: oc 开始构建 $SERVICE_NAME --from-file=my-app.jar
此外,您链接的文档正是我所遵循的。参见上面的步骤 (2)。然后我松了 Jolokia 的东西。我想我正在寻找一种方法来扩展现有的入口点,而不是重载它。
命令exec java -javaagent:/opt/jolokia/jolokia.jar=config=/opt/jolokia/etc/jolokia.properties
是容器的入口点,是容器运行时执行的命令和参数。构建映像时设置入口点。
您没有说您使用什么策略来构建映像,但是如果您想要更好地控制入口点和其他容器参数,那么您可以使用 Docker strategy。您将使用此方法完全控制图像,因此您可以设置环境变量、参数和自变量等内容。
如果您不想为构建配置操心,那么您可以使用 Dockerfile 在 Openshift 外部构建镜像,然后将镜像直接部署到 openshift。这里是 Dockerfile tutorial.
编辑:
此外,我认为您仍然可以使用您当前正在尝试的方法,但您需要手动将 Jolokia args 添加到规范中,但我认为最好的方法仍然是在构建配置,您可以在其中控制整个图像的入口点和参数,而不是覆盖现有入口点。这是容器内 运行ning 命令的 documentation。
编辑:
根据您提供的更新,我认为切换到 docker 策略仍然是您的最佳选择。 source 策略只是自动为您构建图像,但正如我上面提到的 dockerfile 策略将让您控制整个构建过程。这是内联 docker 文件的示例:
apiVersion: v1
kind: BuildConfig
metadata:
annotations:
description: Defines how to build the application
labels:
application: MYAPPLICATION
name: MYAPPLICATION
namespace: PROJECT_NAME
spec:
output:
to:
kind: ImageStreamTag
name: MYAPPLICATION:latest
source:
binary: {}
dockerfile: |-
FROM redhat-openjdk18-openshift:1.2
COPY deployments/* /
ENTRYPOINT java -jar MYAPPLICATION.jar
type: Binary
strategy:
dockerStrategy:
from:
kind: ImageStreamTag
name: redhat-openjdk18-openshift:1.2
type: Docker
这样您就可以通过复制现有命令并添加您想要的任何其他命令来扩展入口点。您可能需要在您的项目中创建 openjdk 图像流,如果它不存在的话。