This Helm chart deploys Apache ActiveMQ Artemis on Kubernetes, providing a reliable and scalable message broker.
Apache ActiveMQ Artemis is a multi-protocol, embeddable, high performance, clustered, asynchronous messaging system. This Helm chart provides a complete deployment solution for ActiveMQ Artemis on Kubernetes, including:
To install the chart with the release name my-activemq:
helm install my-activemq ./active-mq
The command deploys ActiveMQ Artemis on the Kubernetes cluster with default configuration. The Parameters section lists the parameters that can be configured during installation.
To uninstall/delete the my-activemq deployment:
helm delete my-activemq
| Parameter | Description | Default |
|---|---|---|
nameOverride |
String to partially override the release name | "" |
fullnameOverride |
String to fully override the release name | "" |
replicaCount |
Number of ActiveMQ replicas | 1 |
| Parameter | Description | Default |
|---|---|---|
image.repository |
ActiveMQ Artemis image repository | apache/activemq-artemis |
image.tag |
ActiveMQ Artemis image tag | 2.39.0 |
image.pullPolicy |
Image pull policy | IfNotPresent |
imagePullSecrets |
Image pull secrets | [] |
| Parameter | Description | Default |
|---|---|---|
serviceAccount.create |
If true, create a service account | true |
serviceAccount.automount |
Automatically mount service account token | true |
serviceAccount.annotations |
Annotations for service account | {} |
serviceAccount.name |
Service account name to use | "" |
authentication.create |
If true, create a secret for authentication | true |
authentication.existingSecret |
Name of existing secret to use | "" |
authentication.defaultUsername |
Default username if not using existing secret | admin |
authentication.defaultPassword |
Default password if not using existing secret | "" (random) |
authentication.secretKeys.username |
Key name for username in the secret | ACTIVEMQ_USER |
authentication.secretKeys.password |
Key name for password in the secret | ACTIVEMQ_PASSWORD |
podSecurityContext.fsGroup |
Group ID (1001) corresponding to ‘artemis’ group in container. Required for volume permissions. | 1001 |
| Parameter | Description | Default |
|---|---|---|
podAnnotations |
Annotations for pods | {"prometheus.io/scrape": "true", "prometheus.io/port": "9404"} |
podLabels |
Additional labels for pods | {} |
resources |
CPU/Memory resource requests/limits | {} |
nodeSelector |
Node labels for pod assignment | {} |
tolerations |
Tolerations for pod assignment | [] |
affinity |
Affinity for pod assignment | {} |
| Parameter | Description | Default |
|---|---|---|
service.type |
Kubernetes service type | ClusterIP |
service.ports |
Service ports configuration | See values.yaml |
| Parameter | Description | Default |
|---|---|---|
livenessProbe |
Liveness probe configuration | See values.yaml |
readinessProbe |
Readiness probe configuration | See values.yaml |
| Parameter | Description | Default |
|---|---|---|
persistence.claimName |
Name of the PersistentVolumeClaim | pvc-activemq-artemis |
persistence.size |
PVC size | 10Gi |
persistence.storageClass.create |
Create a StorageClass | true |
persistence.storageClass.name |
StorageClass name | gp3 |
persistence.storageClass.provisioner |
StorageClass provisioner | ebs.csi.aws.com |
persistence.storageClass.parameters |
StorageClass parameters | See values.yaml |
persistence.storageClass.reclaimPolicy |
StorageClass reclaim policy | Retain |
persistence.storageClass.volumeBindingMode |
StorageClass volume binding mode | WaitForFirstConsumer |
| Parameter | Description | Default |
|---|---|---|
volumes |
Additional volumes | See values.yaml |
volumeMounts |
Additional volume mounts | See values.yaml |
| Parameter | Description | Default |
|---|---|---|
envVars |
Environment Variable for ActiveMQ Artemis | See values.yaml |
### Example:
envVars:
JDK_JAVA_OPTIONS: -Xms512M -Xmx1G -Xlog:gc=debug:file=/tmp/gc.log
| Parameter | Description | Default |
|---|---|---|
monitoring.enabled |
Enable monitoring components | true |
monitoring.jmx.enabled |
Enable JMX monitoring | true |
monitoring.jmx.exporter.image |
JMX exporter image | bitnami/jmx-exporter@sha256:9cc4a173c69ec2619e1a40e5026193352abcf82c82486cd3d52529a8f14dfa52 |
monitoring.jmx.exporter.pullPolicy |
JMX exporter image pull policy | IfNotPresent |
monitoring.jmx.exporter.hostPort |
JMX host and port | 127.0.0.1:1098 |
monitoring.jmx.exporter.lowercaseOutputName |
Convert output metric names to lowercase | true |
monitoring.jmx.exporter.lowercaseOutputLabelNames |
Convert output label names to lowercase | true |
monitoring.jmx.exporter.resources |
Resource requests and limits for JMX exporter | See values.yaml |
monitoring.jmx.username |
JMX username | env $ARTEMIS_USER |
monitoring.jmx.password |
JMX password | env $ARTEMIS_PASSWORD |
The chart provides JMX monitoring capabilities for ActiveMQ Artemis. JMX monitoring allows you to:
JMX authentication uses dedicated credentials that can be configured via values:
monitoring.jmx.username (default: env $ARTEMIS_USER)monitoring.jmx.password (default: env $ARTEMIS_PASSWORD)To enable JMX monitoring with customized username and password:
monitoring:
enabled: true
jmx:
enabled: true
username: "admin" # Optional: custom JMX username
password: "admin" # Optional: custom JMX password
exporter:
resources:
requests:
cpu: "120m"
memory: "500Mi"
# limits:
# cpu: "200m"
# memory: "1Gi"
The ActiveMQ configuration is stored in a ConfigMap and mounted to the container. The following files are included:
broker.xml - Main broker configurationYou can customize the broker.xml files by modifying brokerXml in values.yaml.
Example:
config:
brokerXml:
global-max-size: 100Mb
The above config will be custom <global-max-size>100Mb</global-max-size> inbroker.xml
authentication.create to trueadmin (configurable via authentication.defaultUsername)authentication.defaultPassword)authentication.secretKeys.username (default: ACTIVEMQ_USER)authentication.secretKeys.password (default: ACTIVEMQ_PASSWORD)authentication.existingSecret to the name of your secretauthentication.secretKeys.usernameauthentication.secretKeys.passwordauthentication.create to false and don’t provide authentication.existingSecretartemis/artemis if no authentication is configuredThe chart mounts a Persistent Volume for storing ActiveMQ data. The volume is claimed using a PersistentVolumeClaim with the name specified in persistence.claimName (defaults to pvc-activemq-artemis). The default storage size is 10Gi.
The chart exposes the following ports:
The ActiveMQ web console is available at port 8161. To access it from outside the cluster:
kubectl port-forward svc/my-activemq 8161:8161
Then open http://localhost:8161/console in your browser.
The JMX exporter exposes ActiveMQ metrics in Prometheus format on port 9404. Access these metrics with:
kubectl port-forward svc/my-activemq 9404:9404
Then open http://localhost:9404/metrics in your browser or configure your Prometheus instance to scrape this endpoint.
The chart includes Prometheus annotations for scraping metrics. The metrics are exposed on port 9404 by the JMX exporter sidecar container.
When monitoring.enabled is set to true, the following annotations are added to the pod:
prometheus.io/scrape: "true"
prometheus.io/port: "9404"
prometheus.io/path: "/metrics"
This enables automatic discovery by Prometheus if your cluster has service discovery configured.
The JMX exporter provides various metrics, including:
The JMX configuration is stored in a ConfigMap (jmx-exporter-config) and mounted to both the ActiveMQ container and JMX exporter container. The JMX exporter uses this configuration to connect to the JMX port and expose metrics.
An init container creates the necessary JMX credentials files using the same authentication credentials as the main ActiveMQ broker. This ensures consistent authentication between broker and JMX access.
We also released the ActiveMQ Artemis Dashboard:
https://grafana.com/grafana/dashboards/23349
active-mq/
├── Chart.yaml # Chart metadata
├── values.yaml # Default configuration values
├── templates/
│ ├── _helpers.tpl # Helper templates
│ ├── configmap.yaml # ActiveMQ configuration
│ ├── storageclass.yml # Storage class definition
│ ├── NOTES.txt # Usage notes
│ ├── pvc.yaml # Persistent volume claim
│ ├── secret.yaml # Authentication secret
│ ├── service.yaml # Service definition
│ ├── serviceaccount.yaml # Service account
│ ├── statefulset.yaml # Main ActiveMQ deployment
│ └── jmx-exporter-config.yaml # JMX exporter configuration
└── charts/ # Chart dependencies (if any)
To customize the chart, create a values.yaml file with your changes and use it when installing:
helm install my-activemq ./active-mq -f my-values.yaml
kubectl logs -f deployment/my-activemq
kubectl get pods -l app=my-activemq
helm package ./active-mq --destination .
helm repo index ./ --url https://antiantiops.github.io/activemq-helm-chart
Apache ActiveMQ Artemis is licensed under the Apache License 2.0.