áŠá áááľáľ áĽá¨á°á áá áá? á¨áĽááľáá Camunda BPM ááłááá˝á á¨áááŁá áá˝áá˝ ááááŁáľ ááá áááľáŁ ááá ááááŁáľ á Kubernetes áá áááľáŹáľ ááááŠ? á ááłááľ á¨á°áááą á ááááŽá˝á áĽá áááááśá˝á áá á á¨áá˝á áá á áĽááá˝á áĽááá˘
á¨áá
áá°á áŠá áááľáľ áĽáá°á°á ááá áŤáľáŁáᢠáŤááá ááá á áááá¨áąáá˘
á°áŤá˛áŤá
á ááľáłáá ááá (Alastair Firth) - á áŤáááł ááááľ áĄáľá áá á¨áá°á á¨áŁá˘áŤ á áľá°áááááľ áááá˛áľ;áááľ ááá (áááľ ááá ) - á¨á´ááŚááľ áááá˛áľ á áŤáááłá˘
á á ááŠ:
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 áá áá
áŠá áááľáľ á ááááľ áá áááá á áááŹá˝áá˝á áááľáŹáľ áľáááá ááľáááľ áááᢠá¨áááľáá á˘ááá˝á áĽá á¨á¨ááá áá á°á¨ áľááľáłá áĽá á¨á°ááŁá áááŤá¨áá á¨áááŁá á á˝ááłá á áá áá á¨áľáááľ áĽáŞáá˝á á áá áá á¨ááľááť áá áĽá á¨á áá áá á áľááš ááááŁáᢠááá ááᣠáľáá áĽá á áŠá áááľáľ á ááá á áááŹá˝áá˝ á¨áááááľá áá á¨á° áááľ ááááá á¨áá°á á áá°á á á¤áá á ááᣠáá˝ááᥠáá¨ááťáŁ á ááłá¨ áá¨áĽ áĽá ááľáľáᢠá á°á 2020 6 áááąá ááá áĽá ááááŁáľá ááá°áá áľáá á¨áááľ ááá ááŽáááľ áá (á¨ááááľ á áá)ᢠá á áá ááŞáŤ ááááľ á¨áľáŤ áŤááá˝ ááłá áĽá¨áá á áááŁáą áŁáááľ áĽááľ á ááłáľ ááľáĽ á ááĽááľ á¨á°á°ááá á áá á á áᥠá°ááŁáŤáąá á áááľ á áá¨áááľ áá ááááá˘
Camunda BPM Engine á ááá á á°ááłáłáŠ áááľá°á áá á¨áá°áŠ ááá˝ á áááŹá˝áá˝ áá áááááᣠáĽá Kubernetes áĽá á á áŁá áĽáŠ áá á-á°áááľ áá°áŁáᣠáá á á¨áá á¨á° áááľ ááŞáá˝á ááá¨áá á ááŤáľáááá áľ áá áĽáť (áĽá áĽáá° á áľáááááą á ááá áĽáá˛áááą áŤáľá˝áááłá)á˘
á¨ááľáľá áĽáŤáľ áĽáá˛á áĽáá° ááŽáá´á¨áľáŁ ááŤááᣠááŞáŁ ááááľáľ áĽá á˘ááľá˛áá´áá˝ áŁá ááłáŞáŤáá˝ á áĽá á ááťáťááᣠáá á áááá á¨áľáŤ áŤááá˝ á áááľá°á ááľáĽ á ááĽá¨áá áĽáá˛ááá¨áą áŤáľá˝áááłáᢠáᏠá¨ááŽáá˛á¨áľ ááŞáá áá° á፠á¨áášáá áá˝á (JVM) áĽáá´áľ áĽáá°áá°áá á áĽáááá¨áłááá˘
ááááá˝
ᨠCamunda BPM Docker ááľá áá ááľ á¨ááá˝ááŁá¸áá áĽááľ áŚáłáá˝á áĽáááá¨áľ (
- á¨áááἠááľáłááťáá˝ áĽá áááŞáŤáá˝;
- á¨ááἠááł áááááśá˝;
- áá¨áááŤ;
- á¨ááá áá á áľá°áłá°á.
áĽááá á ááŚá˝ áááłáŤáľ áĽá ááááśá˝á áĽáááá¨áłáá áĽá á á ááá áá°áąá á ááá˝ áĽááłáŤáá.
á ááá¨á°á¨á˘áá°áááŤáá áĽáŞáąá áĽá¨á°á áá áá? á°ááá¨áľ
á¨áľáŤ áá°áľ áĽáľááľ
á áá
ááłáŤ ááá ááááľ áááŁáłá á áá áá Docker ááľáá˝á áááľáŤáľ áľáŤáááľá áĽáá ááááᢠáá°ááŤáŠ ááłáŞáŤáá˝ (áĽáá° Kustomize áĽá Helm)ᣠCI áĽá á¨áááŁáł ááłáŞáŤáá˝ áĽá á¨áá á¨á° áááľ á á
áŤá˘áá˝ áĽáŠ áľáá á ááᢠááá skaffold.yaml.tmpl
á¨áááľ á°á¨á áá á¨á° áááľá áááľáŹáľ á áŁá ááá ááááľá á áá
á¨áĽ áGoogle ááááľ áááŁáł áĽá GKE á
ááĽáŽá˝á áŤáŤáľáłáá˘
make skaffold
ᨠDockerfile á ááľ áá° ááááľ áááŁáł ááááᣠááľáá áááᥠáĽá á áá˛á á ááľáĽ áŤá¨ááťáᣠáĽá ááááŤáášá á áááľá°áá áá áá°ááĽáŠá˘ á¨ááŤá°áááá áá
ááᢠmake skaffold
, ááá áá áľáŤáá ááá˝ áĽá áŁá
áŞáŤáľ á ááľ.
Kubernetes ááľáĽ áá á¨áŤáá á áĽááśá˝áŁ áááá á áá¸áŁáŤá ášáŤ áłáŤá°áá á¨áŤáá á°á°áŤá˘áá˝á ááááŁá á kustomizeá áĽáá ááááᣠáá
á áĽááľá áĽáá˛á áá áŤáľá˝áááłá git pull --rebase
áá°á¨á᪠ááťáťáŤáá˝. á áá á kubectl ááľáĽ áá áĽá ááĽáá°áá
á áááľ áááŽá˝ á á°áἠáá°áŤáá˘
áĽáá˛áá á *.yaml.tmpl áááá˝ ááľáĽ á¨á áľá°ááá
áľá áĽá á¨áá˛á ááŽáááľ ááłáá፠áááááľ envsubst áĽáá ááááᢠáĽáá´áľ áĽáá°áá°áŤ áá¨áľ áá˝ááᢠmakefile
ááá áá á°á¨á᪠áááĽá.
á áľá-áááłáá˝
- á¨áľáŤ áľáĽáľáĽ
áŠáŁááŤáśá˝ á áĽá áľáŤáááľ - á¨áŤáľáá á¨ááľá¨áŤ ááľáá˝ áááá á áĽá áá° GKE ááá áá°ááŤáľ- á¨áá áŽáľ á á
- Envsubst
á áá¸áŁáŤááá˝á á áá áá á¨áľáŤ áá°áľ
kustomize ááá skaffold áá áá áŤááááᣠááľáĽ áŤááľá á áá¸áŁáŤááá˝ áááá¨áľ áá˝ááᢠgenerated-manifest.yaml
áĽá á¨áá¨áĄáľ á¨áľáŤ áá°áľ áá áŤáľá°áŤáááá¸á.
áááἠááľáłááťáá˝ áĽá áááŞáŤáá˝
Prometheus á áŠá áááľáľ ááľáĽ áááŞáŤáá˝á ááá°áĽá°áĽ ááľáááľ ááá. áĽáá° AWS Cloudwatch MetricsᣠCloudwatch AlertsᣠStackdriver MetricsᣠStatsDᣠDatadogᣠNagiosᣠvSphere Metrics áĽá ááá˝á á°ááłáłá áŚáłá ááááᢠáááľ ááá áá áĽá áááá á¨áá áá
ááá á ááᢠááľáá áááŤáá á á á°áŤ áĽáá°áŁáá - á¨áłáĽá ááľáĽ á¨ááá á ááŤáł áłá˝áŚááśá˝ áá á áĽáŽ áááŁáᢠáĽááľ á áĽááłá¸á á¨á°áŤáŤá áĽá á á áááŤáááľ áááŤá ááá áá¸á
á ááŁáŞ, ááŽáá˛á¨áľ á¨áááŁáľ áá´áá áá ááá <service>/metrics
, áĽá ááá
á¨áá ááŞá ááŤáŁáá˝ áá¨áá á¨á°ááá° áá. áĽáá° á áááłá°á ááᣠá¨JMX áááŞáŤáá˝ á JVM ááľáĽ á á°áťá áááł ááĽá°ááᣠáľááá
á¨áá ááŞá áŽáá´áááŽá˝ áŤá áŤá
á áá¤áłá á áá°ááᢠáĽáááá /metrics
á á°áᨠáá°áĽ áá.
ááŽáá˛á¨áľ 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
á°á
áᣠ፠ááá áá áᢠááŞá áśááŤáľá áá¨áłá°áá áĽá áááŞáŤáá á ááŽáá˛á¨áľ á
áá¸áľ á <svc>:9404/metrics
á᪠áááá
á áľáŠá¨áľ á¨áá¨áłá°áá á ááŁá˘ á¨á¨áľ áĽáá°áᣠááŤáľáĽ áá˝ááᢠprometheus-jmx.yaml
? á JVM ááľáĽ áá°áŠ á¨áá˝á áĽá á¨á°ááŤáŠ áááŽá˝ á á, áĽá áśááŤáľ á¨ááą ááľáĽ á ááą áĽáť áá, áľááá
ááŞá á ááłááľ á°á¨á᪠áá
á áŤáľááááá. á¨áśááŤáľáŁ á¨áąá áááᣠááŤá፠áĽá á¨ááłá°ááľ áá°á á áá
áŽá˝ á áá˘
á ááááŞáŤ á¨ááŞáá áá á ááá áá° ááľá¨á/áá á/ áá፠ááľáĽ áĽáá¨áá¨ááá
platform/config
âââ prometheus-jmx.yaml
á¨ááŤá áĽáá¨ááŤáá 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 á áŁá áĽáŠ áá¸á ááááŤáąá á¨áá
á¨áľ áááĄá hash áľáááŤá°áá áĽá á¨á°áá¨á¨ ááľ áĽáá°áá áĽáá˛ááá áŤáľááľáłáᢠá á ááľ 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
[...]
áľáá
ᢠááŽáá´á¨áľ áá á˝áłáľ áááľá¨á áŤáá°ááᨠááľášá ááá˝áłáľ áááá ááááĽá áá˝ááᢠá¨ááŽáá˛á¨áľ áŚááŹá°á á°á áááá˝ áá áá áá˝ááᢠservice-monitor.yaml
ááááá. áŤáľáą Service-monitor.yaml
,
áá áá áľááá°-áĽááľ áá° ááá˝ á¨á á ááá ááłáŽá˝ ááŤáá
áá° ConfigMapGenerator á¨ááá¨áá¨á ááá áááá˝ á á á˛áą áá፠ááľáĽ áááá /etc/config
. á¨áááááľá áááááá áá á¨áááá áááá˝ áááŤá áá
á á áĽááľ ááŤáá áá˝ááᢠá á˛áľ á¨ááľááť áľááŞááľ áĽááłá ááŤá áá˝ááᢠáá áá áľá˝ááá
áá˝ááśá˝
áłáá
áá! á¨áá°áá áŞáŤ áááἠááľáłááťáá˝ ááľááá á stdout áá ááááᣠáááłá á kubectl logs
. Fluentd (á ááŁáŞ á GKE á¨á°áŤá) áááἠááľáłááťáá˝áá áá° ElasticsearchᣠLoki ááá á¨áľáá
áľá á¨ááá˘áŤ ááľá¨á áŤáľá°ááááᢠjsonify ááááἠááľáłááťáá˝á ááá áá á¨ááá áááŤá á¨áá áŤááá á áĽááľ áá¨á°á áá˝ááá˘
á¨ááἠááł
á ááŁáŞ, ááľá H2 á¨ááἠááł ááá¨áá. áá ááĽá á°áľáá á áá°ááᣠáĽá Google Cloud SQLá ᨠCloud SQL ááŽáᲠáá áĽáá áááá - á¨ááľáĽ á˝ááŽá˝á ááááłáľ áá á áá áŤáľááááᢠá¨ááἠááłáá ááááááľ á¨áŤáľá áá፠á¨áá áá ááá áĽá á áľá°ááá á ááŤá áá. 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
. áĽáŁáá
á°á áá
ááááŁáľ á¨áŠá áááľáľ ááľáĽáŽá˝á áááľá°áłá°á á¨ááá¨áĽ áľáááľ áĽááłáá
á¨áłáá ááᢠáŤáááᣠá ááłááľ á ááŤáŽá˝ áĽááááᥠá¨á°áá á á
áŤá˘á KMS áá áááľá á áĽá á á˛á˛ á§á᧠ááľáá á áŠá áĽáá° ááľá˘á áá° K8S ááľááŁáľ -
Ingress
á¨á áŤáŁá˘ áá°áĽ ááľá°áááá ááá áá áŤááá¨áĄ á áľá°áá á¨á°ááᨠá¨áá¤áľ áááŁá áŞáŤ áŤáľáááááłáᢠáŤáá°á ááá ingress-patch.yaml.tmpl
ááá platform/ingress.yaml
. ingress-nginx áĽá¨á°á áá á¨áá áĽá ᨠnginx ingress áááá á¨ááŤá ááá á áá áá° áĽáą á¨ááŤááááľ áĽá ááŤá Რá¤á á¤áľ ááá á¨áąá áŤáᾠᲠá¤á á¤áľ ááá˘áŤá á¨á°ááá¨áąáŁ áááľ áĽáŠ ááᢠáŤáá áá፠á¨ááá˘áŤ áááŁá áŞáŤáá áĽá Რá¤á á¤áľá áŤáá
አááá áĽááá
á á°á¨ááá˝ áááá áĽá á¨ááľ áá áŤááá ááĽá°á áááááľ áŤááŠá˘
TLS
á¨áá áá á¨áá 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 á ááááá á¨á áá á áá ááᣠááá áá á ááŁáŞááľ á REST API ááľáĽ áá¨ááἠáĽáá°á°á°áá¨á áἠáááľ áŤáľááááᢠáľá˝ááá
á¨ááá áá á áľá°áłá°á
áá áĽáá°ááá˝ á áááŹá˝áá˝áŁ Camunda BPM á JVM ááľáĽ ááá áááá˝á áŤáľá°áááłáᣠáľááá
áĽá á
ááá˝á áááľ á¨áááᣠá°ááŁá ááá-áááá˝á ááááľ áá˝áá (
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 áá áá áá˝ááá˘
á°á áááá˘
áááŁá á
ááá-áááá˝á á áľááľáá á¨á°á¨áąáľ á¨ááááŞáŤá (áĽá áĽááá áá á¨áá¨á¨áťá) á¨áŤáááł BPM ááŹáľ áá°áĽ á¨áá¨á ááą áá áŤáá áááááľ ááá áá˝ááᢠá¨áá áá ááľ á áľááľá á á"
áĽáŤááá˝ áĽá áá°áŚá˝
Đ platform/deployment.yaml
á¨ááĽáľ ááľáŠá á á ááŤáŤ áŽáľ áĽááłáááá áłáŤáá
ᢠáá ᨠHPA áá á á°áἠáá°áŤáᣠáá á°á¨á᪠áá
á áááá áá˝ááᢠᨠkustomize patch ááá
á°áľáá áá. á´.á. ingress-patch.yaml.tmpl и ./kustomization.yaml.tmpl
áá°áá°ááŤ
áľááá Camunda BPM á Kubernetes áá á Prometheus metricsᣠlogsᣠH2 DatabaseᣠTLS áĽá Ingress áŤááᢠConfigMaps áĽá Dockerfileá á áá áá á¨áá áááá˝á áĽá á¨áá á¨áľ áááá˝á á¨áá¨ááᢠáá¨áá áá° áĽáŤáá˝ áĽá á ááĽáł áá° á áŤáŁá˘ á°ááááŽá˝ á¨ááľáĽá áľáááááἠá°áááááᢠá á°á¨ááŞáᣠáŤáááł ááĽá á ááá˝ áĽá áá°á¨ááá á¤áá á á¨áááá á á ááá áĽááł á á áá ááá˘
ááŁááťáá˝
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ᣠáľááá
ááá: hab.com