αž€αŸ†αž–αž»αž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš Camunda BPM αž“αŸ…αž›αžΎ Kubernetes

αž€αŸ†αž–αž»αž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš Camunda BPM αž“αŸ…αž›αžΎ Kubernetes

αžαžΎαž’αŸ’αž“αž€αž€αŸ†αž–αž»αž„αž”αŸ’αžšαžΎ Kubernetes αž˜αŸ‚αž“αž‘αŸ? αžαŸ’αžšαŸ€αž˜αžαŸ’αž›αž½αž“αžšαž½αž…αžšαžΆαž›αŸ‹αž αžΎαž™αžŠαžΎαž˜αŸ’αž”αžΈαž•αŸ’αž›αžΆαžŸαŸ‹αž‘αžΈαžœαžαŸ’αžαž» Camunda BPM αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž…αŸαž‰αž–αžΈαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž“αž·αž˜αŸ’αž˜αž·αž αž¬αž”αŸ’αžšαž αŸ‚αž›αž‡αžΆαž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αž–αŸ’αž™αžΆαž™αžΆαž˜αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž–αž½αž€αžœαžΆαž“αŸ…αž›αžΎ Kubernetes? αžŸαžΌαž˜αž€αŸ’αžšαž‘αŸαž€αž˜αžΎαž›αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αž‘αžΌαž‘αŸ…αž˜αž½αž™αž…αŸ†αž“αž½αž“ αž“αž·αž„αž’αžΆαžαž»αž“αžΈαž˜αž½αž™αŸ—αžŠαŸ‚αž›αž’αžΆαž…αžαž˜αŸ’αžšαžΌαžœαž‘αŸ…αžαžΆαž˜αžαž˜αŸ’αžšαžΌαžœαž€αžΆαžšαž‡αžΆαž€αŸ‹αž›αžΆαž€αŸ‹αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αŸ”

αžœαžΆαžŸαž“αŸ’αž˜αžαŸ‹αžαžΆαž’αŸ’αž“αž€αž’αŸ’αž›αžΆαž”αŸ‹αž”αŸ’αžšαžΎ Kubernetes αž–αžΈαž˜αž»αž“αž˜αž€αŸ” αž”αžΎβ€‹αž˜αž·αž“β€‹αž’αŸŠαžΈαž…αžΉαž„β€‹αž‘αŸβ€‹αž˜αžΎαž›β€‹αž‘αŸ… αž—αžΆαž–αž‡αžΆαž’αŸ’αž“αž€αžŠαžΉαž€αž“αžΆαŸ† αž αžΎαž™αž˜αž·αž“αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž…αž„αŸ’αž€αŸ„αž˜αžŠαŸ†αž”αžΌαž„αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αž‘αŸ?

αž’αŸ’αž“αž€αž“αž·αž–αž“αŸ’αž’

  • Alastair Firth (Alastair Firth) - αžœαž·αžŸαŸ’αžœαž€αžšαž—αžΆαž–αž‡αžΏαž‡αžΆαž€αŸ‹αž“αŸƒαž‚αŸαž αž‘αŸ†αž–αŸαžšαž‡αžΆαž“αŸ‹αžαŸ’αž–αžŸαŸ‹αž“αŸ…αž›αžΎαž€αŸ’αžšαž»αž˜ Camunda Cloud;
  • ទអស αž‘αžΆαž„ (Lars Lange) - αžœαž·αžŸαŸ’αžœαž€αžš DevOps αž“αŸ… Camunda αŸ”

αž“αž·αž™αžΆαž™αž±αŸ’αž™αžαŸ’αž›αžΈαŸ–

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

αž˜αž·αž“αž’αžΈαž‘αŸ αžœαžΆαž”αŸ’αžšαž αŸ‚αž›αž‡αžΆαž˜αž·αž“αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž‘αŸ αžŠαŸ„αž™αžŸαžΆαžšαžαŸ‚αž’αŸ’αž“αž€αž˜αž·αž“αž˜αžΆαž“ skaffold αž“αž·αž„ αž”αŸ’αžŠαžΌαžšαžαžΆαž˜αž”αŸ†αžŽαž„αŸ” αž’αž‰αŸ’αž…αžΉαž„αž’αžΆαž“αž”αž“αŸ’αž!

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. αž€αžΆαžšαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αžŸαž˜αŸαž™αŸ”

