ืคืœื™ืกื ื“ื™ืง Camunda BPM ืื•ื™ืฃ Kubernetes

ืคืœื™ืกื ื“ื™ืง Camunda BPM ืื•ื™ืฃ Kubernetes

ื ื™ืฆืŸ Kubernetes? ื’ืจื™ื™ื˜ ืฆื• ืžืึทืš ื“ื™ื™ืŸ Camunda BPM ื™ื ืกื˜ืึทื ืกื™ื– ืคื•ืŸ ื•ื•ื™ืจื˜ื•ืึทืœ ืžืืฉื™ื ืขืŸ, ืึธื“ืขืจ ืืคึฟืฉืจ ื ืึธืจ ืคึผืจื•ื‘ื™ืจืŸ ืฆื• ืœื•ื™ืคืŸ ื–ื™ื™ ืื•ื™ืฃ Kubernetes? ื–ืืœ ืก ืงื•ืง ืื™ืŸ ืขื˜ืœืขื›ืข ืคึผืจืึธืกื˜ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทื ื– ืื•ืŸ ื™ื—ื™ื“ ื™ื™ื˜ืึทืžื– ื•ื•ืึธืก ืงืขื ืขืŸ ื–ื™ื™ืŸ ื˜ื™ื™ืœืขืจื“ ืฆื• ื“ื™ื™ืŸ ืกืคึผืขืฆื™ืคื™ืฉ ื‘ืื“ืขืจืคืขื ื™ืฉืŸ.

ืขืก ืึทืกื•ืžื– ืึทื– ืื™ืจ ื”ืึธื˜ ื’ืขื•ื•ื™ื™ื ื˜ Kubernetes ืคืจื™ืขืจ. ืื•ื™ื‘ ื ื™ืฉื˜, ืคืืจื•ื•ืืก ื˜ืึธืŸ ื ื™ื˜ ื ืขืžืขืŸ ืึท ืงื•ืง ืื™ืŸ ืคื™ืจืขืจืฉืึทืคื˜ ืื•ืŸ ื ื™ืฉื˜ ืึธื ื”ื™ื™ื‘ืŸ ื“ื™ื™ืŸ ืขืจืฉื˜ืขืจ ืงื ื•ื™ืœ?

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

  • Alastair Firth (Alastair Firth) - ืขืœื˜ืขืจ ื•ื•ืขื‘ื–ื™ื™ื˜ืœ ืจืขืœื™ืึทื‘ื™ืœื™ื˜ื™ ื™ื ื–ืฉืขื ื™ืจ ืื™ืŸ ื“ื™ ืงืึทืžื•ื ื“ืึท ืงืœืึธื•ื“ ืžืึทื ืฉืึทืคึฟื˜;
  • Lars Lange (Lars Lange) - ื“ืขื•ื•ืึธืคึผืก ื™ื ื–ืฉืขื ื™ืจ ืื™ืŸ ืงืึทืžื•ื ื“ืึท.

ืื™ืŸ ืงื•ืจืฆืŸ:

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

ืึธื•ืงื™ื™, ืขืก ืžื™ืกื˜ืึธืžืข ื”ืื˜ ื ื™ืฉื˜ ืึทืจื‘ืขื˜ืŸ ื•ื•ื™ื™ึทืœ ืื™ืจ ื˜ืึธืŸ ื ื™ื˜ ื”ืึธื‘ืŸ ืกืงืึทืคืึทืœื“ ืื•ืŸ ืงื•ืกื˜ืึธืžื™ื–ืข ืื™ื ืกื˜ืึทืœื™ืจืŸ. ื ื• ื“ืขืžืึธืœื˜ ืœื™ื™ืขื ืขืŸ ืื•ื™ืฃ!

ื•ื•ืึธืก ืื™ื– Camunda BPM

Camunda BPM ืื™ื– ืึทืŸ ืึธืคึฟืŸ ืžืงื•ืจ ื’ืขืฉืขืคื˜ ืคึผืจืึธืฆืขืก ืคืึทืจื•ื•ืึทืœื˜ื•ื ื’ ืื•ืŸ ื‘ืึทืฉืœื•ืก ืึธื˜ืึทืžื™ื™ืฉืึทืŸ ืคึผืœืึทื˜ืคืึธืจืžืข ื•ื•ืึธืก ืงืึทื ืขืงืฅ ื’ืขืฉืขืคื˜ ื ื™ืฆืขืจืก ืื•ืŸ ื•ื•ื™ื™ื›ื•ื•ืืจื’ ื“ืขื•ื•ืขืœืึธืคึผืขืจืก. ืขืก ืื™ื– ื™ื“ืขืึทืœ ืคึฟืึทืจ ืงืึธื•ืึธืจื“ืึทื ื™ื™ื˜ื™ื ื’ ืื•ืŸ ืงืึทื ืขืงื˜ื™ื ื’ ืžืขื ื˜ืฉืŸ, (ืžื™ืงืจืึธ) ื‘ืึทื“ื™ื ื•ื ื’ืก ืึธื“ืขืจ ืืคื™ืœื• ื‘ืึธืฅ! ืื™ืจ ืงืขื ื˜ ืœื™ื™ืขื ืขืŸ ืžืขืจ ื•ื•ืขื’ืŸ ื“ื™ ืคืึทืจืฉื™ื“ืขื ืข ื ื•ืฆืŸ ืงืึทืกืขืก ืื™ืŸ ืจื•ื ื’.

ืคืืจื•ื•ืืก ื ื•ืฆืŸ Kubernetes

