Kubernetes-da Camunda BPM-ni ishga tushirish

Kubernetes-da Camunda BPM-ni ishga tushirish

Kubernetes-dan foydalanasizmi? Camunda BPM nusxalarini virtual mashinalardan ko'chirishga tayyormisiz yoki shunchaki ularni Kubernetes-da ishga tushirishga harakat qilasizmi? Keling, sizning maxsus ehtiyojlaringizga moslashtirilishi mumkin bo'lgan ba'zi umumiy konfiguratsiyalar va alohida elementlarni ko'rib chiqaylik.

Siz ilgari Kubernetes-dan foydalangan deb taxmin qilinadi. Agar yo'q bo'lsa, nega ko'rib chiqmaslik kerak etakchilik va birinchi klasteringizni boshlamaysizmi?

mualliflar

  • Alastair Firth (Alastair Firth) - Camunda Cloud jamoasida sayt ishonchliligi bo'yicha katta muhandis;
  • Lars Lange (Lars Lange) - Camundadagi DevOps muhandisi.

Qisqasi:

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

OK, sizda skaffold va kustomize o'rnatilmagani uchun u ishlamagan bo'lishi mumkin. Xo'sh, keyin o'qing!

Camunda BPM nima

Camunda BPM ochiq manbali biznes jarayonlarini boshqarish va qarorlarni avtomatlashtirish platformasi boʻlib, u biznes foydalanuvchilari va dasturiy taʼminot ishlab chiqaruvchilarini bogʻlaydi. Bu odamlarni, (mikro) xizmatlarni yoki hatto botlarni muvofiqlashtirish va ulash uchun ideal! Turli xil foydalanish holatlari haqida ko'proq o'qishingiz mumkin aloqa.

Nima uchun Kubernetes-dan foydalanish kerak

Kubernetes Linuxda zamonaviy ilovalarni ishga tushirish uchun de-fakto standartga aylandi. Uskuna emulyatsiyasi o'rniga tizim qo'ng'iroqlaridan foydalanish va yadroning xotira va vazifalarni almashtirish qobiliyatini boshqarish, yuklash vaqti va ishga tushirish vaqti minimal darajada saqlanadi. Biroq, eng katta foyda Kubernetes barcha ilovalar uchun zarur bo'lgan infratuzilmani sozlash uchun taqdim etadigan standart API bo'lishi mumkin: saqlash, tarmoq va monitoring. U 2020 yil iyun oyida 6 yoshga to'ldi va, ehtimol, ikkinchi yirik ochiq kodli loyiha (Linuxdan keyin). So'nggi bir necha yil ichida u tez takrorlangandan so'ng, so'nggi paytlarda o'z funksionalligini faol ravishda barqarorlashtirmoqda, chunki u butun dunyo bo'ylab ishlab chiqarish ish yuklari uchun juda muhim bo'lib qoldi.

