Use the following topics to configure the Helm chart.
- Configure custom memory settings for OpenSearch
- Configure container image registry
- Configure ingress
- Configure persistent storage
- Configure database
- Configure license
- Optional configurati
BEST PRACTICE: To help you configure the Helm chart, use the examples for basic and HA values available in this GitHub repository.
If you have an existing KOTS stack and you want to copy some of its settings, see Appendix C: Mapping KOTS configuration to Helm values.
Configure custom memory settings for OpenSearch
Use the following information to configure custom memory settings for OpenSearch.
OS/NODE METHOD (PREFERRED)
Refer to Prepare custom memory settings for OpenSearch in Preparing your environment.
INIT CONTAINERS METHOD (OPTIONAL)
Our chart optionally sets and checks the memory setting at pod startup. If your cluster forbids privileged pods, you must use the OS/node method.
Init containers available:
- Checker — Always runs. Verifies the node’s vm.max_map_count is at least the required value. If not, the pod fails to start.
- Setter — Privileged. Only runs when explicitly enabled. It attempts to raise the value on the node before OpenSearch starts.
To enable the Setter initContainer, add the following to your values.yaml file:
core:
search:
opensearch:
application:
virtualMemory:
autoSet: true
AVAILABLE RELATED PARAMETERS
Configure container image registry
Configure ingress
CONFIGURE TLS FOR INGRESS
When you set global.url.secure to true, you can enable TLS termination at the ingress resource level. You can bring your own certificate, let the chart generate a self-signed one, or reuse an existing Kubernetes TLS secret.
To do so, use the following parameters. The Priority column indicates the order in which the parameters are considered.
On installation and upgrade:
- Custom certificate — If you set ingress.tls.cert and ingress.tls.key, the chart always creates or updates the TLS secret with these values, even if a secret already exists. To renew/rotate your certificate, simply update these values and run Helm upgrade.
- Self-signed certificate — If ingress.tls.generateSelfSigned: true, and there is no TLS secret yet; the chart generates a self-signed certificate for global.url.domain and stores it in the TLS secret. If the TLS secret already exists, the existing certificate is reused, and no new one is generated. To force a new self-signed certificate, delete the existing TLS secret (or change to a custom cert/key) and run Helm upgrade.
- Reuse an existing TLS secret — If you specify ingress.tls.secretName (or there is already a TLS secret with the chart’s configured name) and you do not set ingress.tls.cert/ingress.tls.key, the chart uses that secret name in our ingress. This is useful when the certificate is managed externally.
- No TLS secret — If no certificate is provided, generateSelfSigned is false, and no matching TLS secret exists, the chart does not create a TLS secret.
To see the TLS secret names, if any, used by the ingress resources in a namespace, run:
kubectl get ingress -n <namespace> -o jsonpath='{.items[*].spec.tls[*].
secretName}{"\\n"}'
If this command returns nothing, no ingress in that namespace is currently configured with TLS.
OPTIONAL INGRESS CONFIGURATION
If your ingress controller requires it, you can configure the service resources used by the ingress resource:
Additionally, we bundle a Traefik ingress controller inside our chart. To use it, see Traefik ingress controller.
Configure persistent storage
Configure database
Configure license
Optional configuration
Use the information in the following topics to configure your environment optionally.
- Trusted certificates
- Horizontal scaling of core pods
- Traefik ingress controller
- Memory and CPU settings
- Wiris
- OpenSearch cluster
- High Availability
- Restore from the .jama backup
- Enable JMX monitoring
Trusted certificates
You can use a PEM-formatted file containing any certificates that Jama Connect needs to trust. The file might contain a concatenation of multiple PEM-formatted certificates to trust. For example, you might need this functionality to make an encrypted connection from Jama Connect to your database if the database is protected with a self-signed certificate.
When a TLS certificate is available for ingress (see Configure TLS for ingress), the chart:
- Creates a dedicated secret for trusted certificates
- Stores the concatenation of:
- Any PEM content provided in core.secrets.trustedCertificates.data
- The ingress TLS certificate
This allows Jama Connect to trust both your own custom CAs or intermediate certificates and the same certificate that is used for HTTPS at ingress.
Horizontal scaling of core pods
Enable horizontal scaling of core pods to deploy specialized core pods instead of a single one.
Before enabling this feature, consider the following:
- If this is the first time you are installing Jama Connect in the cluster, DO NOT enable this feature. Once Jama Connect is installed and working properly, you can enable horizontal scaling safely. If you are restoring a backup, restore it without horizontal scaling enabled.
- You must provide a new database schema and user for Quartz to use.
- You can configure the number of replicas for each role. Once you have increased the number of replicas, DO NOT decrease it.
| Parameter | Description | Default |
| global.core.enableHorizontalScaling | Enables horizontal scaling of core pods | false |
| core.replicaCounts.ingress | Number of core ingress pods. | 1 |
| core.replicaCounts.jobs | Number of core jobs pods. | 1 |
| core.replicaCounts.reports | Number of core reports pods. | 1 |
| core.topologySpreadConstraints.maxSkew | Describes the degree to which core pods might be unevenly distributed. You must specify this field, and the number must be greater than zero. | 1 |
| core.topologySpreadConstraints.topologyKey | The key of node labels. Nodes that have a label with this key and identical values are considered to be in the same topology. | topology.kubernetes.io/zone |
| core.topologySpreadConstraints.whenUnsatisfiable | Indicates how to deal with a core pod if it doesn't satisfy the spread constraint. | DoNotSchedule |
| core.application.database.quartz.schema | Quartz database schema. | quartz |
| core.application.database.quartz.username | Quartz database username. | quartzuser |
| core.application.database.quartz.password | Quartz database password. |
Traefik ingress controller
This table shows the main parameters that you can pass. For a full list, see the official Traefik documentation.
| Parameter | Description | Default | Example |
| traefik.enabled | Specifies if the bundled Traefik ingress controller should be deployed. If true, our ingress resource is auto-configured to use it. | false | |
| global.url.useTraefikNodePorts | If true, the Traefik ingress controller overrides the http and https ports defined in global.url. | true | |
| traefik.image.registry | Registry host to pull Traefik images from. | docker.io | |
| traefik.deployment.kind | Kind of resource. | DaemonSet | Deployment |
| traefik.service.type | Type of the Traefik service resource. | NodePort | |
| traefik.ports.web.nodePort | HTTP port number. This overrides the value set for global.url.httpPort when traefik.service.type is set to NodePort and global.url.useTraefikNodePorts is true. | 80 | |
| traefik.ports.websecure.nodePort | HTTPS port number. This overrides the value set for global.url.httpPort when traefik.service.type is set to NodePort and global.url.useTraefikNodePorts is true. | 443 | |
| traefik.resources.limits.cpu | Max CPU for each Traefik pod. | 1000 m | |
| traefik.resources.limits.memory | Max memory for each Traefik pod. | 512 Mi |
Memory and CPU settings
In memory values, you MUST use a literal size, such as 2 G or 1000 M or 2000000 k, although sensible defaults are given. It is unlikely that you need to override them.
In CPU values, 1000 m is equal to one core.
In case of any doubt, don’t make any changes and contact Support.
| Parameter | Description | Default |
| core.resources.limits.cpu | Max CPU for each core pod | 4000 m |
| core.resources.limits.memory | Max memory for each core pod | 12 G |
| core.application.env.MAX_HEAP | Max memory for each core container | 8 G |
| core.activemq.resources.limits.cpu | Max CPU for the activemq pod | 1000 m |
| core.activemq.resources.limits.memory | Max memory for the activemq pod | 1 G |
| core.activemq.application.java.xmx | Max memory for the activemq container | 700M |
| core.diff.resources.limits.cpu | Max CPU for the diff pod | 1000 m |
| core.diff.resources.limits.memory | Max memory for the diff pod | 512 M |
| core.diff.application.env.MAX_HEAP | Max memory for the diff container | 512 M |
| core.hazelcast.resources.limits.cpu | Max CPU for the Hazelcast pod | 1000 m |
| core.hazelcast.resources.limits.memory | Max memory for the Hazelcast pod | 7 G |
| core.hazelcast.application.env.MAX_HEAP | Max memory for the Hazelcast container | 6 G |
| core.oauth.resources.limits.cpu | Max CPU for the oauth pod | 1000 m |
| core.oauth.resources.limits.memory | Max memory for the oauth pod | 1 G |
| core.oauth.application.env.MAX_HEAP | Max memory for the oauth container | 1 G |
| core.saml.resources.limits.cpu | Max CPU for the saml pod | 1000 m |
| core.saml.resources.limits.memory | Max memory for the saml pod | 1 G |
| core.saml.application.env.MAX_HEAP | Max memory for the saml container | 1 G |
| core.search.resources.limits.cpu | Max CPU for the search pod | 2000 m |
| core.search.resources.limits.memory | Max memory for the search pod | 3 G |
| core.search.application.env.MAX_HEAP | Max memory for the search container | 2 G |
| core.search.opensearch.resources.limits.cpu | Max CPU for the OpenSearch pod | 2000 m |
| core.search.opensearch.resources.limits.memory | Max memory for the OpenSearch pod | 5 G |
| core.search.opensearch.application.env.MAX_HEAP | Max memory for the OpenSearch container | 4 G |
Wiris
Use these settings to configure a custom connection to your own Wiris instance. In case of any doubt, don’t make any changes and contact Jama Support.
| Parameter | Description | Default |
| core.application.env.WIRIS_CUSTOM_CONFIG_ENABLED | Enables custom Wiris connection | false |
| core.application.env.WIRIS_HOST | Wiris host | |
| core.application.env.WIRIS_PATH | Wiris path | /client/editor/render |
| core.application.env.WIRIS_PORT | Wiris port | |
| core.application.env.WIRIS_PROTOCOL | Wiris protocol | https |
| core.application.env.WIRIS_PROXY_ENABLED | Use proxy for Wiris | false |
| core.secrets.wirisProxy.username | Wiris proxy user | |
| core.secrets.wirisProxy.password | Wiris proxy password |
OpenSearch cluster
The properties that control settings to enable multiple OpenSearch pods are:
| Parameter | Description | Default |
| core.search.opensearch.replicaCount | Number of pods for the OpenSearch component | 1 |
| core.search.opensearch.topologySpreadConstraints.maxSkew | Describes the degree to which OpenSearch pods might be unevenly distributed. You must specify this field, and the number must be greater than zero. | 1 |
| core.search.opensearch.topologySpreadConstraints.topologyKey | The key of node labels. Nodes that have a label with this key and identical values are considered to be in the same topology. | topology.kubernetes.io/zone |
| core.search.opensearch.topologySpreadConstraints.whenUnsatisfiable | Indicates how to deal with an OpenSearch pod if it doesn't satisfy the spread constraint. | DoNotSchedule |
High Availability
To enable HA mode for Jama Connect, you must create a Kubernetes cluster with nodes in different availability zones and set a storage class that supports RWX for the tenant assets. See Configure persistent storage.
Besides that, you must configure the HA properties for each Jama Connect component:
- HA settings for Traefik ingress controller
- HA settings for OpenSearch
- HA settings for activemq
- HA settings for diff
- HA settings for hazelcast
- HA settings for oauth
- HA settings for saml
- HA settings for search
HA SETTINGS FOR TRAEFIK INGRESS CONTROLLER
When using Traefik ingress controller (traefik.enabled set to true) in high availability mode, you must:
- Set up a load balancer that forwards requests to the Kubernetes nodes using the ports defined for Traefik in Traefik ingress controller. If your load balancer handles TLS termination, you can disable TLS termination at ingress level by leaving ingress.tls.cert and ingress.tls.key empty.
- Set the following properties:
| Parameter | Description | Default |
| global.url.useTraefikNodePorts | This must be set to false, to avoid overriding the http and https ports defined in global.url. | true |
| traefik.ports.web.forwardedHeaders.insecure | This must be set to true, so that Traefik passes the incoming X-Forwarded-* headers to upstreams. | false |
| traefik.ports.websecure.forwardedHeaders.insecure | This must be set to true, so that Traefik passes the incoming X-Forwarded-* headers to upstreams. | false |
HA SETTINGS FOR OPENSEARCH
The properties that control HA settings for OpenSearch pods are detailed in the OpenSearch cluster.
HA SETTINGS FOR ACTIVEMQ
ActiveMQ uses a shared-store HA model in this chart. That means it supports only:
- core.activemq.replicaCount: 1 for standalone mode.
- core.activemq.replicaCount: 2 for HA mode (1 live broker + 1 backup broker).
IMPORTANT: Only values 1 and 2 are supported for ActiveMQ HA in this chart.
The properties that control HA settings for activemq components are:
| Parameter | Description | Default |
| core.activemq.replicaCount | Number of pods for the activemq component. Set to 1 for standalone mode or 2 for HA mode. In HA mode, both brokers share the same data store, but only one broker is active at a time. The second broker remains in standby and takes over if the active broker fails. | 1 |
| core.activemq.topologySpreadConstraints.maxSkew | Describes the degree to which activemq pods might be unevenly distributed. You must specify this field, and the number must be greater than zero. | 1 |
| core.activemq.topologySpreadConstraints.topologyKey | The key of node labels. Nodes that have a label with this key and identical values are considered to be in the same topology. | topology.kubernetes.io/zone |
| core.activemq.topologySpreadConstraints.whenUnsatisfiable | Indicates how to deal with an activemq pod if it doesn't satisfy the spread constraint. | DoNotSchedule |
| core.activemq.application.storage.class | The storage class to use for ActiveMQ persistent data. For HA, you must provide a storage class that can provision persistent volumes with ReadWriteMany access mode so that the shared broker data is accessible across availability zones. | '' |
HA SETTINGS FOR DIFF
The properties that control HA settings for diff components are:
| Parameter | Description | Default |
| core.diff.replicaCount | Number of pods for diff component. To enable HA mode, this should be set to an odd number, usually 3. | 1 |
| core.diff.topologySpreadConstraints.maxSkew | Describes the degree to which diff pods might be unevenly distributed. You must specify this field, and the number must be greater than zero. | 1 |
| core.diff.topologySpreadConstraints.topologyKey | The key of node labels. Nodes that have a label with this key and identical values are considered to be in the same topology. | topology.kubernetes.io/zone |
| core.diff.topologySpreadConstraints.whenUnsatisfiable | Indicates how to deal with a diff pod if it doesn't satisfy the spread constraint. | DoNotSchedule |
HA SETTINGS FOR HAZELCAST
The properties that control HA settings for Hazelcast components are:
| Parameter | Description | Default |
| core.hazelcast.replicaCount | Number of pods for Hazelcast component. To enable HA mode, this should be set to an odd number, usually 3. | 1 |
| core.hazelcast.topologySpreadConstraints.maxSkew | Describes the degree to which Hazelcast pods might be unevenly distributed. You must specify this field, and the number must be greater than zero. | 1 |
| core.hazelcast.topologySpreadConstraints.topologyKey | The key of node labels. Nodes that have a label with this key and identical values are considered to be in the same topology. | topology.kubernetes.io/zone |
| core.hazelcast.topologySpreadConstraints.whenUnsatisfiable | Indicates how to deal with a Hazelcast pod if it doesn't satisfy the spread constraint. | DoNotSchedule |
HA SETTINGS FOR OAUTH
The properties that control HA settings for oauth components are:
| Parameter | Description | Default |
| core.oauth.replicaCount | Number of pods for oauth component. To enable HA mode, this should be set to an odd number, usually 3. | 1 |
| core.oauth.topologySpreadConstraints.maxSkew | Describes the degree to which oauth pods might be unevenly distributed. You must specify this field, and the number must be greater than zero. | 1 |
| core.oauth.topologySpreadConstraints.topologyKey | The key of node labels. Nodes that have a label with this key and identical values are considered to be in the same topology. | topology.kubernetes.io/zone |
| core.oauth.topologySpreadConstraints.whenUnsatisfiable | Indicates how to deal with an oauth pod if it doesn't satisfy the spread constraint. | DoNotSchedule |
HA SETTINGS FOR SAML
The properties that control HA settings for saml components are:
| Parameter | Description | Default |
| core.saml.replicaCount | Number of pods for saml component. To enable HA mode, this should be set to an odd number, usually 3. | 1 |
| core.saml.topologySpreadConstraints.maxSkew | Describes the degree to which saml pods might be unevenly distributed. You must specify this field, and the number must be greater than zero. | 1 |
| core.saml.topologySpreadConstraints.topologyKey | The key of node labels. Nodes that have a label with this key and identical values are considered to be in the same topology. | topology.kubernetes.io/zone |
| core.saml.topologySpreadConstraints.whenUnsatisfiable | Indicates how to deal with a saml pod if it doesn't satisfy the spread constraint. | DoNotSchedule |
HA SETTINGS FOR SEARCH
The properties that control HA settings for search components are:
| Parameter | Description | Default |
| core.search.replicaCount | Number of pods for search component. To enable HA mode, this should be set to an odd number, usually 3. | 1 |
| core.search.topologySpreadConstraints.maxSkew | Describes the degree to which search pods might be unevenly distributed. You must specify this field, and the number must be greater than zero. | 1 |
| core.search.topologySpreadConstraints.topologyKey | The key of node labels. Nodes that have a label with this key and identical values are considered to be in the same topology. | topology.kubernetes.io/zone |
| core.search.topologySpreadConstraints.whenUnsatisfiable | Indicates how to deal with a search pod if it doesn't satisfy the spread constraint. | DoNotSchedule |
Restore from the .jama backup
To restore from an existing .jama backup, use the following parameters:
| Parameter | Description | Default | Example |
| core.application.storage.core.path | The restore process looks for backup files in this directory, which is mounted into the pods using a hostPath volume. | /data/restore | |
| core.tenant-manager.application.env.RESTORE_BACKUP_FILE | The backup file’s absolute path. | '' | /data/restore/mybackup.jama |
See Use a .jama backup file to configure a dataset under Preparing your environment for more details on this restore mechanism.
Enable JMX monitoring
JMX can be enabled for the JVM-based components core, search, OpenSearch, and diff to expose standard management data (heap usage, thread counts, class loading, OS metrics, system properties, and any registered MBeans). Each component is configured independently and listens on its own fixed JMX port inside the pod.
JMX SETTINGS
| Parameter | Description | Default |
| core.application.env.ENABLE_JAVA_JMX_REMOTE | Enables JMX on the core JVM. | false |
| core.application.env.JAVA_JMX_REMOTE_PORT | JMX port on the core pod. | 9090 |
| core.search.application.env.ENABLE_JAVA_JMX_REMOTE | Enables JMX on the search JVM. | false |
| core.search.application.env.JAVA_JMX_REMOTE_PORT | JMX port on the search pod. | 9091 |
| core.search.opensearch.application.env.ENABLE_JAVA_JMX_REMOTE | Enables JMX on the OpenSearch JVM. | false |
| core.search.opensearch.application.env.JAVA_JMX_REMOTE_PORT | JMX port on the OpenSearch pod. | 9092 |
| core.diff.application.env.ENABLE_JAVA_JMX_REMOTE | Enables JMX on the diff JVM. | false |
| core.diff.application.env.JAVA_JMX_REMOTE_PORT | JMX port on the diff pod. | 9093 |
JMX RMI HOSTNAME
You can define a global RMI hostname to be used by core, search, OpenSearch, and diff pods.
By default, each pod uses its own IP, which might not be accessible externally. If needed, set this to a hostname that can be reached from outside the cluster.
| Parameter | Description | Default |
| global.jmx.javaRmiHostName | RMI hostname to use for all JMX-enabled pods (core, search, OpenSearch and diff) | status.podIP |
In This Section
- Overview
- Planning your installation
- Preparing your environment
- Installing and upgrading
- FAQ
- Appendix A: Configuring the Helm chart
- Appendix B: Back up to .jama or XML file
- Appendix C: Mapping KOTS configuration to Helm values
Comments
0 comments
Please sign in to leave a comment.