Kubernetes ืื™ื– ื’ืขื•ื•ืืจืŸ ื“ืขืจ ื“ืข ืคืึทืงื˜ืึธ ื ืึธืจืžืึทืœ ืคึฟืึทืจ ืคืœื™ืกื ื“ื™ืง ืžืึธื“ืขืจืŸ ืึทืคึผืœืึทืงื™ื™ืฉืึทื ื– ืื•ื™ืฃ ืœื™ื ื•ืงืก. ื“ื•ืจืš ื ื™ืฆืŸ ืกื™ืกื˜ืขื ืงืึทืœืœืก ืึทื ืฉื˜ืึธื˜ ืคื•ืŸ ื™ื™ึทื–ื ื•ื•ืึทืจื’ ืขืžื™ืึทืœื™ื™ืฉืึทืŸ ืื•ืŸ ื“ื™ ืงืขืจืŸ ืก ืคื™ื™ื™ืงื™ื™ื˜ ืฆื• ืคื™ืจืŸ ื–ื™ืงืึธืจืŸ ืื•ืŸ ื˜ืึทืกืง ืกื•ื•ื™ื˜ืฉื™ื ื’, ืฉื˜ื™ื•ื•ืœ ืฆื™ื™ื˜ ืื•ืŸ ืกื˜ืึทืจื˜ืึทืคึผ ืฆื™ื™ื˜ ื–ืขื ืขืŸ ื’ืขื”ืืœื˜ืŸ ืฆื• ืึท ืžื™ื ื™ืžื•ื. ืึธื‘ืขืจ, ื“ื™ ื‘ื™ื’ืึทืกื˜ ื ื•ืฅ ืงืขืŸ ืงื•ืžืขืŸ ืคื•ืŸ ื“ื™ ื ืึธืจืžืึทืœ ืึทืคึผื™ ื•ื•ืึธืก Kubernetes ื’ื™ื˜ ืฆื• ืงืึทื ืคื™ื’ื™ืขืจ ื“ื™ ื™ื ืคืจืึทืกื˜ืจืึทืงื˜ืฉืขืจ ืคืืจืœืื ื’ื˜ ื“ื•ืจืš ืึทืœืข ืึทืคึผืœืึทืงื™ื™ืฉืึทื ื–: ืกื˜ืึธืจื™ื“ื–ืฉ, ื ืขื˜ื•ื•ืึธืจืงื™ื ื’ ืื•ืŸ ืžืึธื ื™ื˜ืึธืจื™ื ื’. ืขืก ืื™ื– ื’ืขื•ื•ืขืŸ 2020 ื™ืึธืจ ืึทืœื˜ ืื™ืŸ ื™ื•ื ื™ 6 ืื•ืŸ ืื™ื– ื˜ืึธืžืขืจ ื“ืขืจ ืฆื•ื•ื™ื™ื˜ ื’ืจืขืกื˜ืขืจ ืึธืคึฟืŸ ืžืงื•ืจ ืคึผืจื•ื™ืขืงื˜ (ื ืึธืš ืœื™ื ื•ืงืก). ืขืก ืื™ื– ืœืขืฆื˜ื ืก ืึทืงื˜ื™ื•ื•ืœื™ ืกื˜ื™ื™ื‘ืึทืœื™ื™ื–ื“ ื–ื™ื™ืŸ ืคืึทื ื’ืงืฉืึทื ืึทืœื™ื˜ื™ ื ืึธืš ื’ื™ืš ื™ื˜ืขืจืึทื˜ื™ืึธืŸ ืื™ืŸ ื“ื™ ืœืขืฆื˜ืข ื‘ื™ืกืœ ื™ืึธืจืŸ, ื•ื•ื™ื™ึทืœ ืขืก ื•ื•ืขืจื˜ ืงืจื™ื˜ื™ืฉ ืคึฟืึทืจ ืคึผืจืึธื“ื•ืงืฆื™ืข ื•ื•ืขืจืงืœืึธื•ื“ื– ืึทืจื•ื ื“ื™ ื•ื•ืขืœื˜.

Camunda BPM Engine ืงืขื ืขืŸ ืœื™ื™ื›ื˜ ืคืึทืจื‘ื™ื ื“ืŸ ืฆื• ืื ื“ืขืจืข ืึทืคึผืœืึทืงื™ื™ืฉืึทื ื– ื•ื•ืึธืก ืœื•ื™ืคืŸ ืื•ื™ืฃ ื“ืขืจ ื–ืขืœื‘ื™ืงืขืจ ืงื ื•ื™ืœ, ืื•ืŸ Kubernetes ื’ื™ื˜ ื•ื™ืกื’ืขืฆื™ื™ื›ื ื˜ ืกืงืึทืœืึทื‘ื™ืœื™ื˜ื™, ืึทืœืึทื•ื™ื ื’ ืื™ืจ ืฆื• ืคืึทืจื’ืจืขืกืขืจืŸ ื™ื ืคืจืึทืกื˜ืจืึทืงื˜ืฉืขืจ ืงืึธืก ื‘ืœื•ื™ื– ื•ื•ืขืŸ ื˜ืึทืงืข ื“ืืจืฃ (ืื•ืŸ ืœื™ื™ื›ื˜ ืจืขื“ื•ืฆื™ืจืŸ ื–ื™ื™ ื•ื•ื™ ื“ืืจืฃ).

ื“ื™ ืงื•ื•ืึทืœื™ื˜ืขื˜ ืคื•ืŸ ืžืึธื ื™ื˜ืึธืจื™ื ื’ ืื™ื– ืื•ื™ืš ื–ื™ื™ืขืจ ื™ืžืคึผืจื•ื•ื•ื“ ืžื™ื˜ ืžื›ืฉื™ืจื™ื ืึทื–ืึท ื•ื•ื™ Prometheus, Grafana, Loki, Fluentd ืื•ืŸ Elasticsearch, ืึทืœืึทื•ื™ื ื’ ืื™ืจ ืฆื• ืฆืขื ื˜ืจืืœ ื–ืขืŸ ืึทืœืข ื•ื•ืขืจืงืœืึธื•ื“ื– ืื™ืŸ ืึท ืงื ื•ื™ืœ. ื”ื™ื™ึทื ื˜ ืžื™ืจ ื•ื•ืขืœืŸ ืงื•ืงืŸ ืื™ืŸ ื•ื•ื™ ืฆื• ื™ื ืกื˜ืจื•ืžืขื ื˜ ื“ื™ ืคึผืจืึธืžืขื˜ื”ืขื•ืก ืขืงืกืคึผืึธืจื˜ืขืจ ืื™ืŸ ื“ื™ Java Virtual Machine (JVM).

Objectives

