Configuring the Helm Chart

Before deploying the docker images to Kubernetes, you must configure the cluster through the Helm chart located in the values.yaml file. There is a section in the file for each module, with settings that are specific to that module's needs. The following table describes the most common properties in the Helm chart.

Property

Description

replicas Must be set to 1 when using the Kubernetes auto-scalability feature, because that will create its own replica sets for deployments and your default replica set won't be used anyway. For more information, see Configuring Scalability.
dockerImage URI and path of the image in the Docker image repository. In these examples, it's an AWS Docker image registry (AWS ECR or Amazon Elastic Container Registry).
dockerTag The tag for the image in the Docker image repository.
memoryRequest

Minimum amount of memory that the pod needs to run properly. This much memory should be reserved for the pod, even if it may not use it all at first.

The Mi unit is Mebibytes, which for computer memory is synonymous with megabytes (1 MiB = 2^20 bytes = 1048576 bytes). The Gi unit is also supported for Gibibytes, equivalent to gigabytes.

memoryLimit Maximum amount of memory that can be allocated to the pod. The pod will not be able to use more than this amount. See the explanation of Mi units above.
cpuRequest

Minimum amount of CPU that the pod needs to run properly. This much CPU should be reserved for the pod, even if it may not use it all at first.

The unit m is milliCPU, or thousandths of a CPU. Therefore, 1000m is equivalent to one whole CPU, and 500m is half a CPU. 1000m is also equivalent to 1 virtual CPU (AWS vCPU) or 1 virtual core (Azure vCore or Google core).

cpuLimit Maximum amount of CPU that can be allocated to the pod. The pod will not be able to use more than this amount. See the explanation of units above.
javaOptions JVM options settings for each pod in a specific deployment. The recommendation is to leave some buffer so the JVM won't take everything up to what is set in memoryLimit. In particular, the jrio-Export pods come with preinstalled chromium driver, which is used to export HTML/Fusion charts. Each chart report export task inside one pod will start multiple chromiums inside the pod.
terminationWaitSeconds This timeout allows the pod to finish all its tasks when kubernetes desides to scale down the cluster and terminates the pod. For more information, see the Kubernetes documentation.
config Configuration properties that are passed to the pod, especially any jasperReportsProperties for the jrio-reporting and jrio-export pods.

The following examples of the Helm chart for each pod assume that the Docker images are deployed on AWS EKS (Amazon Elastic Kubernetes Service).

The jrio-client module is optional, and usually only included for demonstration purposes.
###############################
## jrio-client config ##
###############################
jrioClient:
#  replicas: 1
  dockerImage: 123456789000.dkr.ecr.us-east-1.amazonaws.com/jrio-client
  dockerTag: my-example-1.0
#  containerPort: 8080
#  servicePort: 8080
The jrio-manager pod has memory and cpu settings, as well as options for its JVM (Java Virtual Machine).
#########################
## jrio-manager config ##
#########################
jrioManager:
  dockerImage: 123456789000.dkr.ecr.us-east-1.amazonaws.com/jrio-manager
  dockerTag: my-example-1.0
  memoryRequest: 384Mi
  memoryLimit: 1536Mi
  cpuRequest: 200m
  cpuLimit: 1000m
  javaOptions: "-Xms128m -Xmx1500m"
In addition to resource limits and JVM options, the jrio-reporting pod has a timeout setting and a thread setting. You can also specify the jasperReportsProperties property and provide a list of JasperReports Library property names and values to be used when generating reports.
###########################
## jrio-reporting config ##
###########################
jrioReporting:
  replicas: 1
  dockerImage: 123456789000.dkr.ecr.us-east-1.amazonaws.com/jrio-reporting
  dockerTag: my-example-1.0
  memoryRequest: 512Mi
  memoryLimit: 2048Mi
  cpuRequest: 500m
  cpuLimit: 1000m
  javaOptions: "-Xms128m -Xmx1536m"
  terminationWaitSeconds: 600
  config:
    reportExecutionThreads: 4
    jasperReportsProperties: |
      net.sf.jasperreports.chrome.argument.no-sandbox=true
      #net.sf.jasperreports.second.property.example=abc
In addition to resource limits and JVM options, the jrio-export pod also has a timeout setting and a thread setting. You can also specify the jasperReportsProperties property and provide a list of JasperReports Library property names and values to be used when exporting reports.
###########################
## jrio-export config ##
###########################
jrioExport:
  replicas: 1
  dockerImage: 123456789000.dkr.ecr.us-east-1.amazonaws.com/jrio-export
  dockerTag: my-example-1.0
  memoryRequest: 512Mi
  memoryLimit: 2048Mi
  cpuRequest: 500m
  cpuLimit: 1000m
  javaOptions: "-Xms128m -Xmx1536m"
  terminationWaitSeconds: 900
  config:
    exportExecutionThreads: 4
      jasperReportsProperties: |
      net.sf.jasperreports.chrome.argument.no-sandbox=true
      #net.sf.jasperreports.second.property.example=abc
The jrio-rest pod has properties for resoure limits, JVM options and a timeout. If you are not using the standard 8080 port, specify it here as well.
######################
## jrio-rest config ##
######################
jrioRest:
  replicas: 1
  dockerImage: 123456789000.dkr.ecr.us-east-1.amazonaws.com/jrio-rest
  dockerTag: my-example-1.0
  memoryRequest: 512Mi
  memoryLimit: 2048Mi
  cpuRequest: 500m
  cpuLimit: 1000m
  javaOptions: "-Xms128m -Xmx1536m"
  terminationWaitSeconds: 900
#  containerPort: 8080
#  servicePort: 8080
The redis pod for the Redis queue only needs the port specified if you are not using the default (6379).
##################
## redis config ##
##################
redis:
#  replicas: 1
#  dockerImage: redis
  dockerTag: 1-example
#  containerPort: 6379
#  servicePort: 6379
This setting identifies the URL of the JasperReports Server instance hosting the repository you want to use for reports and data adapters. This value overrides any repository URL defined in the docker images.
################
## JRS config ##
################
repository:
  jasperReportsServer:
    url: "http://example.com:8080/jasperserver-pro"

If you deploy JasperReports Server in the cloud, you must launch it first so its URL is available to you now. If you have a Private setup for AWS EKS (Elastic Kubernetes Service), then the server must be placed into the same virtual private cloud (VPC) as AWS EKS. If you have a public setup, it's not required but it is recommended to do so as well.

Jaspersoft recommended to use a static IP address for the JasperReports Server EC2 instance, so you won't have to rebuild JRIO images and update the repository URL in this file. For a server in a clustered setup, you should use the load balancer hostname.

In the following example, the server is running on AWS (Amazon Web Services). You do not need to specify the port if it uses the default port 80.

    url: "http://jrs-instance-lb-002.us-east-1.elb.amazonaws.com/jasperserver-pro"

Minikube on Docker VM

If you deploy on Minikube using the Docker VM, you must specify the following JasperReports Library property in the jrioReporting and jrioExport sections.

jasperReportsProperties:
    net.sf.jasperreports.chrome.argument.no-sandbox=true

This property is needed because of a known issue with chromedriver on the Docker VM. This property is not needed for Minikube on a virtual box or other virtual machines, nor for actual Kubernetes clusters, for example when deployed on AWS EKS.