αž™αžΎαž„αž“αžΉαž„αž–αž·αž“αž·αžαŸ’αž™αž˜αžΎαž›αžœαž·αž’αžΈαž‡αžΆαž…αŸ’αžšαžΎαž“αžŠαžΎαž˜αŸ’αž”αžΈαžŸαž˜αŸ’αžšαŸαž…αž”αžΆαž“αž“αžΌαžœαž‚αŸ„αž›αžŠαŸ…αž‘αžΆαŸ†αž„αž“αŸαŸ‡ αž αžΎαž™αž”αž„αŸ’αž αžΆαž‰αž™αŸ‰αžΆαž„αž…αŸ’αž”αžΆαžŸαŸ‹αž“αžΌαžœαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž‘αžΆαŸ†αž„αž˜αžΌαž›αŸ”

αž€αžΆαžšαž€αžαŸ‹αžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αŸ– αžαžΎαž’αŸ’αž“αž€αž€αŸ†αž–αž»αž„αž”αŸ’αžšαžΎαž€αŸ†αžŽαŸ‚αžŸαž αž‚αŸ’αžšαžΆαžŸαž‘αŸ? αž˜αžΎαž› αž“αŸ…αž‘αžΈαž“αŸαŸ‡ αž“αž·αž„αž’αŸ’αžœαžΎαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž—αžΆαž–αžαŸ†αžŽαž—αŸ’αž‡αžΆαž”αŸ‹αžšαžΌαž”αž—αžΆαž–αžαžΆαž˜αžαž˜αŸ’αžšαžΌαžœαž€αžΆαžšαŸ”

αž€αžΆαžšαž’αž—αž·αžœαžŒαŸ’αžαž“αŸαž›αŸ†αž αžΌαžšαž€αžΆαžšαž„αžΆαžš

αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαž”αž„αŸ’αž αžΆαž‰αž“αŸαŸ‡ αž™αžΎαž„αž“αžΉαž„αž”αŸ’αžšαžΎ Skaffold αžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž€αžΎαžαžšαžΌαž”αž—αžΆαž– Docker αžŠαŸ„αž™αž”αŸ’αžšαžΎ Google Cloud BuildαŸ” αžœαžΆαž˜αžΆαž“αž€αžΆαžšαž‚αžΆαŸ†αž‘αŸ’αžšαžŠαŸαž›αŸ’αž’αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž§αž”αž€αžšαžŽαŸαž•αŸ’αžŸαŸαž„αŸ— (αžŠαžΌαž…αž‡αžΆ Kustomize αž“αž·αž„ Helm) CI αž“αž·αž„αž§αž”αž€αžšαžŽαŸαžŸαžΆαž„αžŸαž„αŸ‹ αž“αž·αž„αž’αŸ’αž“αž€αž•αŸ’αžαž›αŸ‹αž αŸαžŠαŸ’αž‹αžΆαžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αŸ” αž―αž€αžŸαžΆαžš skaffold.yaml.tmpl αžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ Google Cloud Build αž“αž·αž„ GKE αžŠαŸ„αž™αž•αŸ’αžαž›αŸ‹αž“αžΌαžœαžœαž·αž’αžΈαžŸαžΆαž˜αž‰αŸ’αž‰αž”αŸ†αž•αž»αžαž€αŸ’αž“αž»αž„αž€αžΆαžšαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž αŸαžŠαŸ’αž‹αžΆαžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž€αž˜αŸ’αžšαž·αžαž•αž›αž·αžαž€αž˜αŸ’αž˜αŸ”

