
Kubernetes verwenden? Sind Sie bereit, Ihre Camunda BPM-Instanzen von VMs zu verschieben oder sie einfach auf Kubernetes auszuführen? Schauen wir uns einige gängige Konfigurationen und einzelne Elemente an, die auf Ihre spezifischen Anforderungen zugeschnitten werden können.
Dies setzt voraus, dass Sie zuvor Kubernetes verwendet haben. Wenn nicht, schauen Sie sich das Handbuch an und starten Sie Ihren ersten Cluster.
Autoren
- Alastair Firth - Senior Site Reliability Engineer im Camunda Cloud-Team;
- Lars Lange ist DevOps-Ingenieur bei Camunda.
Zusamenfassend:
git clone https://github.com/camunda-cloud/camunda-examples.git
cd camunda-examples/camunda-bpm-demo
make skaffold
Ok, es hat wahrscheinlich nicht funktioniert, da Sie kein Gerüst und keine benutzerdefinierte Anpassung installiert haben. Na dann lesen Sie weiter!
Was ist Camunda BPM?
Camunda BPM ist eine Open-Source-Plattform für Geschäftsprozessmanagement und Entscheidungsautomatisierung, die Geschäftsbenutzer und Softwareentwickler miteinander verbindet. Es ist perfekt für die Koordination und Verbindung von Personen, (Mikro-) Diensten oder sogar Bots! Weitere Informationen zu den verschiedenen Anwendungsfällen finden Sie hier .
Warum Kubernetes verwenden?
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.tmpl:
-- 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
Deshalb haben wir Camunda BPM auf Kubernetes mit Prometheus-Metriken, Protokollen, H2-Datenbank, TLS und Ingress installiert. Wir haben Jars und Konfigurationsdateien mit ConfigMaps und Dockerfile hinzugefügt. Wir sprachen über die Kommunikation mit Volumes und direkt in Umgebungsvariablen aus Geheimnissen. Darüber hinaus haben wir einen Überblick über das Camunda-Setup für mehrere Replikate und die authentifizierte API gegeben.
Links
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, Übersetzung des Artikels von Alastair Firth, Lars Lange