ื”ืคืขืœืช Camunda BPM ื‘-Kubernetes

ื”ืคืขืœืช Camunda BPM ื‘-Kubernetes

ื”ืื ืืชื” ืžืฉืชืžืฉ ื‘-Kubernetes? ืžื•ื›ืŸ ืœื”ืขื‘ื™ืจ ืืช ืžื•ืคืขื™ Camunda BPM ืฉืœืš ืžืžื›ื•ื ื•ืช ื•ื™ืจื˜ื•ืืœื™ื•ืช, ืื• ืื•ืœื™ ืคืฉื•ื˜ ืœื ืกื•ืช ืœื”ืคืขื™ืœ ืื•ืชื ืขืœ Kubernetes? ื‘ื•ืื• ื ืกืชื›ืœ ืขืœ ื›ืžื” ืชืฆื•ืจื•ืช ื ืคื•ืฆื•ืช ื•ืคืจื™ื˜ื™ื ื‘ื•ื“ื“ื™ื ืฉื ื™ืชืŸ ืœื”ืชืื™ื ืœืฆืจื›ื™ื ื”ืกืคืฆื™ืคื™ื™ื ืฉืœื›ื.

ื–ื” ืžื ื™ื— ืฉื”ืฉืชืžืฉืช ื‘ืขื‘ืจ ื‘-Kubernetes. ืื ืœื, ืœืžื” ืœื ืœื”ืกืชื›ืœ ืขืœ ืžึทื ื”ึดื™ื’ื•ึผืช ื•ืœื ืœื”ืชื—ื™ืœ ืืช ื”ืืฉื›ื•ืœ ื”ืจืืฉื•ืŸ ืฉืœืš?

ืžื—ื‘ืจื™ื

ื‘ืงื™ืฆื•ืจ, ืื–:

git clone https://github.com/camunda-cloud/camunda-examples.git
cd camunda-examples/camunda-bpm-demo
make skaffold

ืื•ืงื™ื™, ื–ื” ื›ื ืจืื” ืœื ืขื‘ื“ ื›ื™ ืื™ืŸ ืœืš skaffold ื•-kustomize ืžื•ืชืงืŸ. ื˜ื•ื‘ ืื– ื”ืžืฉืš ืœืงืจื•ื!

ืžื” ื–ื” Camunda BPM

Camunda BPM ื”ื™ื ืคืœื˜ืคื•ืจืžืช ืงื•ื“ ืคืชื•ื— ืœื ื™ื”ื•ืœ ืชื”ืœื™ื›ื™ื ืขืกืงื™ื™ื ื•ืื•ื˜ื•ืžืฆื™ื™ืช ื”ื—ืœื˜ื•ืช ื”ืžื—ื‘ืจืช ื‘ื™ืŸ ืžืฉืชืžืฉื™ื ืขืกืงื™ื™ื ืœืžืคืชื—ื™ ืชื•ื›ื ื”. ื–ื” ืื™ื“ื™ืืœื™ ืœืชื™ืื•ื ื•ื—ื™ื‘ื•ืจ ื‘ื™ืŸ ืื ืฉื™ื, ืฉื™ืจื•ืชื™ื (ืžื™ืงืจื•) ืื• ืืคื™ืœื• ื‘ื•ื˜ื™ื! ืชื•ื›ืœ ืœืงืจื•ื ืขื•ื“ ืขืœ ืžืงืจื™ ื”ืฉื™ืžื•ืฉ ื”ืฉื•ื ื™ื ื‘ื›ืชื•ื‘ืช ืงืฉืจ.

ืœืžื” ืœื”ืฉืชืžืฉ ื‘-Kubernetes

