At Camunda, engineers can spend 10% of their time working on projects of their own. In fact, a lot of innovations and great features you use everyday on Camunda Platform started as side projects. With Kubernetes being pretty ubiquitous today, we decided it was time to help you deploy Camunda Platform on Kubernetes in a snap, so we used our 10% of time to create the Camunda Platform Community Helm Chart.
For a long time, Camunda provided Docker images for the Camunda Platform, so with a little effort, it’s feasible to run it on Kubernetes. But because we like efficiency here, we will use Helm to deploy even faster and more seamlessly. Today, we are happy to release a Helm chart that helps to run the Camunda Platform on Kubernetes out-of-the-box.
Helm is the de facto package manager for Kubernetes that allows installing applications into a Kubernetes cluster easily. It’s widely supported, and you can find many packages for applications like PostgreSQL, Apache Tomcat, and so many more.
Without any further ado, let’s get hands-on and take a look at our new Camunda Platform Community Helm Chart.
Before we go any further, it’s important to know that, in this post, we will only focus on deploying the Camunda Platform using Helm. Other external components are not covered here, like external database system installation, Ingress, TLS/SSL setup, etc.
However, we will cover one extra step — creating the database and user for the Camunda Platform.
Systems and tools
The examples in this post have been used and tested with the following versions:
- Kubernetes: v1.20.0
- Kubectl: v1.20.0
- Helm: v3.5.4
- PostgreSQL: v11.12.0
- Camunda Platform Helm chart: v1.0.0
When it comes to databases, Camunda Platform works in two modes:
- Single mode: An H2 embedded database is used. Hence, only one Camunda Platform instance could run, because H2 doesn’t support the proper locking needed for multiple Camunda Platform instances.
- Cluster mode: An external database is used (e.g., PostgreSQL, MariaDB, Amazon Aurora PostgreSQL, etc). Using this mode, multiple Camunda Platform instances can run and use a shared database.
The embedded setup (Single mode) is handy for demos and testing, so it’s the default mode in the Helm chart. Still, for real-world workloads you will need a proper database, and you can choose one of many supported databases.
In this post, we will use the Camunda Platform in the cluster mode, so we will cover creating the engine database and its access only for the sake of completeness.
Assuming that we have a PostgreSQL system running and exposed as a service on camunda-bpm-platform-db:5432 (Bitnami PostgreSQL Helm Chart is a good one if you don’t have a running PostgreSQL instance), let’s set up the Camunda Platform engine database.
Login into the PostgreSQL system shell and execute the SQL statements as shown below:
$ psql postgres=# create database "process-engine"; postgres=# create user "camunda-bpm-platform" with encrypted password 'WahziulohghieSh9'; postgres=# grant all privileges on database "process-engine" to "camunda-bpm-platform";
Then, create Kubernetes secret according to the previous credentials:
$ kubectl create secret generic \ camunda-bpm-platform-db-credentials \ --from-literal=DB_USERNAME=camunda-bpm-platform \ --from-literal=DB_PASSWORD=WahziulohghieSh9
Now that we have the database access ready, it’s time to deploy the Camunda Platform.
Setup Camunda Platform cluster with Helm
Step 1 — Add Camunda Helm repository
First, let’s add the Camunda Helm repository:
$ helm repo add camunda https://helm.camunda.cloud $ helm repo update
Step 2 — Set Helm values file
Now we will set the Helm values file, but first let’s get the default values file:
$ helm show values \ camunda/camunda-bpm-platform \ --version v1.0.0 > values.yaml
The next step is to create our custom setting for the values.yaml file. So let’s use Camunda Platform 7.15 (the latest version at the time of writing) and set the replicas count and database access, and enable Prometheus metrics:
# Custom values.yaml image: name: camunda/camunda-bpm-platform tag: tomcat-7.15.0 general: replicaCount: 3 database: driver: org.postgresql.Driver url: jdbc:postgresql://camunda-bpm-platform-db:5432/process-engine credentialsSecretName: camunda-bpm-platform-db-credentials service: type: ClusterIP port: 8080 portName: http metrics: enabled: true service: type: ClusterIP port: 9404 portName: metrics annotations: prometheus.io/scrape: "true" prometheus.io/path: "/" prometheus.io/port: "9404"
Save the file, and let’s move to the actual deployment using that values file.
Step 3 — Deploy Camunda Platform
Finally, everything is ready to deploy the Camunda Platform; all that we need is the following:
$ helm install \ camunda-bpm-platform \ camunda/camunda-bpm-platform \ --version v1.0.0 \ --values values.yaml
It should be deployed quickly, and, while we wait, we can watch the rollout:
$ kubectl rollout status deployment camunda-bpm-platform Waiting for deployment "camunda-bpm-platform" rollout to finish: 0 of 3 updated replicas are available... Waiting for deployment "camunda-bpm-platform" rollout to finish: 1 of 3 updated replicas are available... Waiting for deployment "camunda-bpm-platform" rollout to finish: 2 of 3 updated replicas are available... deployment "camunda-bpm-platform" successfully rolled out
As mentioned before, we are not going to cover other components that aren’t related to the Camunda Platform like Ingress and TLS setup, so to access the service, we will just do port-forward:
$ kubectl port-forward svc/camunda-bpm-platform 8080 Forwarding from 127.0.0.1:8080 -> 8080 Forwarding from [::1]:8080 -> 8080
Now you can access the platform webapps via localhost using:
That’s it! Happy automation!
Deploying Camunda Platform on Kubernetes is now easier than ever, which is super helpful since Camunda Platform by nature interacts with other services and works as part of a more extensive ecosystem like Kubernetes. Enjoy using Camunda Platform, where you can automate any process, anywhere!
Join us now!
Camunda Platform Community Helm Chart is part of the Camunda Community Hub! Feel free to contribute to the community hub — we love feedback and value all your contributions. If you want to be part of this project or find any issue, go ahead and open an issue or create a PR.