ΠΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ Π»ΠΈ Kubernetes? ΠΠΎΡΠΎΠ²ΠΈ Π»ΠΈ ΡΡΠ΅ Π΄Π° ΠΏΡΠ΅ΠΌΠ΅ΡΡΠΈΡΠ΅ Π²Π°ΡΠΈΡΠ΅ Camunda BPM Π΅ΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΈ ΠΈΠ·Π²ΡΠ½ Π²ΠΈΡΡΡΠ°Π»Π½ΠΈ ΠΌΠ°ΡΠΈΠ½ΠΈ ΠΈΠ»ΠΈ ΠΌΠΎΠΆΠ΅ Π±ΠΈ ΠΏΡΠΎΡΡΠΎ Π΄Π° ΠΎΠΏΠΈΡΠ°ΡΠ΅ Π΄Π° Π³ΠΈ ΡΡΠ°ΡΡΠΈΡΠ°ΡΠ΅ Π½Π° Kubernetes? ΠΠ΅ΠΊΠ° Π΄Π° ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ Π½ΡΠΊΠΎΠΈ ΠΎΠ±ΡΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΈ ΠΎΡΠ΄Π΅Π»Π½ΠΈ Π΅Π»Π΅ΠΌΠ΅Π½ΡΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ ΠΏΡΠΈΠ³ΠΎΠ΄Π΅Π½ΠΈ ΠΊΡΠΌ Π²Π°ΡΠΈΡΠ΅ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΠΈ Π½ΡΠΆΠ΄ΠΈ.
ΠΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π° ΡΠ΅, ΡΠ΅ ΡΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π»ΠΈ Kubernetes ΠΏΡΠ΅Π΄ΠΈ. ΠΠΊΠΎ Π½Π΅, Π·Π°ΡΠΎ Π½Π΅ ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΡΠ΅
ΠΠ²ΡΠΎΡΠΈ
ΠΠ»Π°ΡΡΡΡ Π€ΡΡΡ (ΠΠ»Π°ΡΡΡΡ Π€ΡΡΡ) β ΡΡΠ°ΡΡΠΈ ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ ΠΏΠΎ Π½Π°Π΄Π΅ΠΆΠ΄Π½ΠΎΡΡ Π½Π° ΡΠ°ΠΉΡΠ° Π² Π΅ΠΊΠΈΠΏΠ° Π½Π° Camunda Cloud;ΠΠ°ΡΡ ΠΠ°Π½Π³Π΅ (ΠΠ°ΡΡ ΠΠ°Π½Π³Π΅) β DevOps ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ Π² Camunda.
ΠΠ°ΠΊΡΠ°ΡΠΊΠΎ:
git clone https://github.com/camunda-cloud/camunda-examples.git
cd camunda-examples/camunda-bpm-demo
make skaffold
ΠΠΎΠ±ΡΠ΅, Π²Π΅ΡΠΎΡΡΠ½ΠΎ Π½Π΅ Π΅ ΠΏΡΠΎΡΠ°Π±ΠΎΡΠΈΠ»ΠΎ, Π·Π°ΡΠΎΡΠΎ Π½ΡΠΌΠ°ΡΠ΅ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½ΠΈ ΡΠΊΠ΅Π»Π΅ ΠΈ ΠΏΠ΅ΡΡΠΎΠ½Π°Π»ΠΈΠ·ΠΈΡΠ°Π½Π΅. ΠΠΌΠΈ ΡΠΎΠ³Π°Π²Π° ΠΏΡΠΎΡΠ΅ΡΠ΅ΡΠ΅!
ΠΠ°ΠΊΠ²ΠΎ Π΅ Camunda BPM
Camunda BPM Π΅ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ° Ρ ΠΎΡΠ²ΠΎΡΠ΅Π½ ΠΊΠΎΠ΄ Π·Π° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° Π±ΠΈΠ·Π½Π΅Ρ ΠΏΡΠΎΡΠ΅ΡΠΈ ΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΡ Π½Π° ΡΠ΅ΡΠ΅Π½ΠΈΡ, ΠΊΠΎΡΡΠΎ ΡΠ²ΡΡΠ·Π²Π° Π±ΠΈΠ·Π½Π΅Ρ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈ ΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈ Π½Π° ΡΠΎΡΡΡΠ΅Ρ. Π’ΠΎΠΉ Π΅ ΠΈΠ΄Π΅Π°Π»Π΅Π½ Π·Π° ΠΊΠΎΠΎΡΠ΄ΠΈΠ½ΠΈΡΠ°Π½Π΅ ΠΈ ΡΠ²ΡΡΠ·Π²Π°Π½Π΅ Π½Π° Ρ
ΠΎΡΠ°, (ΠΌΠΈΠΊΡΠΎ) ΡΡΠ»ΡΠ³ΠΈ ΠΈΠ»ΠΈ Π΄ΠΎΡΠΈ Π±ΠΎΡΠΎΠ²Π΅! ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΡΠΎΡΠ΅ΡΠ΅ΡΠ΅ ΠΏΠΎΠ²Π΅ΡΠ΅ Π·Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈΡΠ΅ ΡΠ»ΡΡΠ°ΠΈ Π½Π° ΡΠΏΠΎΡΡΠ΅Π±Π° Π½Π°
ΠΠ°ΡΠΎ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ Kubernetes
Kubernetes ΡΠ΅ ΠΏΡΠ΅Π²ΡΡΠ½Π° Π² Π΄Π΅ ΡΠ°ΠΊΡΠΎ ΡΡΠ°Π½Π΄Π°ΡΡ Π·Π° ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΡΡΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π° Linux. Π§ΡΠ΅Π· ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ½ΠΈ ΠΏΠΎΠ²ΠΈΠΊΠ²Π°Π½ΠΈΡ Π²ΠΌΠ΅ΡΡΠΎ Ρ Π°ΡΠ΄ΡΠ΅ΡΠ½Π° Π΅ΠΌΡΠ»Π°ΡΠΈΡ ΠΈ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΡΠ° Π½Π° ΡΠ΄ΡΠΎΡΠΎ Π΄Π° ΡΠΏΡΠ°Π²Π»ΡΠ²Π° ΠΏΠ°ΠΌΠ΅ΡΡΠ° ΠΈ ΠΏΡΠ΅Π²ΠΊΠ»ΡΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° Π·Π°Π΄Π°ΡΠΈ, Π²ΡΠ΅ΠΌΠ΅ΡΠΎ Π·Π° ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ ΠΈ ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ ΡΠ΅ ΡΠ²Π΅ΠΆΠ΄Π°Ρ Π΄ΠΎ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ. ΠΠ°ΠΉ-Π³ΠΎΠ»ΡΠΌΠ°ΡΠ° ΠΏΠΎΠ»Π·Π° ΠΎΠ±Π°ΡΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° Π΄ΠΎΠΉΠ΄Π΅ ΠΎΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΈΡ API, ΠΊΠΎΠΉΡΠΎ Kubernetes ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Ρ Π·Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ°ΡΠ°, ΠΈΠ·ΠΈΡΠΊΠ²Π°Π½Π° ΠΎΡ Π²ΡΠΈΡΠΊΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ: ΡΡΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅, ΡΠ°Π±ΠΎΡΠ° Π² ΠΌΡΠ΅ΠΆΠ° ΠΈ Π½Π°Π±Π»ΡΠ΄Π΅Π½ΠΈΠ΅. Π’ΠΎΠΉ Π½Π°Π²ΡΡΡΠΈ 2020 Π³ΠΎΠ΄ΠΈΠ½ΠΈ ΠΏΡΠ΅Π· ΡΠ½ΠΈ 6 Π³. ΠΈ Π΅ ΠΌΠΎΠΆΠ΅ Π±ΠΈ Π²ΡΠΎΡΠΈΡΡ ΠΏΠΎ Π³ΠΎΠ»Π΅ΠΌΠΈΠ½Π° ΠΏΡΠΎΠ΅ΠΊΡ Ρ ΠΎΡΠ²ΠΎΡΠ΅Π½ ΠΊΠΎΠ΄ (ΡΠ»Π΅Π΄ Linux). ΠΠ°ΠΏΠΎΡΠ»Π΅Π΄ΡΠΊ Π°ΠΊΡΠΈΠ²Π½ΠΎ ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·ΠΈΡΠ° ΡΠ²ΠΎΡΡΠ° ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡ ΡΠ»Π΅Π΄ Π±ΡΡΠ·Π° ΠΈΡΠ΅ΡΠ°ΡΠΈΡ ΠΏΡΠ΅Π· ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ Π½ΡΠΊΠΎΠ»ΠΊΠΎ Π³ΠΎΠ΄ΠΈΠ½ΠΈ, ΡΡΠΉ ΠΊΠ°ΡΠΎ ΡΡΠ°Π²Π° ΠΊΡΠΈΡΠΈΡΠ½Π° Π·Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²Π΅Π½ΠΈΡΠ΅ Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½ΠΈΡ ΠΏΠΎ ΡΠ΅Π»ΠΈΡ ΡΠ²ΡΡ.
Camunda BPM Engine ΠΌΠΎΠΆΠ΅ Π»Π΅ΡΠ½ΠΎ Π΄Π° ΡΠ΅ ΡΠ²ΡΡΠΆΠ΅ Ρ Π΄ΡΡΠ³ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΡΠ°Π±ΠΎΡΠ΅ΡΠΈ Π½Π° ΡΡΡΠΈΡ ΠΊΠ»ΡΡΡΠ΅Ρ, Π° Kubernetes ΠΎΡΠΈΠ³ΡΡΡΠ²Π° ΠΎΡΠ»ΠΈΡΠ½Π° ΠΌΠ°ΡΠ°Π±ΠΈΡΡΠ΅ΠΌΠΎΡΡ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°ΠΉΠΊΠΈ Π²ΠΈ Π΄Π° ΡΠ²Π΅Π»ΠΈΡΠΈΡΠ΅ ΡΠ°Π·Ρ ΠΎΠ΄ΠΈΡΠ΅ Π·Π° ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ° ΡΠ°ΠΌΠΎ ΠΊΠΎΠ³Π°ΡΠΎ Π½Π°ΠΈΡΡΠΈΠ½Π° Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ (ΠΈ Π»Π΅ΡΠ½ΠΎ Π΄Π° Π³ΠΈ Π½Π°ΠΌΠ°Π»ΠΈΡΠ΅, Π°ΠΊΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ).
ΠΠ°ΡΠ΅ΡΡΠ²ΠΎΡΠΎ Π½Π° ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³Π° ΡΡΡΠΎ Π΅ Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ ΠΏΠΎΠ΄ΠΎΠ±ΡΠ΅Π½ΠΎ Ρ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ ΠΊΠ°ΡΠΎ Prometheus, Grafana, Loki, Fluentd ΠΈ Elasticsearch, ΠΊΠΎΠ΅ΡΠΎ Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΠΏΡΠ΅Π³Π»Π΅ΠΆΠ΄Π°ΡΠ΅ ΡΠ΅Π½ΡΡΠ°Π»Π½ΠΎ Π²ΡΠΈΡΠΊΠΈ ΡΠ°Π±ΠΎΡΠ½ΠΈ Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½ΠΈΡ Π² ΠΊΠ»ΡΡΡΠ΅Ρ. ΠΠ½Π΅Ρ ΡΠ΅ ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΊΠ°ΠΊ Π΄Π° Π²Π½Π΅Π΄ΡΠΈΠΌ Π΅ΠΊΡΠΏΠΎΡΡΠ΅ΡΠ° Π½Π° Prometheus Π²ΡΠ² Π²ΠΈΡΡΡΠ°Π»Π½Π°ΡΠ° ΠΌΠ°ΡΠΈΠ½Π° Π½Π° Java (JVM).
ΡΠ΅Π»ΠΈ
ΠΠ΅ΠΊΠ° Π΄Π° ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΎΠ±Π»Π°ΡΡΠΈ, ΠΊΡΠ΄Π΅ΡΠΎ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΠ΅ΡΡΠΎΠ½Π°Π»ΠΈΠ·ΠΈΡΠ°ΠΌΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π½Π° Camunda BPM Docker (
- ΠΠ½Π΅Π²Π½ΠΈΡΠΈ ΠΈ ΠΏΠΎΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ;
- ΠΡΡΠ·ΠΊΠΈ Ρ Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ;
- Π£Π΄ΠΎΡΡΠΎΠ²Π΅ΡΡΠ²Π°Π½Π΅;
- Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΡΠ΅ΡΠΈΠΈ.
Π©Π΅ ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ Π½ΡΠΊΠΎΠ»ΠΊΠΎ Π½Π°ΡΠΈΠ½Π° Π·Π° ΠΏΠΎΡΡΠΈΠ³Π°Π½Π΅ Π½Π° ΡΠ΅Π·ΠΈ ΡΠ΅Π»ΠΈ ΠΈ ΡΡΠ½ΠΎ ΡΠ΅ ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌ ΡΠ΅Π»ΠΈΡ ΠΏΡΠΎΡΠ΅Ρ.
ΠΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ Π»ΠΈ Π²Π΅ΡΡΠΈΡΡΠ° Enterprise? ΠΠΈΠΆ
Π Π°Π·Π²ΠΈΡΠΈΠ΅ Π½Π° ΡΠ°Π±ΠΎΡΠ½ΠΈΡ ΠΏΡΠΎΡΠ΅Ρ
Π ΡΠ°Π·ΠΈ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠ°ΡΠΈΡ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ 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 ID Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ° Π²ΡΠ² ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ΡΠ΅ *.yaml.tmpl. ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅ ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΠΈ Π² makefile
ΠΈΠ»ΠΈ ΠΏΡΠΎΡΡΠΎ ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠ΅ΡΠ΅ ΠΏΠΎ-Π½Π°ΡΠ°ΡΡΠΊ.
ΠΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»Π½ΠΈ
- Π Π°Π±ΠΎΡΠ΅Π½ ΠΊΠ»ΡΡΡΠ΅Ρ
Kubernetes ΠΠ΅ΡΡΠΎΠ½Π°Π»ΠΈΠ·ΠΈΡΠ°Π½Π΅ Π‘ΠΊΠ΅Π»Π΅ - Π·Π° ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° Π²Π°ΡΠΈ ΡΠΎΠ±ΡΡΠ²Π΅Π½ΠΈ Π΄ΠΎΠΊΠ΅Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΈ Π»Π΅ΡΠ½ΠΎ Π²Π½Π΅Π΄ΡΡΠ²Π°Π½Π΅ Π² GKE- ΠΠΎΠΏΠΈΠ΅ Π½Π° ΡΠΎΠ·ΠΈ ΠΊΠΎΠ΄
- Envsubst
Π Π°Π±ΠΎΡΠ΅Π½ ΠΏΡΠΎΡΠ΅Ρ Ρ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΠΌΠ°Π½ΠΈΡΠ΅ΡΡΠΈ
ΠΠΊΠΎ Π½Π΅ ΠΈΡΠΊΠ°ΡΠ΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ kustomize ΠΈΠ»ΠΈ skaffold, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΠ΅ ΠΎΠ±ΡΡΠ½Π΅ΡΠ΅ ΠΊΡΠΌ ΠΌΠ°Π½ΠΈΡΠ΅ΡΡΠΈΡΠ΅ Π² generated-manifest.yaml
ΠΈ Π³ΠΈ Π°Π΄Π°ΠΏΡΠΈΡΠ°ΠΉΡΠ΅ ΠΊΡΠΌ ΡΠ°Π±ΠΎΡΠ½ΠΈΡ ΠΏΡΠΎΡΠ΅Ρ ΠΏΠΎ Π²Π°Ρ ΠΈΠ·Π±ΠΎΡ.
ΠΠ½Π΅Π²Π½ΠΈΡΠΈ ΠΈ ΠΏΠΎΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ
Prometheus ΡΠ΅ ΠΏΡΠ΅Π²ΡΡΠ½Π° Π² ΡΡΠ°Π½Π΄Π°ΡΡ Π·Π° ΡΡΠ±ΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΠΎΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ Π² Kubernetes. Π’ΠΎΠΉ Π·Π°Π΅ΠΌΠ° ΡΡΡΠ°ΡΠ° Π½ΠΈΡΠ° ΠΊΠ°ΡΠΎ AWS Cloudwatch Metrics, Cloudwatch Alerts, Stackdriver Metrics, StatsD, Datadog, Nagios, vSphere Metrics ΠΈ Π΄ΡΡΠ³ΠΈ. Π’ΠΎΠΉ Π΅ Ρ ΠΎΡΠ²ΠΎΡΠ΅Π½ ΠΊΠΎΠ΄ ΠΈ ΠΈΠΌΠ° ΠΌΠΎΡΠ΅Π½ Π΅Π·ΠΈΠΊ Π·Π° Π·Π°ΡΠ²ΠΊΠΈ. ΠΠΈΠ·ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡΡΠ° ΡΠ΅ ΠΏΠΎΠ²Π΅ΡΠΈΠΌ Π½Π° Grafana - ΡΡ ΡΠ΅ ΠΏΡΠ΅Π΄Π»Π°Π³Π° Ρ Π³ΠΎΠ»ΡΠΌ Π±ΡΠΎΠΉ ΡΠ°Π±Π»Π° Π·Π° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅, ΠΊΠΎΠΈΡΠΎ ΡΠ° Π³ΠΎΡΠΎΠ²ΠΈ. Π’Π΅ ΡΠ° ΡΠ²ΡΡΠ·Π°Π½ΠΈ ΠΏΠΎΠΌΠ΅ΠΆΠ΄Ρ ΡΠΈ ΠΈ ΡΠ΅ ΠΌΠΎΠ½ΡΠΈΡΠ°Ρ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»Π½ΠΎ Π»Π΅ΡΠ½ΠΎ
ΠΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ Prometheus ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΌΠΎΠ΄Π΅Π»Π° Π·Π° ΠΈΠ·Π²Π»ΠΈΡΠ°Π½Π΅ <service>/metrics
, ΠΈ Π΄ΠΎΠ±Π°Π²ΡΠ½Π΅ΡΠΎ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ Ρ ΠΊΠΎΡ Π·Π° ΡΠΎΠ²Π° Π΅ ΠΎΠ±ΠΈΡΠ°ΠΉΠ½ΠΎ. ΠΠ° ΡΡΠΆΠ°Π»Π΅Π½ΠΈΠ΅ JMX ΠΏΠΎΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈΡΠ΅ ΡΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠ°Ρ Π½Π°ΠΉ-Π΄ΠΎΠ±ΡΠ΅ Π² 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 ΠΈ Ρ.Π½
ΠΡΡΠ²ΠΎ Π΄ΠΎΠ±Π°Π²ΡΠΌΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΈΡ ΡΠ°ΠΉΠ» Π½Π° Π΅ΠΊΡΠΏΠΎΡΡΠ΅ΡΠ° ΠΊΡΠΌ Π½Π°ΡΠ°ΡΠ° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°/config/ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ
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 ΡΠ° ΡΡΡΠ°Ρ
ΠΎΡΠ½ΠΈ, Π·Π°ΡΠΎΡΠΎ Ρ
Π΅ΡΠΈΡΠ°Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΈΡΠ΅ Π΄Π°Π½Π½ΠΈ ΠΈ ΠΏΡΠΈΠ½ΡΠΆΠ΄Π°Π²Π°Ρ ΡΠ΅ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΠΎΠ΄, Π°ΠΊΠΎ ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ. Π’Π΅ ΡΡΡΠΎ ΡΠ°ΠΊΠ° Π½Π°ΠΌΠ°Π»ΡΠ²Π°Ρ ΠΎΠ±Π΅ΠΌΠ° Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° Π² 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
,
Π Π°Π·ΡΠΈΡΡΠ²Π°Π½Π΅ Π½Π° ΡΠΎΠ·ΠΈ ΠΌΠΎΠ΄Π΅Π» ΠΊΡΠΌ Π΄ΡΡΠ³ΠΈ ΡΠ»ΡΡΠ°ΠΈ Π½Π° ΡΠΏΠΎΡΡΠ΅Π±Π°
ΠΡΠΈΡΠΊΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅, ΠΊΠΎΠΈΡΠΎ Π΄ΠΎΠ±Π°Π²ΡΠΌΠ΅ ΠΊΡΠΌ ConfigMapGenerator, ΡΠ΅ Π±ΡΠ΄Π°Ρ Π΄ΠΎΡΡΡΠΏΠ½ΠΈ Π² Π½ΠΎΠ²Π°ΡΠ° Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ /etc/config
. ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΠ°Π·ΡΠΈΡΠΈΡΠ΅ ΡΠΎΠ·ΠΈ ΡΠ°Π±Π»ΠΎΠ½, Π·Π° Π΄Π° ΠΌΠΎΠ½ΡΠΈΡΠ°ΡΠ΅ Π²ΡΠΈΡΠΊΠΈ Π΄ΡΡΠ³ΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅, ΠΎΡ ΠΊΠΎΠΈΡΠΎ ΡΠ΅ Π½ΡΠΆΠ΄Π°Π΅ΡΠ΅. ΠΠΎΠΆΠ΅ΡΠ΅ Π΄ΠΎΡΠΈ Π΄Π° ΠΌΠΎΠ½ΡΠΈΡΠ°ΡΠ΅ Π½ΠΎΠ² ΡΡΠ°ΡΡΠΈΡΠ°Ρ ΡΠΊΡΠΈΠΏΡ. ΠΠΎΠΆΠ΅Ρ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ
Π‘ΠΏΠΈΡΠ°Π½ΠΈΡ
Π‘ΡΡΠ°Ρ
ΠΎΡΠ½Π° Π½ΠΎΠ²ΠΈΠ½Π°! Π Π΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΈΡΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡΠ° Π²Π΅ΡΠ΅ ΡΠ° Π½Π°Π»ΠΈΡΠ½ΠΈ Π½Π° 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. ΠΠΊΠΎ Π½Π΅, Π΅ΡΠΎ Π½ΡΠΊΠΎΠΈ ΠΎΠΏΡΠΈΠΈ: Π¨ΠΈΡΡΠΎΠ²Π°Π½Π΅ Ρ KMS Π½Π° Π²Π°ΡΠΈΡ Π΄ΠΎΡΡΠ°Π²ΡΠΈΠΊ Π½Π° ΠΎΠ±Π»Π°ΠΊ ΠΈ ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° ΠΈΠ½ΠΆΠ΅ΠΊΡΠΈΡΠ°Π½Π΅ Π² K8S ΠΊΠ°ΡΠΎ ΡΠ°ΠΉΠ½ΠΈ ΡΡΠ΅Π· ΡΡΡΠ±ΠΎΠΏΡΠΎΠ²ΠΎΠ΄Π° Π½Π° CD β
ΠΠ»ΠΈΠ·Π°Π½Π΅
ΠΡΠ²Π΅Π½ Π°ΠΊΠΎ Π½Π΅ ΠΈΠ·Π±Π΅ΡΠ΅ΡΠ΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ Π»ΠΎΠΊΠ°Π»Π½ΠΎ ΠΏΡΠ΅Π½Π°ΡΠΎΡΠ²Π°Π½Π΅ Π½Π° ΠΏΠΎΡΡΠΎΠ²Π΅, ΡΠ΅ Π²ΠΈ ΡΡΡΠ±Π²Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½ Ingress Controller. ΠΠΊΠΎ Π½Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ ingress-patch.yaml.tmpl
ΠΈΠ»ΠΈ platform/ingress.yaml
. ΠΠΊΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ ingress-nginx ΠΈ Π²ΠΈΠ΄ΠΈΡΠ΅ Π²Ρ
ΠΎΠ΄ΡΡ ΠΊΠ»Π°Ρ Π½Π° nginx Ρ Π±Π°Π»Π°Π½ΡΡΠΎΡ Π½Π° Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½Π΅ΡΠΎ, ΡΠΎΡΠ΅Ρ ΠΊΡΠΌ Π½Π΅Π³ΠΎ, ΠΈ Π²ΡΠ½ΡΠ΅Π½ DNS ΠΈΠ»ΠΈ DNS Π·Π°ΠΏΠΈΡ ΡΡΡ Π·Π°ΠΌΠ΅ΡΡΠ²Π°Ρ Π·Π½Π°ΠΊ, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΡΡΠ³Π½Π΅ΡΠ΅. Π ΠΏΡΠΎΡΠΈΠ²Π΅Π½ ΡΠ»ΡΡΠ°ΠΉ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°ΠΉΡΠ΅ Ingress Controller ΠΈ DNS ΠΈΠ»ΠΈ ΠΏΡΠΎΠΏΡΡΠ½Π΅ΡΠ΅ ΡΠ΅Π·ΠΈ ΡΡΡΠΏΠΊΠΈ ΠΈ Π·Π°ΠΏΠ°Π·Π΅ΡΠ΅ Π΄ΠΈΡΠ΅ΠΊΡΠ½Π°ΡΠ° Π²ΡΡΠ·ΠΊΠ° Ρ Π³ΡΡΠΏΠ°ΡΠ°.
TLS
ΠΠΊΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ 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 Π΅ Π½Π°ΠΏΡΠ»Π½ΠΎ Π³ΠΎΡΠΎΠ². ΠΠ΅Π½ΠΈΠ΄ΠΆΡΡΡΡ Π½Π° ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈ ΡΠ΅ ΠΎΡΠ½Π΅ΠΌΠ΅ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ Π²ΡΠ΅ΠΌΠ΅, Π·Π° Π΄Π° ΠΏΡΠΎΠ²Π΅ΡΠΈ ΠΈΠΌΠ΅ΡΠΎ Π½Π° Π΄ΠΎΠΌΠ΅ΠΉΠ½Π°. Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π½Π°Π±Π»ΡΠ΄Π°Π²Π°ΡΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΈΡΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅, ΠΊΠ°ΡΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ Π½Π°Π»ΠΈΡΠ½ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ ΠΊΠ°ΡΠΎ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ ΠΊΠ°ΡΠΎ kubetail ΠΈΠ»ΠΈ ΠΏΡΠΎΡΡΠΎ ΠΊΠ°ΡΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ kubectl:
kubectl logs -n camunda-bpm-demo $(kubectl get pods -o=name -n camunda-bpm-demo) -f
Π‘Π»Π΅Π΄Π²Π°ΡΠΈ ΡΠ°Π³ΠΈ
Π£ΠΏΡΠ»Π½ΠΎΠΌΠΎΡΠ°Π²Π°Π½Π΅
Π’ΠΎΠ²Π° Π΅ ΠΏΠΎ-ΡΠΌΠ΅ΡΡΠ½ΠΎ Π·Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½Π΅ Π½Π° Camunda BPM ΠΎΡΠΊΠΎΠ»ΠΊΠΎΡΠΎ Kubernetes, Π½ΠΎ Π΅ Π²Π°ΠΆΠ½ΠΎ Π΄Π° ΡΠ΅ ΠΎΡΠ±Π΅Π»Π΅ΠΆΠΈ, ΡΠ΅ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ ΡΠ΄ΠΎΡΡΠΎΠ²Π΅ΡΡΠ²Π°Π½Π΅ΡΠΎ Π΅ Π΄Π΅Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½ΠΎ Π² 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 Π²ΠΌΠ΅ΡΡΠΎ sed
ΠΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ
ΠΌΠ΅
ΠΌΠ°ΡΠ°Π±ΠΈΡΠ°Π½Π΅
ΠΠΊΠΎ Π²Π΅ΡΠ΅ ΡΠ°Π·Π±ΠΈΡΠ°ΡΠ΅ ΡΠ΅ΡΠΈΠΈΡΠ΅, ΡΠΎΠ³Π°Π²Π° ΠΏΡΡΠ²ΠΎΡΠΎ (ΠΈ ΡΠ΅ΡΡΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΎΡΠΎ) ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ Π·Π° ΠΌΠ°ΡΠ°Π±ΠΈΡΠ°Π½Π΅ Π½Π° Camunda BPM ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ Π²ΡΡΠ·ΠΊΠ°ΡΠ° Ρ Π±Π°Π·Π°ΡΠ° Π΄Π°Π½Π½ΠΈ. ΠΠ΅ΡΠ΅ Π΅ Π½Π°Π»ΠΈΡΠ΅ ΡΠ°ΡΡΠΈΡΠ½ΠΎ ΠΏΠ΅ΡΡΠΎΠ½Π°Π»ΠΈΠ·ΠΈΡΠ°Π½Π΅ "
ΠΡΠΊΠ°Π½ΠΈΡ ΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ
Π 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 Π³., ΠΏΡΠ΅Π²ΠΎΠ΄
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: www.habr.com