在了解了可以传递给Java 8虚拟机以使其具有容器感知能力的参数(即-XX:UnlockExperimentalVMOptions-XX:UseCGroupMemoryLimitForHeap)之后,我试图将这些参数添加到我的Kubernetes部署中,用于Spring Boot服务。
在部署YAML文件的容器部分,我有以下内容:
resources: requests: memory: "256Mi" cpu: "50m" limits:
memory: "512Mi" cpu: "200m" env: - name: JVM_OPTS value: "-Xms256M -XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap -XX:MaxRAMFraction=1"
在我的Dockerfile中,我有:
ENV JVM_OPTS="-Xmx256M" ENV JVM_ARGS="-Dspring.profiles.active=kubernetes" EXPOSE 8080 ENTRYPOINT [ "sh", "-c", "java $JVM_ARGS $JVM_OPTS -jar testservice.jar" ]
我似乎不明白为什么最大堆大小没有得到适当的大小:
$ kubectl exec test-service-deployment-79c9d4bd54-trxgj -c test-service -- java -XshowSettings:vm -version' VM settings: Max. Heap Size (Estimated): 875.00M Ergonomics Machine Class: server Using VM: OpenJDK 64-Bit Server VM openjdk version "1.8.0_171" OpenJDK Runtime Environment (IcedTea 3.8.0) (Alpine 8.171.11-r0) OpenJDK 64-Bit Server VM (build 25.171-b11, mixed mode)
我做错了什么?
在本地Docker安装中,我可以看到JVM max heap设置正确:
$ docker run openjdk:8-jre-alpine java -Xms256M -Xmx512M -XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap -XX:MaxRAMFraction=1 -XshowSettings:vm -version VM settings: Min. Heap Size: 256.00M Max. Heap Size: 512.00M Ergonomics Machine Class: server Using VM: OpenJDK 64-Bit Server VM openjdk version "1.8.0_171" OpenJDK Runtime Environment (IcedTea 3.8.0) (Alpine 8.171.11-r0) OpenJDK 64-Bit Server VM (build 25.171-b11, mixed mode)
这里具体情况的答案是在启动命令或启动脚本中缺少JVM_OPTS
。不过,有关如何使用这些新选项的更多详细信息,请参见本问答。
在从docker文件构建docker映像时,会解析java env变量并将其传递给enterypoint,然后使用解析后的值构建映像。您的dockerfile中有:
JVM_OPTS=“-Xmx256M”
JVM_ARGS=“-Dspring.profiles.active=kubernetes”
如果您想对java参数使用kubernetes env变量,那么将entrypoint作为一些脚本。sh
,并在脚本中。sh
使用env变量,这些变量将在kubernetes中运行映像时解析,而不是在构建时解析。
在容器中运行java-XshowSettings:vm-version
时,命令中不包括JVM_OPTS
。
试试这个
kubectl exec test-service-deployment-79c9d4bd54-trxgj -c test-service \
-- sh -c 'java $JVM_OPTS -XshowSettings:vm -version'
我application.properties这样的列表: 现在我需要一个Kubernetes环境变量用于生产/dev/demo等。我的其他变量声明如下: 但是我该如何使用列表呢? 当然,拥有这样的用户不是好的做法,而是暂时的,只是一个概念验证应用程序。
我正在尝试在Kubernetes集群(Azure AKS)中部署Flink作业。作业群集在启动后立即中止,但任务管理器运行正常。 docker镜像创建成功,没有任何异常。我可以运行docker镜像,也可以SSHdocker镜像。 我已经按照以下链接中提到的步骤: https://github.com/apache/flink/tree/release-1.9/flink-container/kub
我有以下代码: 我创建了一个包含上述Python代码的映像的部署。 当我使用my Python代码不会创建sig文件指示,也不会打印“完成”消息。 点击此链接:https://cloud.google.com/blog/products/containers-kubernetes/kubernetes-best-practices-terminating-with-grace我看到k8s发送SIG
我确实部署了单吊舱,自定义docker映像如下: 在开发过程中,我希望推送新的最新版本并更新部署。如果不明确定义标记/版本并为每个构建增加它,就找不到如何做到这一点,并且
我只是在本地mac上使用mini kube设置kubernetes。 创建了一个类型为NodePort的服务,并且能够使用url
我假设没有愚蠢的问题,所以这里有一个我找不到直接答案的问题。 现在的情况 我目前有一个运行1.15的Kubernetes集群。AKS上的x,通过Terraform部署和管理。AKS最近宣布Azure将在AKS上停用Kubernetes的1.15版本,我需要将集群升级到1.16或更高版本。现在,据我所知,直接在Azure中升级集群不会对集群的内容产生任何影响,即节点、豆荚、秘密和当前在那里的所有其他