make skaffold αž“αžΉαž„αž•αŸ’αž‘αž»αž€αž”αžšαž·αž”αž‘ Dockerfile αž‘αŸ…αž€αŸ’αž“αž»αž„ Cloud Build αž”αž„αŸ’αž€αžΎαžαžšαžΌαž”αž—αžΆαž– αž αžΎαž™αžšαž€αŸ’αžŸαžΆαž‘αž»αž€αžœαžΆαž“αŸ…αž€αŸ’αž“αž»αž„ GCR αž αžΎαž™αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž’αž“αž»αžœαžαŸ’αž manifests αž‘αŸ… cluster αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αŸ” αž“αŸαŸ‡αž‡αžΆαž’αŸ’αžœαžΈαžŠαŸ‚αž›αžœαžΆαž’αŸ’αžœαžΎ make skaffoldαž”αŸ‰αž»αž“αŸ’αžαŸ‚ Skaffold αž˜αžΆαž“αž˜αž»αžαž„αžΆαžšαž‡αžΆαž…αŸ’αžšαžΎαž“αž‘αŸ€αžαŸ”

αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž‚αŸ†αžšαžΌ yaml αž“αŸ…αž€αŸ’αž“αž»αž„ Kubernetes αž™αžΎαž„αž”αŸ’αžšαžΎ kustomize αžŠαžΎαž˜αŸ’αž”αžΈαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž€αžΆαžšαž›αžΆαž”αž›αžΎ yaml αžŠαŸ„αž™αž˜αž·αž“αž…αžΆαŸ†αž”αžΆαž…αŸ‹αž”αž·αž‘ manifest αž‘αžΆαŸ†αž„αž˜αžΌαž› αžŠαŸ‚αž›αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž’αŸ’αž“αž€αž”αŸ’αžšαžΎ git pull --rebase αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž€αŸ‚αž›αž˜αŸ’αž’αž”αž“αŸ’αžαŸ‚αž˜αž‘αŸ€αžαŸ” αž₯αž‘αžΌαžœαž“αŸαŸ‡αžœαžΆαžŸαŸ’αžαž·αžαž“αŸ…αž€αŸ’αž“αž»αž„ kubectl αž αžΎαž™αžœαžΆαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž›αŸ’αž’αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžšαžΏαž„αž”αŸ‚αž”αž“αŸαŸ‡αŸ”

αž™αžΎαž„αž€αŸαž”αŸ’αžšαžΎ envsubst αžŠαžΎαž˜αŸ’αž”αžΈαž”αž‰αŸ’αž…αžΌαž›αžˆαŸ’αž˜αŸ„αŸ‡αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“ αž“αž·αž„αž›αŸαžαžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αž‚αž˜αŸ’αžšαŸ„αž„ GCP αž“αŸ…αž€αŸ’αž“αž»αž„αž―αž€αžŸαžΆαžš *.yaml.tmpl αŸ” αž’αŸ’αž“αž€αž’αžΆαž…αž˜αžΎαž›αž–αžΈαžšαž”αŸ€αž”αžŠαŸ‚αž›αžœαžΆαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž“αŸ…αž€αŸ’αž“αž»αž„ makefile αž¬αž‚αŸ’αžšαžΆαž“αŸ‹αžαŸ‚αž”αž“αŸ’αžαž‘αŸ…αž˜αž»αžαž‘αŸ€αžαŸ”

αž›αž€αŸ’αžαžαžŽαŸ’αžŒαž…αžΆαŸ†αž”αžΆαž…αŸ‹

  • αž…αž„αŸ’αž€αŸ„αž˜αž€αžΆαžšαž„αžΆαžš Kubernetes
  • αž”αŸ’αžŠαžΌαžšαžαžΆαž˜αž”αŸ†αžŽαž„
  • Skaffold - αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαžšαžΌαž”αž—αžΆαž– docker αž•αŸ’αž‘αžΆαž›αŸ‹αžαŸ’αž›αž½αž“αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€ αž“αž·αž„αž„αžΆαž™αžŸαŸ’αžšαž½αž›αž€αŸ’αž“αž»αž„αž€αžΆαžšαžŠαžΆαž€αŸ‹αž–αž„αŸ’αžšαžΆαž™αž‘αŸ… GKE
  • αž…αŸ’αž”αžΆαž”αŸ‹αž…αž˜αŸ’αž›αž„αž“αŸƒαž›αŸαžαž€αžΌαžŠαž“αŸαŸ‡αŸ”
  • Envsubst

αž›αŸ†αž αžΌαžšαž€αžΆαžšαž„αžΆαžšαžŠαŸ„αž™αž”αŸ’αžšαžΎ manifests

αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž˜αž·αž“αž…αž„αŸ‹αž”αŸ’αžšαžΎ kustomize ឬ skaffold αž’αŸ’αž“αž€αž’αžΆαž…αž™αŸ„αž„αž‘αŸ… manifests αž“αŸ…αž€αŸ’αž“αž»αž„ generated-manifest.yaml αž αžΎαž™β€‹αžŸαž˜αŸ’αžšαž”β€‹αž–αž½αž€αž‚αŸβ€‹αž‘αŸ…αžαžΆαž˜β€‹αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšβ€‹αž€αžΆαžšαž„αžΆαžšβ€‹αž“αŸƒβ€‹αž‡αž˜αŸ’αžšαžΎαžŸβ€‹αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αŸ”

αž€αŸ†αžŽαžαŸ‹αž αŸαžαž»αž“αž·αž„αž˜αŸ‰αŸ‚αžαŸ’αžš

Prometheus αž”αžΆαž“αž€αŸ’αž›αžΆαž™αž‡αžΆαžŸαŸ’αžαž„αŸ‹αžŠαžΆαžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž”αŸ’αžšαž˜αžΌαž›αž˜αŸ‰αŸ‚αžαŸ’αžšαž“αŸ…αž€αŸ’αž“αž»αž„ Kubernetes αŸ” αžœαžΆαž€αžΆαž“αŸ‹αž€αžΆαž”αŸ‹αž‘αžΈαž•αŸ’αžŸαžΆαžšαž–αž·αžŸαŸαžŸαžŠαžΌαž…αž‚αŸ’αž“αžΆαž“αžΉαž„ AWS Cloudwatch Metrics, Cloudwatch Alerts, Stackdriver Metrics, StatsD, Datadog, Nagios, vSphere Metrics αž“αž·αž„αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαŸ” αžœαžΆαž‡αžΆαž”αŸ’αžšαž—αž–αž”αžΎαž€αž…αŸ†αž  αž“αž·αž„αž˜αžΆαž“αž—αžΆαžŸαžΆαžŸαŸ†αžŽαž½αžšαžŠαŸαž˜αžΆαž“αž₯αž‘αŸ’αž’αž·αž–αž›αŸ” αž™αžΎαž„αž“αžΉαž„αž”αŸ’αžšαž‚αž›αŸ‹αž€αžΆαžšαž˜αžΎαž›αžƒαžΎαž‰αž‘αŸ… Grafana - αžœαžΆαž—αŸ’αž‡αžΆαž”αŸ‹αž˜αž€αž‡αžΆαž˜αž½αž™αž•αŸ’αž‘αžΆαŸ†αž„αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αž˜αž½αž™αž…αŸ†αž“αž½αž“αž’αŸ†αžŠαŸ‚αž›αž’αžΆαž…αžšαž€αž”αžΆαž“αž…αŸαž‰αž–αžΈαž”αŸ’αžšαž’αž”αŸ‹αŸ” αž–αž½αž€αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž—αŸ’αž‡αžΆαž”αŸ‹αž‘αŸ…αž‚αŸ’αž“αžΆαž‘αŸ…αžœαž·αž‰αž‘αŸ…αž˜αž€ αž“αž·αž„αž˜αžΆαž“αž—αžΆαž–αž„αžΆαž™αžŸαŸ’αžšαž½αž›αž€αŸ’αž“αž»αž„αž€αžΆαžšαžŠαŸ†αž‘αžΎαž„αž‡αžΆαž˜αž½αž™ prometheus-αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžš.

αžαžΆαž˜αž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜ Prometheus αž”αŸ’αžšαžΎαž‚αŸ†αžšαžΌαžŸαŸ’αžšαž„αŸ‹αž…αŸαž‰ <service>/metricsαž αžΎαž™αž€αžΆαžšαž”αž“αŸ’αžαŸ‚αž˜αž’αž»αž„αžŠαžΆαž€αŸ‹αžšαžαž™αž“αŸ’αžαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž“αŸαŸ‡αž‚αžΊαž‡αžΆαžšαžΏαž„αž’αž˜αŸ’αž˜αžαžΆαŸ” αž‡αžΆαž’αž€αž»αžŸαž› αžšαž„αŸ’αžœαžΆαžŸαŸ‹ 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
└── prometheus-jmx.yaml

αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž™αžΎαž„αž”αž“αŸ’αžαŸ‚αž˜ αž§αž”αž€αžšαžŽαŸαž”αž„αŸ’αž€αžΎαžαž•αŸ‚αž“αž‘αžΈ Π² 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 αž‚αžΊαž’αžŸαŸ’αž…αžΆαžšαŸ’αž™αžŽαžΆαžŸαŸ‹ αž–αŸ’αžšαŸ„αŸ‡αžœαžΆ hash data configuration and force a pod restart if it change. αž–αž½αž€αž‚αŸαž€αŸαž€αžΆαžαŸ‹αž”αž“αŸ’αžαž™αž…αŸ†αž“αž½αž“αž“αŸƒαž€αžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαžŠαžΆαž€αŸ‹αž±αŸ’αž™αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž•αž„αžŠαŸ‚αžš αž…αžΆαž”αŸ‹αžαžΆαŸ†αž„αž–αžΈαž’αŸ’αž“αž€αž’αžΆαž…αž—αŸ’αž‡αžΆαž”αŸ‹ "ថត" αž‘αžΆαŸ†αž„αž˜αžΌαž›αž“αŸƒαž―αž€αžŸαžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž“αŸ…αž€αŸ’αž“αž»αž„ 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, αž€αžΆαžšαžšαž…αž“αžΆαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžš ΠΈ ServiceMonitorSpec αž˜αž»αž“β€‹αž–αŸαž›β€‹αž’αŸ’αž“αž€β€‹αž…αžΆαž”αŸ‹αž•αŸ’αžŠαžΎαž˜αŸ”

αž–αž„αŸ’αžšαžΈαž€αž‚αŸ†αžšαžΌαž“αŸαŸ‡αž‘αŸ…αž€αžšαžŽαžΈαž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαŸ”

αž―αž€αžŸαžΆαžšαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αžŠαŸ‚αž›αž™αžΎαž„αž”αž“αŸ’αžαŸ‚αž˜αž‘αŸ… ConfigMapGenerator αž“αžΉαž„αž˜αžΆαž“αž“αŸ…αž€αŸ’αž“αž»αž„αžαžαžαŸ’αž˜αžΈαŸ” /etc/config. αž’αŸ’αž“αž€αž’αžΆαž…αž–αž„αŸ’αžšαžΈαž€αž‚αŸ†αžšαžΌαž“αŸαŸ‡ αžŠαžΎαž˜αŸ’αž”αžΈαž—αŸ’αž‡αžΆαž”αŸ‹αž―αž€αžŸαžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαžŠαŸ‚αž›αž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαž€αžΆαžšαŸ” αž’αŸ’αž“αž€αžαŸ‚αž˜αž‘αžΆαŸ†αž„αž’αžΆαž…αž—αŸ’αž‡αžΆαž”αŸ‹αžŸαŸ’αž‚αŸ’αžšαžΈαž”αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αžαŸ’αž˜αžΈαž”αžΆαž“αž‘αŸ€αžαž•αž„αŸ” αž›αŸ„αž€β€‹αž’αŸ’αž“αž€β€‹αž’αžΆαž…β€‹αž”αŸ’αžšαžΎ αž•αŸ’αž›αžΌαžœαžšαž„ αžŠαžΎαž˜αŸ’αž”αžΈαž—αŸ’αž‡αžΆαž”αŸ‹αž―αž€αžŸαžΆαžšαž“αžΈαž˜αž½αž™αŸ—αŸ” αžŠαžΎαž˜αŸ’αž”αžΈαž’αŸ’αžœαžΎαž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž—αžΆαž–αž―αž€αžŸαžΆαžš xml αžŸαžΌαž˜αž–αž·αž…αžΆαžšαžŽαžΆαž”αŸ’αžšαžΎ xmlstarlet αž‡αŸ†αž“αž½αžŸαž±αŸ’αž™ sed αŸ” αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž‰αŸ’αž…αžΌαž›αž€αŸ’αž“αž»αž„αžšαžΌαž”αž—αžΆαž–αžšαž½αž…αž αžΎαž™αŸ”