ืœืึธืžื™ืจ ืงื•ืงืŸ ืื™ืŸ ืึท ื‘ื™ืกืœ ื’ืขื‘ื™ื˜ืŸ ื•ื•ื• ืžื™ืจ ืงืขื ืขืŸ ืงืึทืกื˜ืึทืžื™ื™ื– ื“ื™ Camunda BPM Docker ื‘ื™ืœื“ (ื’ื™ื˜ื”ื•ื‘) ืึทื–ื•ื™ ืึทื– ืขืก ื™ื ื˜ืขืจืึทืงืฅ ื’ืขื–ื•ื ื˜ ืžื™ื˜ Kubernetes.

  1. ืœืึธื’ืก ืื•ืŸ ืžืขื˜ืจื™ืงืก;
  2. ื“ืึทื˜ืึทื‘ืึทืกืข ืงืึทื ืขืงืฉืึทื ื–;
  3. ืึธื˜ืขื ื˜ืึทืงื™ื™ืฉืึทืŸ;
  4. ืกืขืกื™ืข ืคืึทืจื•ื•ืึทืœื˜ื•ื ื’.

ืžื™ืจ ื•ื•ืขืœืŸ ืงื•ืงืŸ ืื™ืŸ ืขื˜ืœืขื›ืข ื•ื•ืขื’ืŸ ืฆื• ื“ืขืจื’ืจื™ื™ื›ืŸ ื“ื™ ืฆื™ืœืŸ ืื•ืŸ ืงืœืืจ ื•ื•ื™ื™ึทื–ืŸ ื“ื™ ื’ืื ืฆืข ืคึผืจืึธืฆืขืก.

ื˜ืึธืŸ: ืื™ืจ ื ื•ืฆืŸ ื“ื™ ืขื ื˜ืขืจืคึผืจื™ื™ื– ื•ื•ืขืจืกื™ืข? ืงื•ืง ื“ืึธ ืื•ืŸ ื“ืขืจื”ื™ื™ึทื ื˜ื™ืงืŸ ื‘ื™ืœื“ ืœื™ื ืงืก ื•ื•ื™ ื“ืืจืฃ.

ื•ื•ืึธืจืงืคืœืึธื•ื• ืึทื ื˜ื•ื•ื™ืงืœื•ื ื’

ืื™ืŸ ื“ืขื ื“ืขืžืึธ, ืžื™ืจ ื•ื•ืขืœืŸ ื ื•ืฆืŸ Skaffold ืฆื• ื‘ื•ื™ืขืŸ ื“ืึธืงืงืขืจ ื‘ื™ืœื“ืขืจ ื ื™ืฆืŸ Google Cloud Build. ืขืก ื”ืื˜ ื’ื•ื˜ ืฉื˜ื™ืฆืŸ ืคึฟืึทืจ ืคืึทืจืฉื™ื“ืŸ ืžื›ืฉื™ืจื™ื (ืึทื–ืึท ื•ื•ื™ Kustomize ืื•ืŸ Helm), CI ืื•ืŸ ื‘ื•ื™ืขืŸ ืžื›ืฉื™ืจื™ื, ืื•ืŸ ื™ื ืคืจืึทืกื˜ืจืึทืงื˜ืฉืขืจ ืคึผืจืึทื•ื•ื™ื™ื“ืขืจื–. ื˜ืขืงืข skaffold.yaml.tmpl ื›ื•ืœืœ ืกืขื˜ื˜ื™ื ื’ืก ืคึฟืึทืจ Google Cloud Build ืื•ืŸ GKE, ืคึผืจืึทื•ื•ื™ื™ื“ื™ื ื’ ืึท ื–ื™ื™ืขืจ ืคึผืฉื•ื˜ ื•ื•ืขื’ ืฆื• ืœื•ื™ืคืŸ ืคึผืจืึธื“ื•ืงืฆื™ืข-ืžื™ื™ื ื•ื ื’ ื™ื ืคืจืึทืกื˜ืจืึทืงื˜ืฉืขืจ.

make skaffold ื•ื•ืขื˜ ืœืึธื“ืŸ ื“ื™ Dockerfile ืงืึธื ื˜ืขืงืกื˜ ืื™ืŸ ืงืœืึธื•ื“ ื‘ื•ื™ืขืŸ, ื‘ื•ื™ืขืŸ ื“ื™ ื‘ื™ืœื“ ืื•ืŸ ืงืจืึธื ืขืก ืื™ืŸ GCR, ืื•ืŸ ื“ืขืžืึธืœื˜ ืฆื•ืœื™ื™ื’ืŸ ื“ื™ ืžืึทื ื™ืคืขืกืฅ ืฆื• ื“ื™ื™ืŸ ืงื ื•ื™ืœ. ื“ืึธืก ืื™ื– ื•ื•ืึธืก ืขืก ื˜ื•ื˜ make skaffold, ืึธื‘ืขืจ Skaffold ื”ืื˜ ืคื™ืœืข ืื ื“ืขืจืข ืคึฟืขื™ึดืงื™ื™ื˜ืŸ.

ืคึฟืึทืจ ื™ืึทืžืœ ื˜ืขืžืคึผืœืึทื˜ืขืก ืื™ืŸ Kubernetes, ืžื™ืจ ื ื•ืฆืŸ ืงื•ืกื˜ืึธืžื™ื–ืข ืฆื• ืคื™ืจืŸ ื™ืึทืžืœ ืึธื•ื•ื•ืขืจืœื™ื™ื– ืึธืŸ ืคืึธืจืงื™ื ื’ ื“ื™ ื’ืื ืฆืข ืžืึทื ืึทืคืขืกื˜ื™ื™ืฉืึทืŸ, ืึทืœืึทื•ื™ื ื’ ืื™ืจ ืฆื• ื ื•ืฆืŸ git pull --rebase ืคึฟืึทืจ ื•ื•ื™ื™ึทื˜ืขืจ ื™ืžืคึผืจื•ื•ื•ืžืึทื ืฅ. ืื™ืฆื˜ ืขืก ืื™ื– ืื™ืŸ kubectl ืื•ืŸ ืขืก ืึทืจื‘ืขื˜ ื’ืึทื ืฅ ื’ื•ื˜ ืคึฟืึทืจ ืึทื–ืึท ื–ืื›ืŸ.