Camunda BPM Engine bir xil klasterda ishlaydigan boshqa ilovalarga osongina ulanishi mumkin va Kubernetes mukammal miqyoslilikni ta'minlaydi, bu sizga infratuzilma xarajatlarini faqat kerak bo'lganda oshirish imkonini beradi (va kerak bo'lganda ularni osonlikcha kamaytiradi).

Monitoring sifati Prometey, Grafana, Loki, Fluentd va Elasticsearch kabi vositalar yordamida ham sezilarli darajada yaxshilanadi, bu sizga klasterdagi barcha ish yuklarini markaziy ko‘rish imkonini beradi. Bugun biz Prometey eksportchisini Java Virtual Machine (JVM) ga qanday joriy qilishni ko'rib chiqamiz.

Maqsadlar

Keling, Camunda BPM Docker tasvirini sozlashimiz mumkin bo'lgan bir nechta sohalarni ko'rib chiqaylik (Github) shuning uchun u Kubernetes bilan yaxshi o'zaro ta'sir qiladi.

  1. Jurnallar va ko'rsatkichlar;
  2. Ma'lumotlar bazasi ulanishlari;
  3. autentifikatsiya;
  4. Sessiya boshqaruvi.

Biz ushbu maqsadlarga erishishning bir necha usullarini ko'rib chiqamiz va butun jarayonni aniq ko'rsatamiz.

nota: Enterprise versiyasidan foydalanyapsizmi? Qarang shu yerda va kerak bo'lganda rasm havolalarini yangilang.

Ish jarayonini rivojlantirish

Ushbu demoda biz Google Cloud Build yordamida Docker tasvirlarini yaratish uchun Skaffold-dan foydalanamiz. U turli xil vositalar (masalan, Kustomize va Helm), CI va qurish vositalari va infratuzilma provayderlari uchun yaxshi yordamga ega. Fayl skaffold.yaml.tmpl ishlab chiqarish darajasidagi infratuzilmani ishga tushirishning juda oddiy usulini ta'minlovchi Google Cloud Build va GKE sozlamalarini o'z ichiga oladi.

make skaffold Dockerfile kontekstini Cloud Build-ga yuklaydi, tasvirni yaratadi va uni GCR-da saqlaydi va keyin manifestlarni klasteringizga qo'llaydi. Bu shunday qiladi make skaffold, lekin Skaffold boshqa ko'plab xususiyatlarga ega.

Kubernetesdagi yaml shablonlari uchun biz butun manifestni ajratmasdan yaml qoplamalarini boshqarish uchun kustomize-dan foydalanamiz, bu sizga foydalanish imkonini beradi. git pull --rebase yanada takomillashtirish uchun. Endi u kubectl-da va u bunday narsalar uchun juda yaxshi ishlaydi.

Biz, shuningdek, *.yaml.tmpl fayllarida xost nomi va GCP loyiha identifikatorini to'ldirish uchun envsubst-dan foydalanamiz. Uning qanday ishlashini ko'rishingiz mumkin makefile yoki shunchaki davom eting.

Kerakli shartlar

Manifestlardan foydalangan holda ish jarayoni

Agar siz kustomize yoki skaffolddan foydalanishni istamasangiz, quyidagi manifestlarga murojaat qilishingiz mumkin. generated-manifest.yaml va ularni siz tanlagan ish jarayoniga moslashtiring.

Jurnallar va ko'rsatkichlar

Prometey Kubernetesda o'lchovlarni yig'ish uchun standartga aylandi. U AWS Cloudwatch Metrics, Cloudwatch Alerts, Stackdriver Metrics, StatsD, Datadog, Nagios, vSphere Metrics va boshqalar bilan bir xil joyni egallaydi. Bu ochiq manba va kuchli so'rovlar tiliga ega. Vizualizatsiyani Grafana’ga ishonib topshiramiz – u qutidan tashqarida mavjud bo‘lgan ko‘p sonli boshqaruv paneli bilan birga keladi. Ular bir-biriga bog'langan va ularni o'rnatish nisbatan oson prometey-operator.

Odatiy bo'lib, Prometey ekstraksiya modelidan foydalanadi <service>/metrics, va buning uchun yonbosh konteynerlarini qo'shish odatiy holdir. Afsuski, JMX ko'rsatkichlari JVM ichida eng yaxshi qayd qilinadi, shuning uchun yonbosh konteynerlari unchalik samarali emas. Ulanamiz jmx_exporter yo'lni ta'minlaydigan konteyner tasviriga qo'shish orqali Prometeydan JVMga ochiq manba /metrics boshqa portda.

Konteynerga Prometheus jmx_exporter qo'shing

-- 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

Xo'sh, bu oson edi. Eksport qiluvchi tomcatni kuzatib boradi va uning ko'rsatkichlarini Prometey formatida ko'rsatadi <svc>:9404/metrics

Eksportchini sozlash

Diqqatli o'quvchi bu qayerdan kelganiga hayron bo'lishi mumkin prometheus-jmx.yaml? JVM-da ishlashi mumkin bo'lgan juda ko'p turli xil narsalar mavjud va tomcat ulardan faqat bittasi, shuning uchun eksportchi qo'shimcha konfiguratsiyaga muhtoj. Tomcat, wildfly, kafka va boshqalar uchun standart konfiguratsiyalar mavjud shu yerda. Biz tomcat sifatida qo'shamiz ConfigMap Kubernetes-da va keyin uni jild sifatida o'rnating.

Birinchidan, eksportchi konfiguratsiya faylini platformamiz/config/ katalogimizga qo'shamiz

platform/config
└── prometheus-jmx.yaml

Keyin qo'shamiz ConfigMapGenerator в kustomization.yaml.tmpl:

-- platform/kustomization.yaml.tmpl
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
[...] configMapGenerator:
- name: config
files:
- config/prometheus-jmx.yaml

Bu har bir elementni qo'shadi files[] ConfigMap konfiguratsiya elementi sifatida. ConfigMapGenerators ajoyib, chunki ular konfiguratsiya ma'lumotlarini xeshlaydi va agar u o'zgarsa, podni qayta ishga tushirishga majbur qiladi. Ular, shuningdek, Deployment-da konfiguratsiya miqdorini kamaytiradi, chunki siz bitta VolumeMount-ga konfiguratsiya fayllarining butun "papkasini" o'rnatishingiz mumkin.

Nihoyat, biz ConfigMap-ni podga jild sifatida o'rnatishimiz kerak:

-- 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
[...]

Ajoyib. Agar Prometey to'liq tozalashni amalga oshirish uchun sozlanmagan bo'lsa, siz unga podlarni tozalashni aytishingiz kerak bo'lishi mumkin. Prometheus Operator foydalanuvchilari foydalanishi mumkin service-monitor.yaml boshlash uchun. Tadqiq qiling Service-monitor.yaml, operator dizayni и ServiceMonitorSpec boshlashdan oldin.

Ushbu naqshni boshqa foydalanish holatlariga kengaytirish

Biz ConfigMapGenerator-ga qo'shadigan barcha fayllar yangi katalogda mavjud bo'ladi /etc/config. Siz ushbu shablonni o'zingizga kerak bo'lgan boshqa konfiguratsiya fayllarini o'rnatish uchun kengaytirishingiz mumkin. Siz hatto yangi ishga tushirish skriptini o'rnatishingiz mumkin. foydalanishingiz mumkin subPath alohida fayllarni o'rnatish uchun. xml fayllarini yangilash uchun foydalanishni o'ylab ko'ring xmlstarlet sed o'rniga. U allaqachon rasmga kiritilgan.

Jurnallar

Ajoyib yangilik! Ilova jurnallari allaqachon stdout da mavjud, masalan kubectl logs. Fluentd (GKE-da sukut bo'yicha o'rnatilgan) jurnallaringizni Elasticsearch, Loki yoki korporativ logging platformasiga yo'naltiradi. Jurnallar uchun jsonify dan foydalanmoqchi bo'lsangiz, o'rnatish uchun yuqoridagi shablonga amal qilishingiz mumkin logback.

Malumotlar bazasi

Odatiy bo'lib, rasmda H2 ma'lumotlar bazasi bo'ladi. Bu biz uchun mos emas va biz Google Cloud SQL-dan Cloud SQL Proksi-server bilan foydalanamiz - bu keyinchalik ichki muammolarni hal qilish uchun kerak bo'ladi. Agar ma'lumotlar bazasini o'rnatishda o'zingizning afzalliklaringiz bo'lmasa, bu oddiy va ishonchli variant. AWS RDS xuddi shunday xizmatni taqdim etadi.

Siz tanlagan ma'lumotlar bazasidan qat'i nazar, agar u H2 bo'lmasa, tegishli muhit o'zgaruvchilarini o'rnatishingiz kerak bo'ladi. platform/deploy.yaml. Bu shunday ko'rinadi:

-- 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
[...]

nota: Qoplama yordamida turli muhitlarga joylashtirish uchun Kustomize dan foydalanishingiz mumkin: misol.

nota: foydalanish valueFrom: secretKeyRef. Iltimos, foydalaning bu Kubernetes xususiyati sirlaringizni xavfsiz saqlash uchun hatto rivojlanish paytida ham.

Ehtimol sizda Kubernetes sirlarini boshqarish uchun afzal qilingan tizim allaqachon mavjud. Agar yo'q bo'lsa, bu erda ba'zi variantlar mavjud: ularni bulutli provayderingizning KMS-si bilan shifrlash va keyin ularni K8S-ga CD quvuri orqali sir sifatida kiritish - Mozilla SOPS - Kustomize sirlari bilan birgalikda juda yaxshi ishlaydi. Shu kabi funktsiyalarni bajaradigan dotGPG kabi boshqa vositalar ham mavjud: HashiCorp Vault, Maxfiy qiymat plaginlarini sozlang.

Kirish

Mahalliy portni yo'naltirishni tanlamaguningizcha, konfiguratsiya qilingan kirish nazoratchisi kerak bo'ladi. Agar foydalanmasangiz kirish-nginx (Rulda diagrammasi) keyin siz kerakli izohlarni o'rnatishingiz kerakligini allaqachon bilasiz ingress-patch.yaml.tmpl yoki platform/ingress.yaml. Agar siz ingress-nginx-dan foydalanayotgan bo'lsangiz va unga ishora qiluvchi yuk balanslagichi va tashqi DNS yoki joker belgilar DNS yozuvi bilan nginx kirish sinfini ko'rsangiz, borish yaxshidir. Aks holda, Ingress Controller va DNS-ni sozlang yoki ushbu bosqichlarni o'tkazib yuboring va podkastga to'g'ridan-to'g'ri ulanishni saqlang.

TLS

Agar siz foydalanayotgan bo'lsangiz sertifikat menejeri yoki kube-lego va letsencrypt - yangi login uchun sertifikatlar avtomatik ravishda olinadi. Aks holda, oching ingress-patch.yaml.tmpl va uni ehtiyojlaringizga moslashtiring.

Ishga tushirish!

Agar siz yuqorida yozilgan hamma narsani bajargan bo'lsangiz, unda buyruq make skaffold HOSTNAME=<you.example.com> mavjud namunani ishga tushirishi kerak <hostname>/camunda

Agar siz loginingizni umumiy URL manziliga o'rnatmagan bo'lsangiz, uni qayta yo'naltirishingiz mumkin localhost: kubectl port-forward -n camunda-bpm-demo svc/camunda-bpm 8080:8080 haqida localhost:8080/camunda

Tomcat to'liq tayyor bo'lguncha bir necha daqiqa kuting. Sertifikat menejeri domen nomini tekshirish uchun biroz vaqt talab etadi. Keyin jurnallarni kubetail kabi vosita kabi mavjud vositalar yordamida yoki oddiygina kubectl yordamida kuzatishingiz mumkin:

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

Keyingi qadamlar

Avtorizatsiya

Bu Kubernetesga qaraganda Camunda BPM-ni sozlash uchun ko'proq mos keladi, ammo shuni ta'kidlash kerakki, sukut bo'yicha REST API-da autentifikatsiya o'chirilgan. Siz .. qila olasiz; siz ... mumkin asosiy autentifikatsiyani yoqish yoki boshqa usuldan foydalaning J.W.T.. Xml yuklash uchun konfiguratsiya xaritalari va jildlardan yoki rasmdagi mavjud fayllarni tahrirlash uchun xmlstarlet (yuqoriga qarang) va wget-dan foydalaning yoki init konteyneri va umumiy hajm yordamida ularni yuklashingiz mumkin.

Sessiyani boshqarish

Boshqa ko'plab ilovalar singari, Camunda BPM JVM-dagi seanslarni boshqaradi, shuning uchun bir nechta replikalarni ishga tushirishni istasangiz, yopishqoq seanslarni yoqishingiz mumkin (masalan, ingress-nginx uchun), replika yoʻqolguncha mavjud boʻladi yoki cookie fayllari uchun Max-Age atributini oʻrnating. Keyinchalik ishonchli yechim uchun Tomcat-da Sessiya menejerini o'rnatishingiz mumkin. Lars bor alohida post bu mavzuda, lekin shunga o'xshash narsa:

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

nota: sed o'rniga xmlstarlet dan foydalanishingiz mumkin

Biz foydalandik twemproxy Google Cloud Memorystore oldida, bilan memcached-session-menejeri (Redis-ni qo'llab-quvvatlaydi) uni ishga tushirish uchun.

Masshtablash

Agar siz allaqachon seanslarni tushunsangiz, Camunda BPM miqyosidagi birinchi (va ko'pincha oxirgi) cheklov ma'lumotlar bazasiga ulanish bo'lishi mumkin. Qisman moslashtirish allaqachon mavjud "qutidan" Keling, settings.xml faylida intialSize-ni ham o'chirib qo'yaylik. Qo'shish Gorizontal Pod Autoscaler (HPA) va siz podkastlar sonini osongina avtomatik ravishda o'lchashingiz mumkin.

So'rovlar va cheklovlar

В platform/deployment.yaml Biz resurslar maydonini qattiq kodlaganimizni ko'rasiz. Bu HPA bilan yaxshi ishlaydi, lekin qo'shimcha konfiguratsiyani talab qilishi mumkin. Buning uchun kustomize patch mos keladi. Sm. ingress-patch.yaml.tmpl и ./kustomization.yaml.tmpl

xulosa

Shunday qilib, biz Camunda BPM-ni Kubernetes-ga Prometey ko'rsatkichlari, jurnallari, H2 ma'lumotlar bazasi, TLS va Ingress bilan o'rnatdik. Biz ConfigMaps va Dockerfile yordamida jar fayllari va konfiguratsiya fayllarini qo'shdik. Biz ma'lumotlarni hajmlarga va to'g'ridan-to'g'ri atrof-muhit o'zgaruvchilariga sirlardan almashish haqida gaplashdik. Bundan tashqari, biz bir nechta nusxalar va autentifikatsiya qilingan API uchun Camunda-ni o'rnatish haqida umumiy ma'lumot berdik.

Manbalar

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, tarjima maqolalar Alaster Firt, Lars Lange

Manba: www.habr.com

a Izoh qo'shish