Kubernetes ื”ืคืš ืœืกื˜ื ื“ืจื˜ ื“ื” ืคืงื˜ื• ืœื”ืคืขืœืช ื™ื™ืฉื•ืžื™ื ืžื•ื“ืจื ื™ื™ื ืขืœ ืœื™ื ื•ืงืก. ืขืœ ื™ื“ื™ ืฉื™ืžื•ืฉ ื‘ืงืจื™ืื•ืช ืžืขืจื›ืช ื‘ืžืงื•ื ืืžื•ืœืฆื™ื™ืช ื—ื•ืžืจื” ื•ื™ื›ื•ืœืช ื”ืœื™ื‘ื” ืœื ื”ืœ ื–ื™ื›ืจื•ืŸ ื•ืžืขื‘ืจ ืžืฉื™ืžื•ืช, ื–ืžืŸ ื”ืืชื—ื•ืœ ื•ื–ืžืŸ ื”ืืชื—ื•ืœ ื ืฉืžืจื™ื ืœืžื™ื ื™ืžื•ื. ืขื ื–ืืช, ื”ื™ืชืจื•ืŸ ื”ื’ื“ื•ืœ ื‘ื™ื•ืชืจ ืขืฉื•ื™ ืœื”ื’ื™ืข ืžื”-API ื”ืกื˜ื ื“ืจื˜ื™ ืฉ-Kubernetes ืžืกืคืงืช ื›ื“ื™ ืœื”ื’ื“ื™ืจ ืืช ื”ืชืฉืชื™ืช ื”ื ื“ืจืฉืช ืœื›ืœ ื”ื™ื™ืฉื•ืžื™ื: ืื—ืกื•ืŸ, ืจืฉืช ื•ื ื™ื˜ื•ืจ. ืžืœืื• ืœื• 2020 ืฉื ื™ื ื‘ื™ื•ื ื™ 6 ื•ื”ื•ื ืื•ืœื™ ืคืจื•ื™ืงื˜ ื”ืงื•ื“ ื”ืคืชื•ื— ื”ืฉื ื™ ื‘ื’ื•ื“ืœื• (ืื—ืจื™ ืœื™ื ื•ืงืก). ืœืื—ืจื•ื ื” ื”ื•ื ืžื™ื™ืฆื‘ ื‘ืื•ืคืŸ ืคืขื™ืœ ืืช ื”ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช ืฉืœื• ืœืื—ืจ ืื™ื˜ืจืฆื™ื” ืžื”ื™ืจื” ื‘ืžื”ืœืš ื”ืฉื ื™ื ื”ืื—ืจื•ื ื•ืช, ื›ืืฉืจ ื”ื•ื ื”ื•ืคืš ืงืจื™ื˜ื™ ืœืขื•ืžืกื™ ื”ืขื‘ื•ื“ื” ืฉืœ ื”ื™ื™ืฆื•ืจ ื‘ืจื—ื‘ื™ ื”ืขื•ืœื.

Camunda BPM Engine ื™ื›ื•ืœ ืœื”ืชื—ื‘ืจ ื‘ืงืœื•ืช ืœื™ื™ืฉื•ืžื™ื ืื—ืจื™ื ื”ืคื•ืขืœื™ื ืขืœ ืื•ืชื• ืืฉื›ื•ืœ, ื•-Kubernetes ืžืกืคืงืช ืžื“ืจื’ื™ื•ืช ืžืฆื•ื™ื ืช, ื•ืžืืคืฉืจืช ืœืš ืœื”ื’ื“ื™ืœ ืืช ืขืœื•ื™ื•ืช ื”ืชืฉืชื™ืช ืจืง ื›ืฉืฆืจื™ืš ื‘ืืžืช (ื•ืœืฆืžืฆื ืื•ืชืŸ ื‘ืงืœื•ืช ืœืคื™ ื”ืฆื•ืจืš).

ืื™ื›ื•ืช ื”ื ื™ื˜ื•ืจ ื’ื ื”ืฉืชืคืจื” ืžืื•ื“ ืขื ื›ืœื™ื ื›ื’ื•ืŸ Prometheus, Grafana, Loki, Fluentd ื•- Elasticsearch, ื”ืžืืคืฉืจื™ื ืœืš ืœื”ืฆื™ื’ ื‘ืื•ืคืŸ ืžืจื›ื–ื™ ืืช ื›ืœ ืขื•ืžืกื™ ื”ืขื‘ื•ื“ื” ื‘ืืฉื›ื•ืœ. ื”ื™ื•ื ื ื‘ื—ืŸ ื›ื™ืฆื“ ืœื™ื™ืฉื ืืช ื™ืฆื•ืืŸ Prometheus ืœืชื•ืš ื”-Java Virtual Machine (JVM).

ืžื˜ืจื•ืช