ืžื™ืจ ืื•ื™ืš ื ื•ืฆืŸ envsubst ืฆื• ื‘ืึทืคืขืœืงืขืจืŸ ื“ื™ ื”ืึธืกื˜ื ืึทืžืข ืื•ืŸ GCP ืคึผืจื•ื™ืขืงื˜ ืฉื™ื™ึทืŸ ืื™ืŸ ื“ื™ *.yaml.tmpl ื˜ืขืงืขืก. ืื™ืจ ืงืขื ืขืŸ ื–ืขืŸ ื•ื•ื™ ืขืก ืึทืจื‘ืขื˜ ืื™ืŸ makefile ืึธื“ืขืจ ื ืึธืจ ืคืึธืจื–ืขืฆืŸ ื•ื•ื™ื™ึทื˜ืขืจ.

ื“ื™ ื ื™ื™ื˜ื™ืง ื˜ื ืึธื™ื

  • ืึทืจื‘ืขื˜ ืงืœืึทืกื˜ืขืจ Kubernetes
  • ืงืึทืกื˜ืึทืžื™ื™ื–
  • Skaffold - ืคึฟืึทืจ ืงืจื™ื™ื™ื˜ื™ื ื’ ื“ื™ื™ืŸ ืื™ื™ื’ืขื ืข ื“ืึธืงืงืขืจ ื‘ื™ืœื“ืขืจ ืื•ืŸ ื’ืจื™ื ื’ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืฆื• GKE
  • ืงืึธืคึผื™ืข ืคื•ืŸ โ€‹โ€‹ื“ืขื ืงืึธื“
  • ืขื ื•ื•ื•ื‘ืกื˜

ื•ื•ืึธืจืงืคืœืึธื•ื• ื ื™ืฆืŸ ืžืึทื ื™ืคืขืกืฅ

ืื•ื™ื‘ ืื™ืจ ื˜ืึธืŸ ื ื™ืฉื˜ ื•ื•ืขืœืŸ ืฆื• ื ื•ืฆืŸ kustomize ืึธื“ืขืจ skaffold, ืื™ืจ ืงืขื ื˜ ืึธืคึผืฉื™ืงืŸ ืฆื• ื“ื™ ืžืึทื ืึทืคืขืกื˜ื™ื™ืฉืึทื ื– ืื™ืŸ generated-manifest.yaml ืื•ืŸ ืึทื“ืึทืคึผื˜ ื–ื™ื™ ืฆื• ื“ื™ ื•ื•ืึธืจืงืคืœืึธื•ื• ืคื•ืŸ ื“ื™ื™ืŸ ื‘ืจื™ืจื”.

ืœืึธื’ืก ืื•ืŸ ืžืขื˜ืจื™ืงืก

ืคึผืจืึธืžืขื˜ื”ืขื•ืก ืื™ื– ื’ืขื•ื•ืืจืŸ ื“ืขืจ ื ืึธืจืžืึทืœ ืคึฟืึทืจ ืงืึทืœืขืงื˜ื™ื ื’ ืžืขื˜ืจื™ืงืก ืื™ืŸ ืงื•ื‘ืขืจื ืขื˜ืขืก. ืขืก ืึทืงื™ืึทืคึผื™ื™ื– ื“ื™ ื–ืขืœื‘ืข ื ื™ืฉืข ื•ื•ื™ AWS Cloudwatch Metrics, Cloudwatch Alerts, Stackdriver Metrics, StatsD, Datadog, Nagios, vSphere Metrics ืื•ืŸ ืื ื“ืขืจืข. ืขืก ืื™ื– ืึธืคึฟืŸ ืžืงื•ืจ ืื•ืŸ ื”ืื˜ ืึท ืฉื˜ืึทืจืง ืึธื ืคึฟืจืขื’ ืฉืคึผืจืึทืš. ืžื™ืจ ื•ื•ืขืœืŸ ื’ืขื‘ืŸ ื“ื™ ื•ื•ื™ื–ืฉื•ื•ืึทืœืึทื–ื™ื™ืฉืึทืŸ ืฆื• Grafana - ืขืก ืงื•ืžื˜ ืžื™ื˜ ืึท ื’ืจื•ื™ืก ื ื•ืžืขืจ ืคื•ืŸ ื“ืึทืฉื‘ืึธืจื“ื– ื‘ื ื™ืžืฆื ืื•ื™ืก ืคื•ืŸ ื“ื™ ืงืขืกื˜ืœ. ื–ื™ื™ ื–ืขื ืขืŸ ืคืืจื‘ื•ื ื“ืŸ ืฆื• ื™ืขื“ืขืจ ืื ื“ืขืจืขืจ ืื•ืŸ ื–ืขื ืขืŸ ืœืขืคื™ืขืจืขืš ื’ืจื™ื ื’ ืฆื• ื™ื ืกื˜ืึทืœื™ืจืŸ ืžื™ื˜ ืคึผืจืึธืžืขื˜ื”ืขื•ืก-ืึธืคึผืขืจืึทื˜ืึธืจ.

ื“ื•ืจืš ืคืขืœื™ืงื™ื™ึทื˜, ืคึผืจืึธืžืขื˜ื”ืขื•ืก ื ื™ืฆื˜ ื“ื™ ื™ืงืกื˜ืจืึทืงืฉืึทืŸ ืžืึธื“ืขืœ <service>/metrics, ืื•ืŸ ืึทื“ื™ื ื’ ืกื™ื™ื“ืงืึทืจ ืงืึทื ื˜ื™ื™ื ืขืจื– ืคึฟืึทืจ ื“ืขื ืื™ื– ืคึผืจืึธืกื˜. ืฆื•ื ื‘ืึทื“ื•ื™ืขืจืŸ, JMX ืžืขื˜ืจื™ืงืก ื–ืขื ืขืŸ ื‘ืขืกื˜ืขืจ ืœืึธื’ื“ ืื™ืŸ ื“ื™ JVM, ืึทื–ื•ื™ ืกื™ื™ื“ืงืึทืจ ืงืึทื ื˜ื™ื™ื ืขืจื– ื–ืขื ืขืŸ ื ื™ืฉื˜ ื•ื•ื™ ืขืคืขืงื˜ื™ื•ื•. ืœืืžื™ืจ ื–ื™ืš ืคืืจื‘ื™ื ื“ืŸ jmx_exporter ืขืคืขื ืขืŸ ืžืงื•ืจ ืคึฟื•ืŸ ืคึผืจืึธืžืขื˜ื”ืขื•ืก ืฆื• ื“ื™ 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

