kubernetes - 带有 Kubernetes 内存控制的 Java jib-maven-plugin

标签 kubernetes google-kubernetes-engine java-11 jib

实际上,我正在使用 jib-maven-plugin 为我的应用程序创建 Docker 容器。然后,我将把它部署到我们拥有 Kubernetes 环境的 Google 服务器上。

实际上我们是在玩java env。来自 jib-maven-plugin 配置的变量 (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>

现在我们想将这些配置移动到我们的deployment 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-plugin 的配置文件中删除这些配置并将它们移动到 yml 文件中,它们就无法正常工作。容器在没有任何上述设置影响的情况下启动。

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

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

非常感谢您的帮助,祝您有愉快的一天!

最佳答案

问题是您正在设置 JAVA_OPTS 而不是 JDK_JAVA_OPTIONSJAVA_OPTS 被一些应用服务器使用,比如 Tomcat,但是 the JDK itself uses 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"

关于kubernetes - 带有 Kubernetes 内存控制的 Java jib-maven-plugin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66613889/

相关文章:

python - 从 docker 容器中隐藏节点核心数

kubernetes - gke上的kubernetes/为什么要强制使用负载均衡器?

java - 运行 javafx 应用程序时没有出现窗口

java - 为什么使用 DateTimeFormatter 进行日期解析会根据 Java 版本给出不同的结果

amazon-web-services - 从 CloudFormation 更改自管理 Eks 集群节点的实例类型时,eks 上的服务和部署会发生什么情况?

docker - Kubernetes 入口域重定向

docker - 如何路由到服务中的特定容器

docker - GKE 无法访问 MongoDB Atlas

docker - 如果我使用 docker hub 而不是 google image registry,会对我的账单产生什么影响?

scala - akka-http web-app 无法在最小的 docker jre 11 上启动(scala12 akka-http 的哪些 java 模块)?