带有Kubernetes内存控制的Java jib maven插件



实际上,我正在使用jib-maven插件为我的应用程序创建Docker容器。然后我将把它部署到谷歌服务器上,在那里我们有一个Kubernetes环境。

实际上,我们在玩java环境。jib-maven插件的配置(pom.xml(中的变量:

<jvmFlags>
<jvmFlag>-XX:MinRAMPercentage=60.0</jvmFlag>
<jvmFlag>-XX:MaxRAMPercentage=80.0</jvmFlag>
<jvmFlag>-XX:+HeapDumpOnOutOfMemoryError</jvmFlag>
<jvmFlag>-Djdk.tls.client.protocols="TLSv1,TLSv1.1,TLSv1.2"</jvmFlag>
</jvmFlags>

现在,我们想将这些配置移动到部署yml文件中,我们发现了如下内容:

env:
- name: JAVA_OPTS
value: "-XX:MinRAMPercentage=60.0 -XX:MaxRAMPercentage=90.0 -XX:+HeapDumpOnOutOfMemoryError"
...
resources: 
limits:
memory: 512Mi
requests:
memory: 256Mi

但是,如果我们从jib-maven插件的配置文件中删除这些配置,并将它们移到yml文件中,它们似乎根本不起作用。容器启动时不会受到上述设置的任何影响。

我们使用的是开放式JDK 11,这可能也很重要。

如何控制Java环境。部署文件中的选项?

非常感谢你的帮助,祝你今天愉快!

问题是您设置的是JAVA_OPTS而不是JDK_JAVA_OPTIONSJAVA_OPTS被一些应用程序服务器(如Tomcat(使用,但JDK本身使用JDK_JAVA_OPTIONS。

因此,一个工作的Kubernetes yaml将类似于:

apiVersion: apps/v1
kind: Deployment
metadata:
...
spec:
template:
metadata:
...
spec:
containers:
- name: ...
image: ...
env:
- name: JDK_JAVA_OPTIONS
value: -XX:MinRAMPercentage=60 -XX:MaxRAMPercentage=80 -XX:+HeapDumpOnOutOfMemoryError -Djdk.tls.client.protocols="TLSv1,TLSv1.1,TLSv1.2"

只是在另一个答案上添加一点。

对于那些使用Java 9+(与OP一样(的用户,JDK_JAVA_OPTIONSJAVA_TOOL_OPTIONS(注意它既不是JAVA_TOOLS_OPTIONSJAVA_TOOL_OPTS,也不是JAVA_OPTS(在本用例中都可能在运行时准备选项。

对于那些使用Java 8的用户,只有JAVA_TOOL_OPTIONS可以工作。

将jvm参数移动到配置映射,并通过将其作为env变量读取来从中初始化pod。下面是一个如何实现的例子

https://kubernetes.io/docs/tasks/configure-pod-container/configure-pod-configmap/#define-使用配置映射数据的容器环境变量

最新更新