ื ื•, ื“ืึธืก ืื™ื– ื’ืขื•ื•ืขืŸ ื’ืจื™ื ื’. ื“ืขืจ ืขืงืกืคึผืึธืจื˜ืขืจ ื•ื•ืขื˜ ืžืึธื ื™ื˜ืึธืจ ื˜ืึธืžืงืึทื˜ ืื•ืŸ ื•ื•ื™ื™ึทื–ืŸ ื–ื™ื™ืŸ ืžืขื˜ืจื™ืงืก ืื™ืŸ ืคึผืจืึธืžืขื˜ื”ืขื•ืก ืคึฟืึธืจืžืึทื˜ ืื™ืŸ <svc>:9404/metrics

ืขืงืกืคึผืึธืจื˜ืขืจ ืกืขื˜ืึทืคึผ

ื“ื™ ืึทื˜ืขื ื˜ื™ื•ื• ืœื™ื™ืขื ืขืจ ืงืขืŸ ื•ื•ื•ื ื“ืขืจ ื•ื•ื• ืขืก ื’ืขืงื•ืžืขืŸ ืคื•ืŸ prometheus-jmx.yaml? ืขืก ื–ืขื ืขืŸ ืคื™ืœืข ืคืึทืจืฉื™ื“ืขื ืข ื˜ื™ื ื’ื– ื•ื•ืึธืก ืงืขื ืขืŸ ืœื•ื™ืคืŸ ืื™ืŸ ื“ื™ JVM, ืื•ืŸ ื˜ืึธืžืงืึทื˜ ืื™ื– ื‘ืœื•ื™ื– ืื™ื™ื ืขืจ ืคื•ืŸ ื–ื™ื™, ืึทื–ื•ื™ ื“ืขืจ ืขืงืกืคึผืึธืจื˜ืขืจ ื“ืึทืจืฃ ื ืึธืš ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ. ืกื˜ืึทื ื“ืึทืจื˜ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทื ื– ืคึฟืึทืจ ื˜ืึธืžืงืึทื˜, ื•ื•ื™ืœื“ืคืœื™, ืงืึทืคืงืึท ืื•ืŸ ืึทื–ื•ื™ ืื•ื™ืฃ ื–ืขื ืขืŸ ื‘ื ื™ืžืฆื ื“ืึธ. ืžื™ืจ ื•ื•ืขืœืŸ ืœื™ื™ื’ืŸ ื˜ืึธืžืงืึทื˜ ื•ื•ื™ ืงืึธื ืคื™ื’ืžืึทืคึผ ืื™ืŸ Kubernetes ืื•ืŸ ื“ืขืžืึธืœื˜ ืึธื ืงืœืึทืคึผืŸ ืขืก ื•ื•ื™ ืึท ื‘ืึทื ื“.

ืขืจืฉื˜ืขืจ, ืžื™ืจ ืœื™ื™ื’ืŸ ื“ื™ ืขืงืกืคึผืึธืจื˜ืขืจ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ื˜ืขืงืข ืฆื• ืื•ื ื“ื–ืขืจ ืคึผืœืึทื˜ืคืึธืจืžืข / ืงืึธื ืคื™ื’ / ื•ื•ืขื’ื•ื•ื™ื™ึทื–ืขืจ

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[] ื•ื•ื™ ืึท ืงืึธื ืคื™ื’ืžืึทืคึผ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ืขืœืขืžืขื ื˜. ConfigMapGenerators ื–ืขื ืขืŸ ื’ืจื•ื™ืก ื•ื•ื™ื™ึทืœ ื–ื™ื™ ื”ืึทืฉ ื“ื™ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ื“ืึทื˜ืŸ ืื•ืŸ ืฆื•ื•ื™ื ื’ืขืŸ ืึท ืคึผืึธื“ ืจื™ืกื˜ืึทืจื˜ ืื•ื™ื‘ ืขืก ืขื ื“ืขืจื•ื ื’ืขืŸ. ื–ื™ื™ ืื•ื™ืš ืจืขื“ื•ืฆื™ืจืŸ ื“ื™ ืกื•ืžืข ืคื•ืŸ โ€‹โ€‹โ€‹โ€‹ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ืื™ืŸ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ื–ื™ื ื˜ ืื™ืจ ืงืขื ืขืŸ ืึธื ืงืœืึทืคึผืŸ ืึท ื’ืึทื ืฅ "ื˜ืขืงืข" ืคื•ืŸ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ื˜ืขืงืขืก ืื™ืŸ ืื™ื™ืŸ 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. ืื™ืจ ืงืขื ืขืŸ ืคืึทืจื‘ืจื™ื™ื˜ืขืจืŸ ื“ืขื ืžื•ืกื˜ืขืจ ืฆื• ืึธื ืงืœืึทืคึผืŸ ืงื™ื™ืŸ ืื ื“ืขืจืข ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ื˜ืขืงืขืก ืื™ืจ ื“ืึทืจืคึฟืŸ. ืื™ืจ ืงืขื ืขืŸ ืืคื™ืœื• ืึธื ืงืœืึทืคึผืŸ ืึท ื ื™ื™ึทืข ืกื˜ืึทืจื˜ืึทืคึผ ืฉืจื™ืคื˜. ืื™ืจ ืงืขื ืขืŸ ื ื•ืฆืŸ ืกื•ื‘ืคึผืึทื˜ื” ืฆื• ืึธื ืงืœืึทืคึผืŸ ื™ื—ื™ื“ ื˜ืขืงืขืก. ืฆื• ื“ืขืจื”ื™ื™ึทื ื˜ื™ืงืŸ ืงืกืžืœ ื˜ืขืงืขืก, ื‘ืึทื˜ืจืึทื›ื˜ืŸ ื ื™ืฆืŸ ืงืกืžืœืกื˜ืึทืจืœืขื˜ ืึทื ืฉื˜ืึธื˜ ืกืขื“. ืขืก ืื™ื– ืฉื•ื™ืŸ ืึทืจื™ื™ึทื ื’ืขืจืขื›ื ื˜ ืื™ืŸ ื“ื™ ื‘ื™ืœื“.

