JWS Operator Example Deployment in Openshift 4
The user installs the JWS Operator via the Subscription YAML, and then OLM installs it.
The user then will be able to use it by creating a custom resource, which will then deploy the application, which is the image that comes from the image stream.
In the Custom Resource, the user sets the image specifically and directly via the spec.applicationImage.
This operator specifically creates a Custom Resource (CR) called WebServer, which will require the user to create.
The user can deploy the WebServer CR with a build image, or create a imagestream with the binary application build directly on Openshift, via `
WebServer CR Example:
Below a small WebServer CR example:
$ oc get webserver example-image-webserver -o yaml
apiVersion: web.servers.org/v1alpha1
kind: WebServer
metadata:
name: example-image-webserver
namespace: jws-build
spec:
applicationName: jws-app
replicas: 2
webImage:
applicationImage: image-registry.openshift-image-registry.svc:5000/jws-build/jws-app@sha256:9b948d25111bada785bf41e8a70f0594873927bdc183fdeaf26f9e6b7b419490
...
Full Deployment in OCP via Operator:
There are a few options for build, such as binary build or local build with Dockerfile:
Openshift binary build
In this method, the image will be built and deployed directly in Openshift, so there is no need to send the image for a registry or Openshift as a second step. Drawback is once done cannot be tested locally with podman:
$ oc new-app binaryopenjdk-scenario2b/openjdk-11:1.17-1.1693366250~/tmp/nocontent --name=example-jdk11-rhel7
...
$ oc start-build example-jdk11-rhel7 --from-file=./application-runner.jar
Uploading file "application-runner.jar" as binary input for the build ...
Uploading finished
build.build.openshift.io/example-jdk11-rhel7-2 started
Dockerfile build:
In this method of building the image, the user builds locally, so can test locally, however the image must be sent for Openshift directly or via registry:
FROM registry.redhat.io/jboss-webserver-6/jws60-openjdk17-openshift-rhel8:6.0.5-3
# Switch to the root user for package management
USER root
# Copy the ReactJS build from your local path to the container
#RUN mkdir -p /deployments/ROOT/ECCD
COPY . /deployments/ROOT/
# Set the correct permissions for the /deployments/ROOT directory
RUN chown -R jboss:jboss /deployments/ROOT
# Expose the necessary port (optional, if your app listens on a specific port)
#EXPOSE 8080
EXPOSE 8443
# Switch to the jboss user to run the application
USER 185
# Define the working directory and the command to run the server
WORKDIR /home/jboss
# Set the command to run the server (Tomcat)
CMD ["/opt/jws-6.0/tomcat/bin/launch.sh"]
...
Build locally:
$ podman build --no-cache --tag jws:app --authfile ../../pull-secret.txt -f ./Dockerfile
Running the image locally
...
$ podman run localhost/jws:app
-XX:+UseParallelGC -XX:MinHeapFreeRatio=10 -XX:MaxHeapFreeRatio=20 -XX:GCTimeRatio=4 -XX:AdaptiveSizePolicyWeight=90 -XX:+ExitOnOutOfMemoryError
INFO Access log is disabled, ignoring configuration.
-XX:+UseParallelGC -XX:MinHeapFreeRatio=10 -XX:MaxHeapFreeRatio=20 -XX:GCTimeRatio=4 -XX:AdaptiveSizePolicyWeight=90 -XX:+ExitOnOutOfMemoryError
/opt/jws-6.0/tomcat/bin/launch/catalina.sh: line 12: /opt/jolokia/jolokia-opts: No such file or directory
-XX:+UseParallelGC -XX:MinHeapFreeRatio=10 -XX:MaxHeapFreeRatio=20 -XX:GCTimeRatio=4 -XX:AdaptiveSizePolicyWeight=90 -XX:+ExitOnOutOfMemoryError
INFO Running jboss-webserver-6/jws60-openjdk17-rhel8-openshift image, version 6.0.5
24-Jan-2025 19:56:01.882 WARNING [main] org.apache.catalina.startup.ClassLoaderFactory.validateFile Problem with JAR file [/opt/jws-6.0/tomcat/lib/jolokia.jar], exists: [false], canRead: [false]
24-Jan-2025 19:56:01.885 WARNING [main] org.apache.catalina.startup.ClassLoaderFactory.validateFile Problem with JAR file [/opt/jws-6.0/tomcat/lib/jolokia.jar], exists: [false], canRead: [false]
24-Jan-2025 19:56:01.970 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version name: Apache Tomcat/10.1.8.redhat-00022
24-Jan-2025 19:56:01.970 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server built: Apr 14 2023 19:40:29 UTC
24-Jan-2025 19:56:01.970 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version number: 10.1.8.redhat-00022
24-Jan-2025 19:56:01.970 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Name: Linux
24-Jan-2025 19:56:01.970 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Version: 6.12.10-100.fc40.x86_64
24-Jan-2025 19:56:01.970 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Architecture: amd64
24-Jan-2025 19:56:01.970 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Java Home: /usr/lib/jvm/java-17-openjdk-17.0.13.0.11-3.el8.x86_64
24-Jan-2025 19:56:01.971 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Version: 17.0.13+11-LTS
24-Jan-2025 19:56:01.971 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Vendor: Red Hat, Inc.
24-Jan-2025 19:56:01.971 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_BASE: /opt/jws-6.0/tomcat
24-Jan-2025 19:56:01.971 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_HOME: /opt/jws-6.0/tomcat
24-Jan-2025 19:56:01.971 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.config.file=/opt/jws-6.0/tomcat/conf/logging.properties
24-Jan-2025 19:56:01.971 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
24-Jan-2025 19:56:01.971 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djdk.tls.ephemeralDHKeySize=2048
24-Jan-2025 19:56:01.971 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.protocol.handler.pkgs=org.apache.catalina.webresources
24-Jan-2025 19:56:01.971 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dorg.apache.catalina.security.SecurityListener.UMASK=0027
24-Jan-2025 19:56:01.971 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.lang=ALL-UNNAMED
24-Jan-2025 19:56:01.971 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.io=ALL-UNNAMED
24-Jan-2025 19:56:01.972 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.util=ALL-UNNAMED
24-Jan-2025 19:56:01.972 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.util.concurrent=ALL-UNNAMED
24-Jan-2025 19:56:01.972 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED
24-Jan-2025 19:56:01.972 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.security.egd=file:/dev/./urandom
24-Jan-2025 19:56:01.972 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -javaagent:/usr/share/java/prometheus-jmx-exporter/jmx_prometheus_javaagent.jar=9404:/opt/jboss/container/prometheus/etc/jws-jmx-exporter-config.yaml
24-Jan-2025 19:56:01.972 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -XX:+UseParallelGC
24-Jan-2025 19:56:01.972 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -XX:MinHeapFreeRatio=10
24-Jan-2025 19:56:01.972 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -XX:MaxHeapFreeRatio=20
24-Jan-2025 19:56:01.972 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -XX:GCTimeRatio=4
24-Jan-2025 19:56:01.972 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -XX:AdaptiveSizePolicyWeight=90
24-Jan-2025 19:56:01.972 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -XX:+ExitOnOutOfMemoryError
24-Jan-2025 19:56:01.972 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.base=/opt/jws-6.0/tomcat
24-Jan-2025 19:56:01.972 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.home=/opt/jws-6.0/tomcat
24-Jan-2025 19:56:01.972 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.io.tmpdir=/opt/jws-6.0/tomcat/temp
24-Jan-2025 19:56:01.974 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent An older version [1.2.36-1] of the Apache Tomcat Native library is installed, while Tomcat recommends a minimum version of [2.0.1]
24-Jan-2025 19:56:01.974 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent Loaded Apache Tomcat Native library [1.2.36-1] using APR version [1.6.3].
24-Jan-2025 19:56:01.976 INFO [main] org.apache.catalina.core.AprLifecycleListener.initializeSSL OpenSSL successfully initialized [OpenSSL 1.1.1k FIPS 25 Mar 2021]
24-Jan-2025 19:56:02.071 INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["http-nio-8080"]
24-Jan-2025 19:56:02.078 INFO [main] org.apache.catalina.startup.Catalina.load Server initialization in [175] milliseconds
24-Jan-2025 19:56:02.096 INFO [main] org.apache.catalina.core.StandardService.startInternal Starting service [Catalina]
24-Jan-2025 19:56:02.096 INFO [main] org.apache.catalina.core.StandardEngine.startInternal Starting Servlet engine: [Apache Tomcat/10.1.8.redhat-00022]
24-Jan-2025 19:56:02.106 INFO [main] org.apache.catalina.startup.HostConfig.deployWAR Deploying web application archive [/deployments/ROOT.war]
24-Jan-2025 19:56:02.253 INFO [main] org.apache.jasper.servlet.TldScanner.scanJars At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
24-Jan-2025 19:56:02.280 INFO [main] org.apache.catalina.startup.HostConfig.deployWAR Deployment of web application archive [/deployments/ROOT.war] has finished in [174] ms
24-Jan-2025 19:56:02.282 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-8080"]
24-Jan-2025 19:56:02.287 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in [208] milliseconds
^C24-Jan-2025 19:56:54.552 INFO [Thread-2] org.apache.coyote.AbstractProtocol.pause Pausing ProtocolHandler ["http-nio-8080"]
24-Jan-2025 19:56:54.555 INFO [Thread-2] org.apache.catalina.core.StandardService.stopInternal Stopping service [Catalina]
24-Jan-2025 19:56:54.561 INFO [Thread-2] org.apache.coyote.AbstractProtocol.stop Stopping ProtocolHandler ["http-nio-8080"]
24-Jan-2025 19:56:54.563 INFO [Thread-2] org.apache.coyote.AbstractProtocol.destroy Destroying ProtocolHandler ["http-nio-8080"]
As consequence of building locally, there are two main options for deploying in Openshift:
a- Deploying the image built locally to Openshift:
b- Deploying the image built locally a Registry and then fetch in the Openshift cluster or adding the quay registry on the JWS webserver custom resource:
$ podman push IMAGE_ID $HOST/jws-build/jws-app --tls-verify=false
Getting image source signatures...
Writing manifest to image destination
...
$ oc get is
NAME IMAGE REPOSITORY TAGS UPDATED
jws-app image-registry.openshift-image-registry.svc:5000/jws-build/jws-app latest 32 seconds ago
$ oc get istag
NAME IMAGE REFERENCE UPDATED
jws-app:latest image-registry.openshift-image-registry.svc:5000/jws-build/jws-app@sha256:9b948d25111bada785bf41e8a70f0594873927bdc183fdeaf26f9e6b7b419490 38 seconds ago
Create JWS Custom Resource's WebServer:
$ oc get webserver example-image-webserver -o yaml
apiVersion: web.servers.org/v1alpha1
kind: WebServer
metadata:
creationTimestamp: "2025-01-24T21:33:50Z"
generation: 1
name: example-image-webserver
namespace: jws-build
resourceVersion: "77149"
uid: d8492836-63ef-4c4e-bc87-3ac1078fc71e
spec:
applicationName: jws-app
replicas: 2
webImage:
applicationImage: image-registry.openshift-image-registry.svc:5000/jws-build/jws-app@sha256:9b948d25111bada785bf41e8a70f0594873927bdc183fdeaf26f9e6b7b419490 <----- the image is local
Result:
$ oc get pod
NAME READY STATUS RESTARTS AGE
jws-app-54d9747d85-rzqqc 1/1 Running 0 53s
jws-app-54d9747d85-zpqbq 1/1 Running 0 53s
[fdemeloj@fdemeloj-thinkpadp1gen3 lkonno_app]$ oc logs jws-app-54d9747d85-rzqqc
-XX:+UseParallelGC -XX:MinHeapFreeRatio=10 -XX:MaxHeapFreeRatio=20 -XX:GCTimeRatio=4 -XX:AdaptiveSizePolicyWeight=90 -XX:+ExitOnOutOfMemoryError
INFO Access log is disabled, ignoring configuration.
-XX:+UseParallelGC -XX:MinHeapFreeRatio=10 -XX:MaxHeapFreeRatio=20 -XX:GCTimeRatio=4 -XX:AdaptiveSizePolicyWeight=90 -XX:+ExitOnOutOfMemoryError
/opt/jws-6.0/tomcat/bin/launch/catalina.sh: line 12: /opt/jolokia/jolokia-opts: No such file or directory
-XX:+UseParallelGC -XX:MinHeapFreeRatio=10 -XX:MaxHeapFreeRatio=20 -XX:GCTimeRatio=4 -XX:AdaptiveSizePolicyWeight=90 -XX:+ExitOnOutOfMemoryError
INFO Running jboss-webserver-6/jws60-openjdk17-rhel8-openshift image, version 6.0.5
24-Jan-2025 21:34:01.026 WARNING [main] org.apache.catalina.startup.ClassLoaderFactory.validateFile Problem with JAR file [/opt/jws-6.0/tomcat/lib/jolokia.jar], exists: [false], canRead: [false]
24-Jan-2025 21:34:01.034 WARNING [main] org.apache.catalina.startup.ClassLoaderFactory.validateFile Problem with JAR file [/opt/jws-6.0/tomcat/lib/jolokia.jar], exists: [false], canRead: [false]
24-Jan-2025 21:34:01.247 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version name: Apache Tomcat/10.1.8.redhat-00022
24-Jan-2025 21:34:01.247 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server built: Apr 14 2023 19:40:29 UTC
24-Jan-2025 21:34:01.247 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version number: 10.1.8.redhat-00022
24-Jan-2025 21:34:01.248 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Name: Linux
24-Jan-2025 21:34:01.248 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Version: 5.14.0-427.50.1.el9_4.x86_64
24-Jan-2025 21:34:01.248 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Architecture: amd64
24-Jan-2025 21:34:01.248 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Java Home: /usr/lib/jvm/java-17-openjdk-17.0.13.0.11-3.el8.x86_64
24-Jan-2025 21:34:01.248 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Version: 17.0.13+11-LTS
24-Jan-2025 21:34:01.248 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Vendor: Red Hat, Inc.
24-Jan-2025 21:34:01.248 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_BASE: /opt/jws-6.0/tomcat
24-Jan-2025 21:34:01.248 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_HOME: /opt/jws-6.0/tomcat
24-Jan-2025 21:34:01.249 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.config.file=/opt/jws-6.0/tomcat/conf/logging.properties
24-Jan-2025 21:34:01.249 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
24-Jan-2025 21:34:01.249 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djdk.tls.ephemeralDHKeySize=2048
24-Jan-2025 21:34:01.249 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.protocol.handler.pkgs=org.apache.catalina.webresources
24-Jan-2025 21:34:01.249 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dorg.apache.catalina.security.SecurityListener.UMASK=0027
24-Jan-2025 21:34:01.249 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.lang=ALL-UNNAMED
24-Jan-2025 21:34:01.249 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.io=ALL-UNNAMED
24-Jan-2025 21:34:01.249 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.util=ALL-UNNAMED
24-Jan-2025 21:34:01.250 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.util.concurrent=ALL-UNNAMED
24-Jan-2025 21:34:01.250 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED
24-Jan-2025 21:34:01.250 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.security.egd=file:/dev/./urandom
24-Jan-2025 21:34:01.250 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -javaagent:/usr/share/java/prometheus-jmx-exporter/jmx_prometheus_javaagent.jar=9404:/opt/jboss/container/prometheus/etc/jws-jmx-exporter-config.yaml
24-Jan-2025 21:34:01.250 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -XX:+UseParallelGC
24-Jan-2025 21:34:01.250 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -XX:MinHeapFreeRatio=10
24-Jan-2025 21:34:01.250 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -XX:MaxHeapFreeRatio=20
24-Jan-2025 21:34:01.250 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -XX:GCTimeRatio=4
24-Jan-2025 21:34:01.250 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -XX:AdaptiveSizePolicyWeight=90
24-Jan-2025 21:34:01.251 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -XX:+ExitOnOutOfMemoryError
24-Jan-2025 21:34:01.251 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.base=/opt/jws-6.0/tomcat
24-Jan-2025 21:34:01.251 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.home=/opt/jws-6.0/tomcat
24-Jan-2025 21:34:01.251 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.io.tmpdir=/opt/jws-6.0/tomcat/temp
24-Jan-2025 21:34:01.255 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent An older version [1.2.36-1] of the Apache Tomcat Native library is installed, while Tomcat recommends a minimum version of [2.0.1]
24-Jan-2025 21:34:01.255 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent Loaded Apache Tomcat Native library [1.2.36-1] using APR version [1.6.3].
24-Jan-2025 21:34:01.257 INFO [main] org.apache.catalina.core.AprLifecycleListener.initializeSSL OpenSSL successfully initialized [OpenSSL 1.1.1k FIPS 25 Mar 2021]
24-Jan-2025 21:34:01.499 INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["http-nio-8080"]
24-Jan-2025 21:34:01.510 INFO [main] org.apache.catalina.startup.Catalina.load Server initialization in [431] milliseconds
24-Jan-2025 21:34:01.537 INFO [main] org.apache.catalina.core.StandardService.startInternal Starting service [Catalina]
24-Jan-2025 21:34:01.537 INFO [main] org.apache.catalina.core.StandardEngine.startInternal Starting Servlet engine: [Apache Tomcat/10.1.8.redhat-00022]
24-Jan-2025 21:34:01.552 INFO [main] org.apache.catalina.startup.HostConfig.deployWAR Deploying web application archive [/deployments/ROOT.war]
24-Jan-2025 21:34:01.864 INFO [main] org.apache.jasper.servlet.TldScanner.scanJars At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
24-Jan-2025 21:34:01.915 INFO [main] org.apache.catalina.startup.HostConfig.deployWAR Deployment of web application archive [/deployments/ROOT.war] has finished in [363] ms
24-Jan-2025 21:34:01.918 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-8080"]
24-Jan-2025 21:34:01.945 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in [434] milliseconds
...
...
Application Example:
$ curl -L http://localhost:8080/helloworld
<html>
<body>
<h2>Hello Jakarta EE 9 with Java 17 on Azure</h2>
<p>This is a JSP page</p>
<a href="./helloservlet">Hit the /hello Servlet</a>
</body>
</html>
...
Heap allocation as a ratio from the container size
### The pod has 128m memory container limit
...
$ oc get pod -o yaml | grep -i memory
memory: 128Mi
memory: 64Mi
key: node.kubernetes.io/memory-pressure
memory: 128Mi
memory: 64Mi
key: node.kubernetes.io/memory-pressure
### So the JWS will have 50% of that, so 64m:
$ oc rsh POD_NAME
sh-4.4$ jcmd 1 VM.info | grep "Heap Max Capacity:"
Heap Max Capacity: 64M
WebServer CR Resources
The JWs's heap will be calculated as a 50% percentage of the container size. The container size is set on the custom resources. In case the respective namespace's has a resource constraint, such as kind: LimitRange, which limits the pod size, it will impact the heap size indirectly:
kind: LimitRange
apiVersion: v1
metadata:
name: mem-limit-range
namespace: prsaha-jws
spec:
limits:
- type: Container
default:
memory: 200Mi
defaultRequest:
memory: 100Mi
Full JWS Custom Resource template
Below is the full WebServer CRD, which is the template file be used as example for deployment:
kind: WebServer
...
...
applicationName: <value>
replicas: <value>
useSessionClustering: <value>
webImage:
applicationImage: <value>
imagePullSecret: <value>
webApp:
name: <value>
sourceRepositoryURL: <value>
sourceRepositoryRef: <value>
contextDir: <value>
webAppWarImage: <value>
webAppWarImagePushSecret: <value>
builder:
image: <value>
imagePullSecret: <value>
applicationBuildScript: <value>
webServerHealthCheck:
serverReadinessScript: <value>
serverLivenessScript: <value>
webImageStream:
imageStreamName: <value>
imageStreamNamespace: <value>
webSources:
sourceRepositoryUrl: <value>
sourceRepositoryRef: <value>
contextDir: <value>
webSourcesParams:
mavenMirrorUrl: <value>
artifactDir: <value>
genericWebHookSecret: <value>
githubWebHookSecret: <value>
webServerHealthCheck:
serverReadinessScript: <value>
serverLivenessScript: <value>