ื‘ื•ืื• ื ืกืชื›ืœ ืขืœ ื›ืžื” ืชื—ื•ืžื™ื ืฉื‘ื”ื ื ื•ื›ืœ ืœื”ืชืื™ื ืื™ืฉื™ืช ืืช ืชืžื•ื ืช Camunda BPM Docker (GitHub) ื›ืš ืฉื”ื•ื ื™ื•ืฆืจ ืื™ื ื˜ืจืืงืฆื™ื” ื˜ื•ื‘ื” ืขื Kubernetes.

  1. ื™ื•ืžื ื™ื ื•ืžื“ื“ื™ื;
  2. ื—ื™ื‘ื•ืจื™ ืžืกื“ื™ ื ืชื•ื ื™ื;
  3. ืื™ืžื•ืช;
  4. ื ื™ื”ื•ืœ ืžืคื’ืฉื™ื.

ื ื‘ื—ืŸ ืžืกืคืจ ื“ืจื›ื™ื ืœื”ืฉื’ืช ื™ืขื“ื™ื ืืœื• ื•ื ืจืื” ื‘ื‘ื™ืจื•ืจ ืืช ื”ืชื”ืœื™ืš ื›ื•ืœื•.

ืฉื™ื ืœื‘: ื”ืื ืืชื” ืžืฉืชืžืฉ ื‘ื’ืจืกืช ื”-Enterprise? ืชืจืื” ื›ืืŸ ื•ืขื“ื›ืŸ ืงื™ืฉื•ืจื™ ืชืžื•ื ื” ืœืคื™ ื”ืฆื•ืจืš.

ืคื™ืชื•ื— ื–ืจื™ืžืช ืขื‘ื•ื“ื”

ื‘ื”ื“ื’ืžื” ื–ื•, ื ืฉืชืžืฉ ื‘-Skaffold ื›ื“ื™ ืœื‘ื ื•ืช ืชืžื•ื ื•ืช Docker ื‘ืืžืฆืขื•ืช Google Cloud Build. ื™ืฉ ืœื• ืชืžื™ื›ื” ื˜ื•ื‘ื” ื‘ื›ืœื™ื ืฉื•ื ื™ื (ื›ื’ื•ืŸ Kustomize ื•-Helm), ื›ืœื™ CI ื•-Build ื•ืกืคืงื™ ืชืฉืชื™ืช. ืงื•ึนื‘ึถืฅ 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 ืื• ืคืฉื•ื˜ ืœื”ืžืฉื™ืš ื”ืœืื”.

ืชื ืื™ื ืžื•ืงื“ืžื™ื

ื–ืจื™ืžืช ืขื‘ื•ื“ื” ื‘ืืžืฆืขื•ืช ืžื ื™ืคืกื˜ื™ื

ืื ืืชื” ืœื ืจื•ืฆื” ืœื”ืฉืชืžืฉ ื‘-kustomize ืื• skaffold, ืืชื” ื™ื›ื•ืœ ืœื”ืชื™ื™ื—ืก ืœืžื ื™ืคืกื˜ื™ื ื‘ generated-manifest.yaml ื•ื”ืชืื™ืžื• ืื•ืชื ืœื–ืจื™ืžืช ื”ืขื‘ื•ื“ื” ืฉืชื‘ื—ืจื•.

ื™ื•ืžื ื™ื ื•ืžื“ื“ื™ื

ืคืจื•ืžืชืื•ืก ื”ืคืš ืœืกื˜ื ื“ืจื˜ ืœืื™ืกื•ืฃ ืžื“ื“ื™ื ื‘-Kubernetes. ื–ื” ืชื•ืคืก ืืช ืื•ืชื” ื ื™ืฉื” ื›ืžื• AWS Cloudwatch Metrics, Cloudwatch Alerts, Stackdriver Metrics, StatsD, Datadog, Nagios, vSphere Metrics ื•ืื—ืจื™ื. ื–ื” ืงื•ื“ ืคืชื•ื— ื•ื™ืฉ ืœื• ืฉืคืช ืฉืื™ืœืชื” ื—ื–ืงื”. ืืช ื”ื”ื“ืžื™ื” ื ืคืงื™ื“ ื‘ื™ื“ื™ Grafana - ื”ื™ื ืžื’ื™ืขื” ืขื ืžืกืคืจ ืจื‘ ืฉืœ ืœื•ื—ื•ืช ืžื—ื•ื•ื ื™ื ื–ืžื™ื ื™ื ืžื”ืงื•ืคืกื”. ื”ื ืžื—ื•ื‘ืจื™ื ื–ื” ืœื–ื” ื•ืงืœ ื™ื—ืกื™ืช ืœื”ืชืงื ื” ืื™ืชื ืคืจื•ืžืชืื•ืก-ืžืคืขื™ืœ.