ืžืึทื’ืึทื–ื™ื ื–

ื’ืจื•ื™ืก ื ื™ื™ึทืขืก! ืึทืคึผืคึผืœื™ืงืึทื˜ื™ืึธืŸ ืœืึธื’ืก ื–ืขื ืขืŸ ืฉื•ื™ืŸ ื‘ื ื™ืžืฆื ืื•ื™ืฃ ืกื˜ื“ืึธื•ื˜, ืœืžืฉืœ ืžื™ื˜ kubectl logs. Fluentd (ื™ื ืกื˜ืึทืœื™ืจืŸ ื“ื•ืจืš ืคืขืœื™ืงื™ื™ึทื˜ ืื™ืŸ GKE) ื•ื•ืขื˜ ืคืึธืจื•ื•ืขืจื“ื™ื“ ื“ื™ื™ืŸ ืœืึธื’ืก ืฆื• Elasticsearch, Loki ืึธื“ืขืจ ื“ื™ื™ืŸ ืคืึทืจื ืขืžื•ื ื’ ืœืึธื’ื™ื ื’ ืคึผืœืึทื˜ืคืึธืจืžืข. ืื•ื™ื‘ ืื™ืจ ื•ื•ื™ืœืŸ ืฆื• ื ื•ืฆืŸ jsonify ืคึฟืึทืจ ืœืึธื’ืก, ืื™ืจ ืงืขื ื˜ ื ืึธื›ื’ื™ื™ืŸ ื“ื™ ืื•ื™ื‘ืŸ ืžื•ืกื˜ืขืจ ืฆื• ื™ื ืกื˜ืึทืœื™ืจืŸ ืœืึธื’ื‘ืึทืง.

Database

ื“ื•ืจืš ืคืขืœื™ืงื™ื™ึทื˜, ื“ื™ ื‘ื™ืœื“ ื•ื•ืขื˜ ื”ืึธื‘ืŸ ืึท 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 ื•ื•ื™ ืกื™ืงืจื™ืฅ ื“ื•ืจืš ื“ื™ ืกื™ ืจืขืจื  - ืœื™ื ื™ืข - ืžืึธื–ื™ืœืœืึท SOPS - ื•ื•ืขื˜ ืึทืจื‘ืขื˜ืŸ ื–ื™ื™ืขืจ ื’ื•ื˜ ืื™ืŸ ืงืึธืžื‘ื™ื ืึทืฆื™ืข ืžื™ื˜ ืงื•ืกื˜ืึธืžื™ื–ืข ืกื™ืงืจื™ืฅ. ืขืก ื–ืขื ืขืŸ ืื ื“ืขืจืข ืžื›ืฉื™ืจื™ื, ืึทื–ืึท ื•ื•ื™ dotGPG, ื•ื•ืึธืก ื“ื•ืจื›ืคื™ืจืŸ ืขื ืœืขืš ืคืึทื ื’ืงืฉืึทื ื–: HashiCorp ื•ื•ืึธืœื˜, ืงืึทืกื˜ืึทืžื™ื™ื– ืกื•ื“ ื•ื•ืขืจื˜ ืคึผืœื•ื’ื™ื ืก.

ื™ื ื’ืจืขืกืก

ืกื™ื™ึทื“ืŸ ืื™ืจ ืงืœื™ื™ึทื‘ืŸ ืฆื• ื ื•ืฆืŸ ื”ื™ื’ืข ืคึผืึธืจื˜ ืคืึธืจื•ื•ืขืจื“ื™ื ื’, ืื™ืจ ื“ืึทืจืคึฟืŸ ืึท ืงืึทื ืคื™ื’ื™ืขืจื“ ื™ื ื’ืจืขืกืก ืงืึธื ื˜ืจืึธืœืœืขืจ. ืื•ื™ื‘ ืื™ืจ ื˜ืึธืŸ ื ื™ื˜ ื ื•ืฆืŸ ingress-nginx (ื”ืขืœื ื˜ืฉืึทืจื˜) ื“ืขืžืึธืœื˜ ืื™ืจ ืจื•ื‘ึฟ ืžืกืชึผืžื ืฉื•ื™ืŸ ื•ื•ื™ืกืŸ ืึทื– ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ื™ื ืกื˜ืึทืœื™ืจืŸ ื“ื™ ื ื™ื™ื˜ื™ืง ืึทื ืึทื˜ื™ื™ืฉืึทื ื– ืื™ืŸ ingress-patch.yaml.tmpl ืึธื“ืขืจ platform/ingress.yaml. ืื•ื™ื‘ ืื™ืจ ื ื•ืฆืŸ Ingress-nginx ืื•ืŸ ื–ืขืŸ ืึทืŸ nginx ื™ื ื’ืจืขืกืก ืงืœืึทืก ืžื™ื˜ ืึท ืžืึทืกืข ื‘ืึทืœืึทื ืกืขืจ ืื•ืŸ ืึท ืคื•ื ื“ืจื•ื™ืกื ื“ื™ืง ื“ื ืก ืึธื“ืขืจ ื•ื•ื™ืœื“ืงืึทืจื“ ื“ื ืก ืคึผืึธื–ื™ืฆื™ืข, ืื™ืจ ื–ืขื ื˜ ื’ื•ื˜ ืฆื• ื’ื™ื™ืŸ. ืึทื ื“ืขืจืฉ, ืงืึทื ืคื™ื’ื™ืขืจ ื“ื™ ื™ื ื’ืจืขืกืก ืงืึธื ื˜ืจืึธืœืœืขืจ ืื•ืŸ ื“ื ืก, ืึธื“ืขืจ ื”ืึธืคึผืงืขืŸ ื“ื™ ืกื˜ืขืคึผืก ืื•ืŸ ื”ืึทืœื˜ืŸ ื“ื™ ื“ื™ืจืขืงื˜ ืคึฟืึทืจื‘ื™ื ื“ื•ื ื’ ืฆื• ื“ื™ ืคึผืึธื“.

ื˜ืœืก