αž‘αžŸαŸ’αžŸαž“αžΆαžœαžŠαŸ’αžαžΈ

αž–αŸαžαŸŒαž˜αžΆαž“β€‹αž’αžŸαŸ’αž…αžΆαžšαŸ’αž™! αž€αŸ†αžŽαžαŸ‹αž αŸαžαž»αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž˜αžΆαž“αžšαž½αž…αž αžΎαž™αž“αŸ…αž›αžΎ stdout αž§αž‘αžΆαž αžšαžŽαŸαž‡αžΆαž˜αž½αž™ kubectl logs. Fluentd (αžŠαŸ†αž‘αžΎαž„αžαžΆαž˜αž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜αž€αŸ’αž“αž»αž„ 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 αž‡αžΆαž’αžΆαžαŸŒαž€αŸ†αž”αžΆαŸ†αž„αžαžΆαž˜αžšαž™αŸˆαž”αŸ†αž–αž„αŸ‹αžŸαŸŠαžΈαžŒαžΈ βˆ’ Mozilla SOPS - αž“αžΉαž„αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž”αžΆαž“αž™αŸ‰αžΆαž„αž›αŸ’αž’αž“αŸ…αž€αŸ’αž“αž»αž„αž€αžΆαžšαžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž‚αŸ’αž“αžΆαž‡αžΆαž˜αž½αž™ Kustomize αž’αžΆαžαŸŒαž€αŸ†αž”αžΆαŸ†αž„αŸ” αž˜αžΆαž“αž§αž”αž€αžšαžŽαŸαž•αŸ’αžŸαŸαž„αž‘αŸ€αžαžŠαžΌαž…αž‡αžΆ dotGPG αžŠαŸ‚αž›αž’αž“αž»αžœαžαŸ’αžαž˜αž»αžαž„αžΆαžšαžŸαŸ’αžšαžŠαŸ€αž„αž‚αŸ’αž“αžΆαž“αŸαŸ‡αŸ– αž αžΆαžŸαŸ‹αžŸαŸŠαžΈαž€αžΌαž”αžœαŸ‰αžΆαž€, αž”αŸ’αžŠαžΌαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž‡αŸ†αž“αž½αž™αžαž˜αŸ’αž›αŸƒαžŸαž˜αŸ’αž„αžΆαžαŸ‹αžαžΆαž˜αž”αŸ†αžŽαž„.

Ingress

αž›αž»αŸ‡αžαŸ’αžšαžΆαžαŸ‚αž’αŸ’αž“αž€αž‡αŸ’αžšαžΎαžŸαžšαžΎαžŸαž”αŸ’αžšαžΎαž€αžΆαžšαž”αž‰αŸ’αž‡αžΌαž“αž”αž“αŸ’αžαž…αŸ’αžšαž€αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“ αž’αŸ’αž“αž€αž“αžΉαž„αžαŸ’αžšαžΌαžœαž€αžΆαžšαž§αž”αž€αžšαžŽαŸαž”αž‰αŸ’αž‡αžΆ Ingress αžŠαŸ‚αž›αž”αžΆαž“αž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αŸ” αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž˜αž·αž“αž”αŸ’αžšαžΎ ingress-nginx (αž‚αŸ†αž“αžΌαžŸαžαžΆαž„αž˜αž½αž€αžŸαž»αžœαžαŸ’αžαž·αž—αžΆαž–) αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž’αŸ’αž“αž€αž‘αŸ†αž“αž„αž‡αžΆαžŠαžΉαž„αžšαž½αž…αž αžΎαž™αžαžΆαž’αŸ’αž“αž€αžαŸ’αžšαžΌαžœαžŠαŸ†αž‘αžΎαž„αž…αŸ†αžŽαžΆαžšαž–αž“αŸ’αž™αž›αŸ‹αž…αžΆαŸ†αž”αžΆαž…αŸ‹αž“αŸ…αž€αŸ’αž“αž»αž„ ingress-patch.yaml.tmpl ឬ platform/ingress.yaml. αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž€αŸ†αž–αž»αž„αž”αŸ’αžšαžΎ ingress-nginx αž αžΎαž™αžƒαžΎαž‰αžαŸ’αž“αžΆαž€αŸ‹ ingress nginx αž‡αžΆαž˜αž½αž™αž“αžΉαž„ load balancer αž…αž„αŸ’αž’αž»αž›αž‘αŸ…αžœαžΆ αž“αž·αž„ DNS αžαžΆαž„αž€αŸ’αžšαŸ… ឬ wildcard αž”αž‰αŸ’αž…αžΌαž› DNS αž“αŸ„αŸ‡ αž’αŸ’αž“αž€αž–αž·αžαž‡αžΆαž›αŸ’αž’αž€αŸ’αž“αž»αž„αž€αžΆαžšαž‘αŸ…αŸ” αž”αžΎαž˜αž·αž“αžŠαžΌαž…αŸ’αž“αŸ„αŸ‡αž‘αŸ αž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’ Ingress Controller αž“αž·αž„ DNS αž¬αžšαŸ†αž›αž„αž‡αŸ†αž αžΆαž“αž‘αžΆαŸ†αž„αž“αŸαŸ‡ αž αžΎαž™αžšαž€αŸ’αžŸαžΆαž€αžΆαžšαž—αŸ’αž‡αžΆαž”αŸ‹αžŠαŸ„αž™αž•αŸ’αž‘αžΆαž›αŸ‹αž‘αŸ…αž•αžαŸ”

TLS αž”αžΆαž“

αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž’αŸ’αž“αž€αž€αŸ†αž–αž»αž„αž”αŸ’αžšαžΎ αž’αŸ’αž“αž€αž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αžœαž·αž‰αŸ’αž‰αžΆαž”αž“αž”αŸαžαŸ’αžš ឬ 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 αŸ” αž’αŸ’αž“αž€β€‹αž’αžΆαž… αž”αžΎαž€αž€αžΆαžšαž•αŸ’αž‘αŸ€αž„αž•αŸ’αž‘αžΆαžαŸ‹αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“ αž¬αž”αŸ’αžšαžΎαžœαž·αž’αžΈαž•αŸ’αžŸαŸαž„αž‘αŸ€αžαžŠαžΌαž…αž‡αžΆ J.W.T.. αž’αŸ’αž“αž€αž’αžΆαž…αž”αŸ’αžšαžΎ configmaps αž“αž·αž„ volumes αžŠαžΎαž˜αŸ’αž”αžΈαž•αŸ’αž‘αž»αž€ xml ឬ xmlstarlet (αžŸαžΌαž˜αž˜αžΎαž›αžαžΆαž„αž›αžΎ) αžŠαžΎαž˜αŸ’αž”αžΈαž€αŸ‚αžŸαž˜αŸ’αžšαž½αž›αž―αž€αžŸαžΆαžšαžŠαŸ‚αž›αž˜αžΆαž“αžŸαŸ’αžšαžΆαž”αŸ‹αž€αŸ’αž“αž»αž„αžšαžΌαž”αž—αžΆαž– αž αžΎαž™αž”αŸ’αžšαžΎ wget αž¬αž•αŸ’αž‘αž»αž€αžœαžΆαžŠαŸ„αž™αž”αŸ’αžšαžΎ init container αž“αž·αž„ volume αž…αŸ‚αž€αžšαŸ†αž›αŸ‚αž€αŸ”

αž€αžΆαžšαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αžšαž„αžŸαž˜αŸαž™

αžŠαžΌαž…αž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž•αŸ’αžŸαŸαž„αž‘αŸ€αžαž‡αžΆαž…αŸ’αžšαžΎαž“αžŠαŸ‚αžš 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 αž•αž„αžŠαŸ‚αžšαŸ” αž”αž“αŸ’αžαŸ‚αž˜ Horizontal Pod Autoscaler (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, αž€αžΆαžšαž”αž€αž”αŸ’αžšαŸ‚ αž’αžαŸ’αžαž”αž‘ Alastair Firth, Lars Lange

αž”αŸ’αžšαž—αž–: www.habr.com

αž”αž“αŸ’αžαŸ‚αž˜αž˜αžαž·αž™αŸ„αž”αž›αŸ‹