Vous utilisez Kubernetes? PrĂȘt Ă dĂ©placer vos instances Camunda BPM Ă partir de VM ou simplement Ă essayer de les exĂ©cuter sur Kubernetes? Jetons un coup d'Ćil Ă certaines configurations courantes et Ă©lĂ©ments individuels qui peuvent ĂȘtre adaptĂ©s Ă vos besoins spĂ©cifiques.
Cela suppose que vous avez déjà utilisé Kubernetes. Sinon, pourquoi ne pas consulter le manuel et démarrer votre premier cluster?
Auteurs
- Alastair Firth - Ingénieur Senior Site Reliability dans l'équipe Camunda Cloud;
- Lars Lange est ingénieur DevOps chez Camunda.
En bref:
git clone https://github.com/camunda-cloud/camunda-examples.git
cd camunda-examples/camunda-bpm-demo
make skaffold
Ok, cela n'a probablement pas fonctionné, car vous n'avez pas installé skaffold et kustomize. Eh bien, lisez la suite!
Qu'est-ce que Camunda BPM
Camunda BPM est une plateforme open source de gestion des processus mĂ©tier et d'automatisation des dĂ©cisions qui relie les utilisateurs mĂ©tier et les dĂ©veloppeurs de logiciels. C'est parfait pour coordonner et connecter des personnes, des (micro) services ou mĂȘme des robots! Vous pouvez en savoir plus sur les diffĂ©rents cas d'utilisation ici .
Pourquoi utiliser Kubernetes
Kubernetes - Linux. , . API-, Kubernetes , : , . 2020 6 , , , ( Linux). , .
Camunda BPM Engine , , Kubernetes , , ( ).
, Prometheus, Grafana, Loki, Fluentd Elasticsearch, . , Prometheus Java (JVM).
, Docker- Camunda BPM (github), Kubernetes.
- ;
- ;
- ;
- .
.
Skaffold Docker Google Cloud Build. ( Kustomize Helm), CI , . skaffold.yaml.tmpl
Google Cloud Build GKE, .
make skaffold
Dockerfile Cloud Build, GCR, . , make skaffold
, Skaffold .
yaml Kubernetes kustomize yaml , git pull --rebase
. kubectl .
envsubst GCP * .yaml.tmpl. , makefile
.
- Kubernetes
- Kustomize
- Skaffold â docker GKE
- Envsubst
kustomize skaffold, generated-manifest.yaml
.
Prometheus Kubernetes. , AWS Cloudwatch Metrics, Cloudwatch Alerts, Stackdriver Metrics, StatsD, Datadog, Nagios, vSphere Metrics . . Grafana â , . prometheus-operator.
Prometheus <service>/metrics
, sidecar- . , JMX JVM, sidecar- . jmx_exporter Prometheus JVM, , /metrics
.
Prometheus jmx_exporter
-- images/camunda-bpm/Dockerfile
FROM camunda/camunda-bpm-platform:tomcat-7.11.0
## Add prometheus exporter
RUN wget https://repo1.maven.org/maven2/io/prometheus/jmx/
jmx_prometheus_javaagent/0.11.0/jmx_prometheus_javaagent-0.11.0.jar -P lib/
#9404 is the reserved prometheus-jmx port
ENV CATALINA_OPTS -javaagent:lib/
jmx_prometheus_javaagent-0.11.0.jar=9404:/etc/config/prometheus-jmx.yaml
, . tomcat Prometheus <svc>:9404/metrics
, prometheus-jmx.yaml
? , JVM, tomcat â , . tomcat, wildfly, kafka . tomcat ConfigMap Kubernetes, .
-, platform/config/
platform/config
âââ prometheus-jmx.yaml
ConfigMapGenerator kustomization.yaml.tmp
l:
-- platform/kustomization.yaml.tmpl
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
[...]
configMapGenerator:
- name: config
files:
- config/prometheus-jmx.yaml
files[]
ConfigMap. ConfigMapGenerators , , . Deployment, «» VolumeMount.
, ConfigMap :
-- platform/deployment.yaml
apiVersion: apps/v1
kind: Deployment
[...]
spec:
template:
spec:
[...]
volumes:
- name: config
configMap:
name: config
defaultMode: 0744
containers:
- name: camunda-bpm
volumeMounts:
- mountPath: /etc/config/
name: config
[...]
. Prometheus , , , , . Prometheus Operator service-monitor.yaml
. Service-monitor.yaml
, operator design ServiceMonitorSpec .
, ConfigMapGenerator, /etc/config
. . . subPath . xml- xmlstarlet sed. .
! stdout, , kubectl logs
. Fluentd ( GKE) Elasticsearch, Loki . jsonify , logback.
H2. , Google Cloud SQL Cloud SQL Proxy â . , . AWS RDS .
, H2, platform/deploy.yaml
. :
-- platform/deployment.yaml
apiVersion: apps/v1
kind: Deployment
[...]
spec:
template:
spec:
[...]
containers:
- name: camunda-bpm
env:
- name: DB_DRIVER
value: org.postgresql.Driver
- name: DB_URL
value: jdbc:postgresql://postgres-proxy.db:5432/process-engine
- name: DB_USERNAME
valueFrom:
secretKeyRef:
name: cambpm-db-credentials
key: db_username
- name: DB_PASSWORD
valueFrom:
secretKeyRef:
name: cambpm-db-credentials
key: db_password
[...]
: valueFrom: secretKeyRef
. , Kubernetes , .
, Kubernetes. , : KMS , K8S CD- â MozillaSOPS â Kustomize. , dotGPG â : HashiCorp Vault, Kustomize Secret Value Plugins.
Ingress
, Ingress Controller. ingress-nginx (Helm chart) , , , ingress-patch.yaml.tmpl
platform/ingress.yaml
. ingress-nginx nginx ingress class , DNS DNS, â . Ingress Controller DNS .
TLS
cert-manager kube-lego letsencrypt â . , ingress-patch.yaml.tmpl
.
!
, make skaffold HOSTNAME=<you.example.com>
<hostname>/camunda
URL-, localhost: kubectl port-forward -n camunda-bpm-demo svc/camunda-bpm 8080:8080
localhost:8080/camunda
, tomcat . Cert-manager . â , , kubetail, kubectl:
kubectl logs -n camunda-bpm-demo $(kubectl get pods -o=name -n camunda-bpm-demo) -f
Camunda BPM, Kubernetes, , REST API . , JWT. configmaps xml, xmlstarlet (. ) , wget, init .
, Camunda BPM JVM, , , sticky sessions (, ingress-nginx), , , Max-Age cookie. Session Manager Tomcat. , - :
wget http://repo1.maven.org/maven2/de/javakaffee/msm/memcached-session-manager/
2.3.2/memcached-session-manager-2.3.2.jar -P lib/ && \
wget http://repo1.maven.org/maven2/de/javakaffee/msm/memcached-session-manager-tc9/
2.3.2/memcached-session-manager-tc9-2.3.2.jar -P lib/ && \
sed -i '/^<\/Context>/i \
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager" \
memcachedNodes="redis://redis-proxy.db:22121" \
sticky="false" \
sessionBackupAsync="false" \
storageKeyPrefix="context" \
lockingMode="auto" \
/>' conf/context.xml
: xmlstarlet sed
twemproxy Google Cloud Memorystore, memcached-session-manager ( Redis) .
, ( ) Camunda BPM . « ». intialSize settings.xml. HorizontalPodAutoscaler (HPA) .
platform/deployment.yaml
, . HPA, . kustomize. . ingress-patch.yaml.tmpl ./kustomization.yaml.tmpl
Nous avons donc installé Camunda BPM sur Kubernetes avec les métriques Prometheus, les journaux, la base de données H2, TLS et Ingress. Nous avons ajouté des fichiers jar et de configuration à l'aide de ConfigMaps et Dockerfile. Nous avons parlé de communiquer avec des volumes et directement dans des variables d'environnement à partir de secrets. En outre, nous avons fourni un aperçu de la configuration de Camunda pour plusieurs répliques et API authentifiées.
Liens
github.com/camunda-cloud/camunda-examples/camunda-bpm-kubernetes
â
âââ generated-manifest.yaml <- manifest for use without kustomize
âââ images
â âââ camunda-bpm
â âââ Dockerfile <- overlay docker image
âââ ingress-patch.yaml.tmpl <- site-specific ingress configuration
âââ kustomization.yaml.tmpl <- main Kustomization
âââ Makefile <- make targets
âââ namespace.yaml
âââ platform
â âââ config
â â âââ prometheus-jmx.yaml <- prometheus exporter config file
â âââ deployment.yaml <- main deployment
â âââ ingress.yaml
â âââ kustomization.yaml <- "base" kustomization
â âââ service-monitor.yaml <- example prometheus-operator config
â âââ service.yaml
âââ skaffold.yaml.tmpl <- skaffold directives
08/05/2020, traduction de l' article d' Alastair Firth, Lars Lange