ื›ื‘ืจื™ืจืช ืžื—ื“ืœ, ืคืจื•ืžืชืื•ืก ืžืฉืชืžืฉ ื‘ืžื•ื“ืœ ื”ื—ื™ืœื•ืฅ <service>/metrics, ื•ื”ื•ืกืคืช ืžื›ื•ืœื•ืช ืฆื“ื“ื™ื•ืช ืขื‘ื•ืจ ื–ื” ื”ื™ื ื ืคื•ืฆื”. ืœืžืจื‘ื” ื”ืฆืขืจ, ืžื“ื“ื™ JMX ื ืจืฉืžื™ื ื‘ืฆื•ืจื” ื”ื˜ื•ื‘ื” ื‘ื™ื•ืชืจ ื‘ืชื•ืš ื”-JVM, ื›ืš ืฉืžื™ื›ืœื™ ืงืจื•ื ื•ืช ืฆื“ ืื™ื ื ื™ืขื™ืœื™ื ื›ืœ ื›ืš. ื‘ื•ืื• ื ืชื—ื‘ืจ 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 ื•ื™ืฆื™ื’ ืืช ื”ืžื“ื“ื™ื ืฉืœื• ื‘ืคื•ืจืžื˜ ืคืจื•ืžืชืื•ืก ื‘- <svc>:9404/metrics

ื”ื’ื“ืจืช ื”ื™ืฆื•ืืŸ

ื”ืงื•ืจื ื”ืงืฉื•ื‘ ืขืฉื•ื™ ืœืชื”ื•ืช ืžืื™ืคื” ื–ื” ื‘ื prometheus-jmx.yaml? ื™ืฉื ื ื“ื‘ืจื™ื ืจื‘ื™ื ื•ืฉื•ื ื™ื ืฉื™ื›ื•ืœื™ื ืœืจื•ืฅ ื‘-JVM, ื•-tomcat ื”ื•ื ืจืง ืื—ื“ ืžื”ื, ื›ืš ืฉื”ื™ืฆื•ืืŸ ื–ืงื•ืง ืœืชืฆื•ืจื” ื ื•ืกืคืช. ื–ืžื™ื ื•ืช ืชืฆื•ืจื•ืช ืกื˜ื ื“ืจื˜ื™ื•ืช ืขื‘ื•ืจ tomcat, wildfly, kafka ื•ื›ืŸ ื”ืœืื” ื›ืืŸ. ื ื•ืกื™ืฃ tomcat as ConfigMap ื‘-Kubernetes ื•ืœืื—ืจ ืžื›ืŸ ื”ืจื›ื‘ ืื•ืชื• ื›ื ืคื—.

ืจืืฉื™ืช, ืื ื• ืžื•ืกื™ืคื™ื ืืช ืงื•ื‘ืฅ ื”ืชืฆื•ืจื” ืฉืœ ื”ื™ืฆื•ืืŸ ืœืกืคืจื™ื™ืช ื”ืคืœื˜ืคื•ืจืžื”/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 Operator ื™ื›ื•ืœื™ื ืœื”ืฉืชืžืฉ service-monitor.yaml ืœื”ืชื—ื™ืœ. ืœึทื—ืงื•ึนืจ Service-monitor.yaml, ืขื™ืฆื•ื‘ ืžืคืขื™ืœ ะธ ServiceMonitorSpec ืœืคื ื™ ืฉืืชื” ืžืชื—ื™ืœ.

ื”ืจื—ื‘ืช ื“ืคื•ืก ื–ื” ืœืžืงืจื™ ืฉื™ืžื•ืฉ ืื—ืจื™ื