ืื•ื™ื‘ ืื™ืจ ื ื•ืฆืŸ ืกืขืจื˜-ืคืึทืจื•ื•ืึทืœื˜ืขืจ ืึธื“ืขืจ 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

ื•ื•ืึทืจื˜ืŸ ืึท ื‘ื™ืกืœ ืžื™ื ื•ื˜ ื‘ื™ื– ื˜ืึธืžืงืึทื˜ ืื™ื– ื’ืึธืจ ื’ืจื™ื™ื˜. ืกืขืจื˜-ืคืึทืจื•ื•ืึทืœื˜ืขืจ ื•ื•ืขื˜ ื ืขืžืขืŸ ืขื˜ืœืขื›ืข ืžืึธืœ ืฆื• ื‘ืึทืฉื˜ืขื˜ื™ืงืŸ ื“ืขื ืคืขืœื“ ื ืึธืžืขืŸ. ืื™ืจ ืงืขื ื˜ ืžืึธื ื™ื˜ืึธืจ ื“ื™ ืœืึธื’ืก ืžื™ื˜ ื“ื™ ื‘ื ื™ืžืฆื ืžื›ืฉื™ืจื™ื ืึทื–ืึท ื•ื•ื™ ืึท ื’ืขืฆื™ื™ึทื’ ื•ื•ื™ ืงื•ื‘ืขื˜ื˜ื™ื™ืœ ืึธื“ืขืจ ืคืฉื•ื˜ ื ื™ืฆืŸ kubectl:

kubectl logs -n camunda-bpm-demo $(kubectl get pods -o=name -n camunda-bpm-demo) -f

ื•ื•ื™ื™ึทื˜ืขืจ ืกื˜ืขืคึผืก

ื“ืขืจืœื•ื™ื‘ืขื ื™ืฉ

ื“ืึธืก ืื™ื– ืžืขืจ ื‘ืึทื˜ื™ื™ึทื˜ื™ืง ืฆื• ืงืึทื ืคื™ื’ื™ืขืจ Camunda BPM ื•ื•ื™ Kubernetes, ืึธื‘ืขืจ ืขืก ืื™ื– ื•ื•ื™ื›ื˜ื™ืง ืฆื• ื˜ืึธืŸ ืึทื– ื“ื•ืจืš ืคืขืœื™ืงื™ื™ึทื˜, ืึธื˜ืขื ื˜ืึทืงื™ื™ืฉืึทืŸ ืื™ื– ืคืึทืจืงืจื™ืคึผืœื˜ ืื™ืŸ ื“ื™ REST API. ื“ื• ืงืขื ืกื˜ ื’ืขื‘ืŸ ื™ืงืขืจื“ื™ืง ืึธื˜ืขื ื˜ืึทืงื™ื™ืฉืึทืŸ ืึธื“ืขืจ ื ื•ืฆืŸ ืืŸ ืื ื“ืขืจ ืื•ืคึฟืŸ ื•ื•ื™ ื“ื–ืฉ.ื•ื•.ื˜.. ืื™ืจ ืงืขื ืขืŸ ื ื•ืฆืŸ ืงืึธื ืคื™ื’ืžืึทืคึผืก ืื•ืŸ ื•ื•ืึทืœื™ื•ืžื– ืฆื• ืœืึธื“ืŸ xml, ืึธื“ืขืจ xmlstarlet (ื–ืขืŸ ืื•ื™ื‘ืŸ) ืฆื• ืจืขื“ืึทื’ื™ืจืŸ ื™ื’ื–ื™ืกื˜ื™ื ื’ ื˜ืขืงืขืก ืื™ืŸ ื“ื™ ื‘ื™ืœื“, ืื•ืŸ ืึธื“ืขืจ ื ื•ืฆืŸ wget ืึธื“ืขืจ ืœืึธื“ืŸ ื–ื™ื™ ืžื™ื˜ ืึทืŸ ื™ื ื™ื˜ ืงืึทื ื˜ื™ื™ื ืขืจ ืื•ืŸ ืึท ืฉืขืจื“ ื‘ืึทื ื“.

ืกืขืกื™ืข ืคืึทืจื•ื•ืึทืœื˜ื•ื ื’

ื•ื•ื™ ืคื™ืœืข ืื ื“ืขืจืข ืึทืคึผืœืึทืงื™ื™ืฉืึทื ื–, Camunda BPM ื›ืึทื ื“ืึทืœื– ืกืขืฉืึทื ื– ืื™ืŸ ื“ื™ JVM, ืึทื–ื•ื™ ืื•ื™ื‘ ืื™ืจ ื•ื•ื™ืœืŸ ืฆื• ืœื•ื™ืคืŸ ืงื™ื™ืคืœ ืจืขืคึผืœืึทืงืึทื–, ืื™ืจ ืงืขื ืขืŸ ื’ืขื‘ืŸ ืงืœืขืคึผื™ืง ืกืขืฉืึทื ื– (ืคึฟืึทืจ ื‘ื™ื™ึทืฉืคึผื™ืœ ืคึฟืึทืจ ingress-nginx), ื•ื•ืึธืก ื•ื•ืขื˜ ืขืงืกื™ืกื˜ื™ืจืŸ ื‘ื™ื– ื“ื™ ืจืขืคึผืœื™ืงืข ืคืึทืจืฉื•ื•ื™ื ื“ืŸ, ืึธื“ืขืจ ืฉื˜ืขืœืŸ ื“ื™ ืžืึทืงืก-ืึทื’ืข ืึทื˜ืจื™ื‘ื™ื•ื˜ ืคึฟืึทืจ ืงื™ื›ืœืขืš. ืคึฟืึทืจ ืึท ืžืขืจ ื’ืขื–ื•ื ื˜ ืœื™ื™ื–ื•ื ื’, ืื™ืจ ืงืขื ืขืŸ ืฆืขื•ื•ื™ืงืœืขืŸ ืกืขืกื™ืข ืžืึทื ืึทื’ืขืจ ืื™ืŸ Tomcat. Lars ื”ืื˜ ื‘ืึทื–ื•ื ื“ืขืจ ืคึผืึธืกื˜ืŸ ืื•ื™ืฃ ื“ืขื ื˜ืขืžืข, ืึธื‘ืขืจ ืขืคึผืขืก ื•ื•ื™:

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

