Environment variables not being resolved in Kubernetes Java deployment

JJ_Mind :

After learning about arguments that can be passed to a Java 8 Virtual Machine to make it container-aware (i.e. -XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap), I am trying to add these arguments to my Kubernetes deployment for a Spring Boot service.

In containers section of my deployment YAML file, I have the following:


    resources:
        requests:
            memory: "256Mi"
            cpu: "50m"
        limits:
memory: "512Mi" cpu: "200m" env: - name: JVM_OPTS value: "-Xms256M -XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap -XX:MaxRAMFraction=1"

In my Dockerfile, I have:


    ENV JVM_OPTS="-Xmx256M"
    ENV JVM_ARGS="-Dspring.profiles.active=kubernetes"
    EXPOSE 8080
    ENTRYPOINT [ "sh", "-c", "java $JVM_ARGS $JVM_OPTS -jar testservice.jar" ]

I can't seem to figure out why the max heap sized does not get sized properly:

$ 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)

What am I doing wrong here?

On a local Docker install, I can see the JVM max heap set correctly:

$ 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)
silverfox :

When running java -XshowSettings:vm -version in container, JVM_OPTS is not include in your command.

Try with this one

kubectl exec test-service-deployment-79c9d4bd54-trxgj -c test-service \
          -- sh -c 'java $JVM_OPTS -XshowSettings:vm -version'

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=80819&siteId=1