ื›ืœ ื”ืงื‘ืฆื™ื ืฉืื ื• ืžื•ืกื™ืคื™ื ืœ-ConfigMapGenerator ื™ื”ื™ื• ื–ืžื™ื ื™ื ื‘ืกืคืจื™ื™ื” ื”ื—ื“ืฉื” /etc/config. ืืชื” ื™ื›ื•ืœ ืœื”ืจื—ื™ื‘ ืชื‘ื ื™ืช ื–ื• ืœื˜ืขื™ื ืช ื›ืœ ืงื‘ืฆื™ ืชืฆื•ืจื” ืื—ืจื™ื ืฉืืชื” ืฆืจื™ืš. ืืชื” ื™ื›ื•ืœ ืืคื™ืœื• ืœื”ืจื›ื™ื‘ ืกืงืจื™ืคื˜ ืืชื—ื•ืœ ื—ื“ืฉ. ืืชื” ื™ื›ื•ืœ ืœื”ืฉืชืžืฉ ืชืช ื ืชื™ื‘ ืœื˜ืขื™ื ืช ืงื‘ืฆื™ื ื‘ื•ื“ื“ื™ื. ื›ื“ื™ ืœืขื“ื›ืŸ ืงื‘ืฆื™ XML, ืฉืงื•ืœ ืœื”ืฉืชืžืฉ xmlstarlet ื‘ืžืงื•ื sed. ื–ื” ื›ื‘ืจ ื›ืœื•ืœ ื‘ืชืžื•ื ื”.

ืžื’ื–ื™ื ื™ื

ื—ื“ืฉื•ืช ื˜ื•ื‘ื•ืช! ื™ื•ืžื ื™ ื™ื™ืฉื•ืžื™ื ื›ื‘ืจ ื–ืžื™ื ื™ื ื‘-stdout, ืœืžืฉืœ ืขื kubectl logs. Fluent (ืžื•ืชืงืŸ ื›ื‘ืจื™ืจืช ืžื—ื“ืœ ื‘-GKE) ื™ืขื‘ื™ืจ ืืช ื”ื™ื•ืžื ื™ื ืฉืœืš ืืœ Elasticsearch, Loki ืื• ืคืœื˜ืคื•ืจืžืช ื”ืจื™ืฉื•ื ื”ืืจื’ื•ื ื™ืช ืฉืœืš. ืื ืืชื” ืจื•ืฆื” ืœื”ืฉืชืžืฉ ื‘-jsonify ืขื‘ื•ืจ ื™ื•ืžื ื™ื, ืืชื” ื™ื›ื•ืœ ืœืขืงื•ื‘ ืื—ืจ ื”ืชื‘ื ื™ืช ืœืขื™ืœ ื›ื“ื™ ืœื”ืชืงื™ืŸ ืœื•ื’ื‘ืง.

ืžืกื“ ื ืชื•ื ื™ื

ื›ื‘ืจื™ืจืช ืžื—ื“ืœ, ืœืชืžื•ื ื” ื™ื”ื™ื” ืžืกื“ ื ืชื•ื ื™ื 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
[...]

ืฉื™ื ืœื‘: ืืชื” ื™ื›ื•ืœ ืœื”ืฉืชืžืฉ ื‘-Kustomize ื›ื“ื™ ืœืคืจื•ืก ืœืกื‘ื™ื‘ื•ืช ืฉื•ื ื•ืช ื‘ืืžืฆืขื•ืช ืฉื›ื‘ืช-ืขืœ: ื“ื•ื’ืžื”.

ืฉื™ื ืœื‘: ืฉื™ืžื•ืฉ valueFrom: secretKeyRef. ื‘ื‘ืงืฉื” ืชืฉืชืžืฉ ืชื›ื•ื ื” ื–ื• ืฉืœ Kubernetes ืืคื™ืœื• ื‘ืžื”ืœืš ื”ืคื™ืชื•ื— ื›ื“ื™ ืœืฉืžื•ืจ ืขืœ ื”ืกื•ื“ื•ืช ืฉืœืš ื‘ื˜ื•ื—ื™ื.

ืกื‘ื™ืจ ืœื”ื ื™ื— ืฉื›ื‘ืจ ื™ืฉ ืœืš ืžืขืจื›ืช ืžื•ืขื“ืคืช ืœื ื™ื”ื•ืœ ืกื•ื“ื•ืช Kubernetes. ืื ืœื, ื”ื ื” ื›ืžื” ืืคืฉืจื•ื™ื•ืช: ื”ืฆืคื ืช ืื•ืชื ืขื ื”-KMS ืฉืœ ืกืคืง ื”ืขื ืŸ ืฉืœืš ื•ืื– ื”ื–ืจืงืช ืื•ืชื ืœ-K8S ื›ืกื•ื“ื•ืช ื“ืจืš ืฆื™ื ื•ืจ ื”ืชืงืœื™ื˜ื•ืจื™ื - MozillaSOPS - ื™ืขื‘ื•ื“ ื˜ื•ื‘ ืžืื•ื“ ื‘ืฉื™ืœื•ื‘ ืขื ืกื•ื“ื•ืช Kustomize. ื™ืฉื ื ื›ืœื™ื ื ื•ืกืคื™ื, ื›ื’ื•ืŸ dotGPG, ื”ืžื‘ืฆืขื™ื ืคื•ื ืงืฆื™ื•ืช ื“ื•ืžื•ืช: ื”ื›ืกืคืช ืฉืœ HashiCorp, ื”ืชืื ืื™ืฉื™ืช ืชื•ืกืคื™ื ืฉืœ ืขืจืš ืกื•ื“ื™.