ืžื™ืจ ื’ืขื•ื•ื™ื™ื ื˜ ื˜ื•ื•ืขืžืคึผืจืึธืงืกื™ ืื™ืŸ ืคืจืึธื ื˜ ืคื•ืŸ Google ืงืœืึธื•ื“ ืžืขืžืึธืจื™ืกื˜ืึธืจืข, ืžื™ื˜ ืžืขืžืงืึทื˜ืฉืขื“-ืกืขืกื™ืข-ืคืึทืจื•ื•ืึทืœื˜ืขืจ (ืฉื˜ื™ืฆื˜ Redis) ืฆื• ืœื•ื™ืคืŸ ืขืก.

ืกืงื™ื™ืœื™ื ื’

ืื•ื™ื‘ ืื™ืจ ืฉื•ื™ืŸ ืคึฟืึทืจืฉื˜ื™ื™ืŸ ืกืขืฉืึทื ื–, ื“ืขืจ ืขืจืฉื˜ืขืจ (ืื•ืŸ ืึธืคื˜ ื“ื™ ืœืขืฆื˜ืข) ื‘ืึทื’ืจืขื ืขืฆื•ื ื’ ืฆื• ืกืงื™ื™ืœื™ื ื’ Camunda BPM ืงืขืŸ ื–ื™ื™ืŸ ื“ื™ ืงืฉืจ ืฆื• ื“ื™ ื“ืึทื˜ืึทื‘ื™ื™ืก. ื˜ื™ื™ืœ ืงื•ืกื˜ืึธืžื™ื–ืึทื˜ื™ืึธืŸ ืื™ื– ืฉื•ื™ืŸ ื‘ื ื™ืžืฆื "ืคื•ืŸ ื“ื™ ืงืขืกื˜ืœ" ื–ืืœ ืก ืื•ื™ืš ื“ื™ืกื™ื™ื‘ืึทืœ ื™ื ื˜ื™ืึทืœืกื™ื–ืข ืื™ืŸ ื“ื™ ืกืขื˜ื˜ื™ื ื’ืก.ืงืกืžืœ ื˜ืขืงืข. ืœื™ื™ื’ ืฆื• ื”ืึธืจื™ื–ืึธื ื˜ืึทืœ ืคึผืึธื“ ืึทื•ื˜ืึธืกืงืึทืœืขืจ (HPA) ืื•ืŸ ืื™ืจ ืงืขื ืขืŸ ืœื™ื™ื›ื˜ ืื•ื™ื˜ืึธืžืึทื˜ื™ืฉ ื•ื•ืึธื’ ื“ื™ ื ื•ืžืขืจ ืคื•ืŸ ืคึผืึธื“ืก.

ืจื™ืงื•ื•ืขืก ืื•ืŸ ืจื™ืกื˜ืจื™ืงืฉืึทื ื–

ะ’ platform/deployment.yaml ืื™ืจ ื•ื•ืขื˜ ื–ืขืŸ ืึทื– ืžื™ืจ ื”ืึธื‘ืŸ ืฉื•ื•ืขืจ ืงืึธื“ืขื“ ื“ื™ ืจืขืกื•ืจืกืŸ ืคืขืœื“. ื“ืึธืก ืึทืจื‘ืขื˜ ื’ืขื–ื•ื ื˜ ืžื™ื˜ HPA, ืึธื‘ืขืจ ืงืขืŸ ื“ืึทืจืคืŸ ื ืึธืš ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ. ื“ื™ ืงื•ืกื˜ืึธืžื™ื–ืข ืœืึทื˜ืข ืื™ื– ืคึผืึทืกื™ืง ืคึฟืึทืจ ื“ืขื. ืกืขื ื˜ื™ืžืขื˜ืขืจ. ingress-patch.yaml.tmpl ะธ ./kustomization.yaml.tmpl

ืจืขื–ื•ืœื˜ืึทื˜

ืึทื–ื•ื™ ืžื™ืจ ืื™ื ืกื˜ืึทืœื™ืจืŸ Camunda BPM ืื•ื™ืฃ Kubernetes ืžื™ื˜ ืคึผืจืึธืžืขื˜ื”ืขื•ืก ืžืขื˜ืจื™ืงืก, ืœืึธื’ืก, H2 ื“ืึทื˜ืึทื‘ื™ื™ืก, TLS ืื•ืŸ Ingress. ืžื™ืจ ื”ืึธื‘ืŸ ืฆื•ื’ืขื’ืขื‘ืŸ ืกืœื•ื™ ื˜ืขืงืขืก ืื•ืŸ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ ื˜ืขืงืขืก ืžื™ื˜ ConfigMaps ืื•ืŸ Dockerfile. ืžื™ืจ ื’ืขืจืขื“ื˜ ื•ื•ืขื’ืŸ ื™ืงืกื˜ืฉื™ื™ื ื“ื–ืฉื™ื ื’ ื“ืึทื˜ืŸ ืฆื• ื•ื•ืึทืœื™ื•ืžื– ืื•ืŸ ื’ืœื™ื™ึทืš ืฆื• ืกื•ื•ื™ื•ื•ืข ื•ื•ืขืจื™ืึทื‘ืึทืœื– ืคึฟื•ืŸ ืกื™ืงืจื™ืฅ. ืื™ืŸ ืึทื“ื™ืฉืึทืŸ, ืžื™ืจ ืฆื•ื’ืขืฉื˜ืขืœื˜ ืึทืŸ ืื™ื‘ืขืจื‘ืœื™ืง ืคื•ืŸ ื‘ืึทืฉื˜ืขื˜ื™ืงืŸ Camunda ืคึฟืึทืจ ืงื™ื™ืคืœ ืจืขืคึผืœืึทืงืึทื– ืื•ืŸ ืึทืŸ ืึธื˜ืขื ื˜ืึทืงื™ื™ื˜ืึทื“ ืึทืคึผื™.

ืจืขืคึฟืขืจืขื ืฆืŸ

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, ืื™ื‘ืขืจื–ืขืฆื•ื ื’ ืึทืจื˜ื™ืงืœ Alastair Firth, Lars Lange

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

ืœื™ื™ื’ืŸ ืึท ื‘ืึทืžืขืจืงื•ื ื’