Ingress

ืืœื ืื ื›ืŸ ืชื‘ื—ืจ ืœื”ืฉืชืžืฉ ื‘ื”ืขื‘ืจืช ื™ืฆื™ืื•ืช ืžืงื•ืžื™ืช, ืชื–ื“ืงืง ืœ-Ingress Controller ืžื•ื’ื“ืจ. ืื ืืชื” ืœื ืžืฉืชืžืฉ ingress-nginx (ืชืจืฉื™ื ื”ื’ื”) ืกื‘ื™ืจ ืœื”ื ื™ื— ืฉืืชื” ื›ื‘ืจ ื™ื•ื“ืข ืฉืืชื” ืฆืจื™ืš ืœื”ืชืงื™ืŸ ืืช ื”ื”ืขืจื•ืช ื”ื ื—ื•ืฆื•ืช ื‘ ingress-patch.yaml.tmpl ืื• platform/ingress.yaml. ืื ืืชื” ืžืฉืชืžืฉ ื‘-ingress-nginx ื•ืจื•ืื” ืžื—ืœืงืช nginx ingress ืขื ืžืื–ืŸ ืขื•ืžืกื™ื ื”ืžืฆื‘ื™ืข ืขืœื™ื” ื•ืขืจืš DNS ื—ื™ืฆื•ื ื™ ืื• DNS ืขื ืชื•ื•ื™ื ื›ืœืœื™ื™ื, ืืชื” ืžื•ื›ืŸ ืœืœื›ืช. ืื—ืจืช, ื”ื’ื“ืจ ืืช ื‘ืงืจ ื”-Ingress ื•ืืช ื”-DNS, ืื• ื“ืœื’ ืขืœ ืฉืœื‘ื™ื ืืœื” ื•ืฉืžื•ืจ ืขืœ ื”ื—ื™ื‘ื•ืจ ื”ื™ืฉื™ืจ ืœืชืจืžื™ืœ.

TLS

ืื ืืชื” ืžืฉืชืžืฉ ืžื ื”ืœ cert ืื• kube-lego ื•-letsencrypt - ืื™ืฉื•ืจื™ื ืœื›ื ื™ืกื” ื”ื—ื“ืฉื” ื™ืชืงื‘ืœื• ืื•ื˜ื•ืžื˜ื™ืช. ืื—ืจืช, ืคืชื— ingress-patch.yaml.tmpl ื•ืœื”ืชืื™ื ืื•ืชื• ืœืฆืจื›ื™ื ืฉืœืš.

ืœึฐื”ึทืฉืึดื™ืง!

ืื ืขืงื‘ืช ืื—ืจ ื›ืœ ืžื” ืฉื›ืชื•ื‘ ืœืžืขืœื”, ืื– ื”ืคืงื•ื“ื” make skaffold HOSTNAME=<you.example.com> ืฆืจื™ืš ืœื”ืคืขื™ืœ ืžื•ืคืข ื–ืžื™ืŸ ื‘ <hostname>/camunda

ืื ืœื ื”ื’ื“ืจืช ืืช ื”ื”ืชื—ื‘ืจื•ืช ืฉืœืš ืœื›ืชื•ื‘ืช ืืชืจ ืฆื™ื‘ื•ืจื™ืช, ืชื•ื›ืœ ืœื”ืคื ื•ืช ืื•ืชื” ื‘ืืžืฆืขื•ืชื” localhost: kubectl port-forward -n camunda-bpm-demo svc/camunda-bpm 8080:8080 ืขืœ localhost:8080/camunda

ื”ืžืชืŸ ืžืกืคืจ ื“ืงื•ืช ืขื“ ืฉื”ื˜ื•ืžื˜ืงืื˜ ืžื•ื›ืŸ ืœื—ืœื•ื˜ื™ืŸ. ืœืžื ื”ืœ ื”ืื™ืฉื•ืจื™ื ื™ื™ืงื— ื–ืžืŸ ืžื” ืœืืžืช ืืช ืฉื ื”ื“ื•ืžื™ื™ืŸ. ืœืื—ืจ ืžื›ืŸ ืชื•ื›ืœ ืœื ื˜ืจ ืืช ื”ื™ื•ืžื ื™ื ื‘ืืžืฆืขื•ืช ื›ืœื™ื ื–ืžื™ื ื™ื ื›ื’ื•ืŸ ื›ืœื™ ื›ืžื• 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, ื›ืš ืฉืื ืืชื” ืจื•ืฆื” ืœื”ืจื™ืฅ ืžืกืคืจ ื”ืขืชืงื™ื, ืืชื” ื™ื›ื•ืœ ืœืืคืฉืจ ื”ืคืขืœื•ืช ื“ื‘ื™ืงื•ืช (ืœืžืฉืœ ืขื‘ื•ืจ ingress-nginx), ืฉืชืชืงื™ื™ื ืขื“ ืฉื”ืขื•ืชืง ื™ื™ืขืœื, ืื• ื”ื’ื“ืจ ืืช ื”ืชื›ื•ื ื” Max-Age ืขื‘ื•ืจ ืขื•ื’ื™ื•ืช. ืœืงื‘ืœืช ืคืชืจื•ืŸ ื—ื–ืง ื™ื•ืชืจ, ืืชื” ื™ื›ื•ืœ ืœืคืจื•ืก ืืช ื”-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. ืœึฐื”ื•ึนืกึดื™ืฃ Autoscaler Pod Horizontal (HPA) ื•ืืชื” ื™ื›ื•ืœ ื‘ืงืœื•ืช ืœืฉื ื•ืช ืืช ืžืกืคืจ ื”ืชืจืžื™ืœื™ื ื‘ืื•ืคืŸ ืื•ื˜ื•ืžื˜ื™.

ื‘ืงืฉื•ืช ื•ื”ื’ื‘ืœื•ืช

ะ’ platform/deployment.yaml ืืชื” ืชืจืื” ืฉืงื™ื“ื“ื ื• ืืช ืฉื“ื” ื”ืžืฉืื‘ื™ื. ื–ื” ืขื•ื‘ื“ ื”ื™ื˜ื‘ ืขื HPA, ืืš ืขืฉื•ื™ ืœื“ืจื•ืฉ ืชืฆื•ืจื” ื ื•ืกืคืช. ืชื™ืงื•ืŸ kustomize ืžืชืื™ื ืœื›ืš. ืก"ืž. ingress-patch.yaml.tmpl ะธ ./kustomization.yaml.tmpl

ืคืœื˜

ืื– ื”ืชืงื ื• ืืช Camunda BPM ืขืœ Kubernetes ืขื ืžื“ื“ื™ Prometheus, ื™ื•ืžื ื™ื, ืžืกื“ ื ืชื•ื ื™ื H2, TLS ื•-Ingress. ื”ื•ืกืคื ื• ืงื•ื‘ืฆื™ jar ื•ืงื‘ืฆื™ ืชืฆื•ืจื” ื‘ืืžืฆืขื•ืช ConfigMaps ื•- Dockerfile. ื“ื™ื‘ืจื ื• ืขืœ ื”ื—ืœืคืช ื ืชื•ื ื™ื ืœื ืคื—ื™ื ื•ื™ืฉื™ืจ ืœืžืฉืชื ื™ ืกื‘ื™ื‘ื” ืžืชื•ืš ืกื•ื“ื•ืช. ื‘ื ื•ืกืฃ, ืกื™ืคืงื ื• ืกืงื™ืจื” ื›ืœืœื™ืช ืฉืœ ื”ื’ื“ืจืช Camunda ืขื‘ื•ืจ ืžืกืคืจ ื”ืขืชืงื™ื ื•ืžืžืฉืง API ืžืื•ืžืช.

ืชื–ื›ื•ืจ

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

05.08.2020/XNUMX/XNUMX, ืชืจื’ื•ื ืžืืžืจื™ื ืืœืืกื˜ืจ ืคื™ืจืช', ืœืืจืก ืœืื ื’

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”