Kubernetes дээр Camunda BPM ажиллуулж байна

Kubernetes дээр Camunda BPM ажиллуулж байна

Та Kubernetes ашиглаж байна уу? Camunda BPM жишээнүүдээ виртуал машинаас зөөхөд бэлэн үү, эсвэл зүгээр л Kubernetes дээр ажиллуулаад үзээрэй? Таны хэрэгцээнд нийцүүлэн тохируулах боломжтой зарим нийтлэг тохиргоо болон бие даасан зүйлсийг харцгаая.

Та өмнө нь Kubernetes ашиглаж байсан гэж таамаглаж байна. Үгүй бол яагаад үзэж болохгүй гэж гарын авлага тэгээд анхны кластераа эхлүүлэхгүй байна уу?

зохиогчид

  • Аластэр Ферт (Alastair Firth) - Camunda Cloud багийн сайтын найдвартай байдлын ахлах инженер;
  • Ларс Ланж (Ларс Ланж) - Камунда дахь DevOps инженер.

Товчхондоо:

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

За, танд skaffold болон kustomize суулгаагүй тул ажиллахгүй байсан байх. За тэгээд цааш уншаарай!

Камунда BPM гэж юу вэ

Camunda BPM нь бизнесийн хэрэглэгчид болон програм хангамж хөгжүүлэгчдийг холбодог нээлттэй эхийн бизнесийн үйл явцын удирдлага, шийдвэрийн автоматжуулалтын платформ юм. Энэ нь хүмүүс, (микро) үйлчилгээ, тэр ч байтугай роботуудыг зохицуулах, холбоход тохиромжтой! Та өөр өөр хэрэглээний тохиолдлуудын талаар дэлгэрэнгүй унших боломжтой холбоос.

Яагаад Kubernetes ашигладаг вэ?

Kubernetes нь Линукс дээр орчин үеийн програмуудыг ажиллуулах де-факто стандарт болсон. Техник хангамжийн эмуляцийн оронд системийн дуудлагыг ашигласнаар цөмийн санах ой болон даалгаврын сэлгэлтийг удирдах чадвар нь ачаалах хугацаа болон эхлүүлэх хугацааг хамгийн бага хэмжээнд байлгадаг. Гэсэн хэдий ч хамгийн том ашиг нь Kubernetes-ийн бүх програмуудад шаардлагатай дэд бүтцийг тохируулахын тулд олгодог стандарт API-аас ирдэг: хадгалах, сүлжээ, хяналт. Энэ нь 2020 оны 6-р сард XNUMX нас хүрсэн бөгөөд магадгүй хоёр дахь том нээлттэй эхийн төсөл (Linux-ийн дараа) юм. Энэ нь дэлхий даяар үйлдвэрлэлийн ажлын ачаалалд чухал ач холбогдолтой болсон тул сүүлийн хэдэн жилийн хугацаанд хурдацтай давтагдсаны дараа сүүлийн үед үйл ажиллагаагаа идэвхтэй тогтворжуулж байна.

Camunda BPM Engine нь ижил кластер дээр ажиллаж байгаа бусад програмуудтай хялбархан холбогдож чаддаг ба Kubernetes нь маш сайн өргөтгөх боломжийг олгодог бөгөөд зөвхөн шаардлагатай үед дэд бүтцийн зардлыг нэмэгдүүлэх (мөн шаардлагатай үед хялбархан багасгах) боломжийг олгодог.

Prometheus, Grafana, Loki, Fluentd, Elasticsearch зэрэг хэрэгслүүдийн тусламжтайгаар хяналтын чанарыг эрс сайжруулж, кластер дахь бүх ачааллыг төвлөрсөн байдлаар харах боломжийг танд олгоно. Өнөөдөр бид Prometheus экспортлогчийг Java Virtual Machine (JVM) дээр хэрхэн хэрэгжүүлэх талаар авч үзэх болно.

Зорилтууд

Camunda BPM Docker дүрсийг өөрчлөх боломжтой хэд хэдэн хэсгийг харцгаая (github) ингэснээр Кубернетестэй сайн харьцдаг.

  1. Бүртгэл ба хэмжүүр;
  2. Өгөгдлийн сангийн холболтууд;
  3. Баталгаажуулалт;
  4. Сеанс менежмент.

Бид эдгээр зорилгодоо хүрэх хэд хэдэн арга замыг авч үзэж, бүх үйл явцыг тодорхой харуулах болно.

тайлбар: Та Enterprise хувилбарыг ашиглаж байна уу? Хараач энд шаардлагатай бол зургийн холбоосыг шинэчлэх.

Ажлын урсгалыг хөгжүүлэх

Энэ үзүүлэн дээр бид Google Cloud Build ашиглан Skaffold ашиглан Docker дүрсийг бүтээх болно. Энэ нь янз бүрийн хэрэгслүүд (Kustomize болон Helm гэх мэт), CI болон бүтээх хэрэгслүүд, дэд бүтцийн үйлчилгээ үзүүлэгчдэд сайн дэмжлэг үзүүлдэг. Файл skaffold.yaml.tmpl Google Cloud Build болон GKE-ийн тохиргоог багтаасан бөгөөд энэ нь үйлдвэрлэлийн түвшний дэд бүтцийг ажиллуулах маш энгийн арга юм.

make skaffold нь Dockerfile контекстийг Cloud Build-д ачаалж, зургийг бүтээж, GCR-д хадгалаад дараа нь манифестуудыг өөрийн кластерт хэрэглэнэ. Үүнийг л хийдэг make skaffold, гэхдээ Skaffold өөр олон боломжуудтай.

Kubernetes дахь yaml загваруудын хувьд бид kustomize-г ашиглан манифестийг бүхэлд нь салгахгүйгээр yaml давхаргыг удирдах боломжтой бөгөөд танд ашиглах боломжийг олгоно. git pull --rebase цаашид сайжруулах зорилгоор. Одоо энэ нь kubectl-д байгаа бөгөөд ийм зүйлд маш сайн ажилладаг.

Бид мөн *.yaml.tmpl файлд хостын нэр болон GCP төслийн ID-г бөглөхийн тулд envsubst-ийг ашигладаг. Энэ нь хэрхэн ажилладагийг та харж болно makefile эсвэл цааш үргэлжлүүлээрэй.

Шаардлагатай нөхцлүүд

Манифест ашиглан ажлын урсгал

Хэрэв та kustomize эсвэл skaffold ашиглахыг хүсэхгүй байгаа бол доорх манифестуудыг үзэж болно. generated-manifest.yaml мөн тэдгээрийг өөрийн сонгосон ажлын урсгалд тохируулаарай.

Бүртгэл ба хэмжүүр

Prometheus нь Кубернетес дэх хэмжүүр цуглуулах стандарт болсон. Энэ нь AWS Cloudwatch Metrics, Cloudwatch Alerts, Stackdriver Metrics, StatsD, Datadog, Nagios, vSphere Metrics болон бусадтай ижил байр суурийг эзэлдэг. Энэ нь нээлттэй эх сурвалж бөгөөд хүчирхэг хайлтын хэлтэй. Бид дүрслэлийг Графана-д даатгах болно - энэ нь хайрцагнаас гарах боломжтой олон тооны хяналтын самбартай ирдэг. Тэдгээр нь хоорондоо холбогдсон бөгөөд суулгахад харьцангуй хялбар байдаг прометей-оператор.

Анхдагч байдлаар, Prometheus олборлох загварыг ашигладаг <service>/metrics, мөн үүний тулд хажуугийн савыг нэмэх нь түгээмэл байдаг. Харамсалтай нь JMX хэмжигдэхүүнийг JVM-д хамгийн сайн бүртгэдэг тул хажуугийн савнууд тийм ч үр дүнтэй байдаггүй. Холбоцгооё 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-д суулгаад дараа нь эзлэхүүн болгон холбоно уу.

Эхлээд бид экспортлогчийн тохиргооны файлыг платформ/config/ директорт нэмнэ

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[] ConfigMap тохиргооны элемент болгон. ConfigMapGenerators нь тохиргооны өгөгдлүүдийг хэш болгож, өөрчлөгдвөл pod дахин эхлүүлэх тул маш сайн. Та нэг VolumeMount-д тохиргооны файлуудын бүхэл "хавтас"-ыг холбох боломжтой тул тэдгээр нь Байршуулалт дахь тохиргооны хэмжээг бууруулдаг.

Эцэст нь, бид ConfigMap-ийг pod-д эзлэхүүн болгон холбох хэрэгтэй:

-- 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-ээр шифрлээд дараа нь CD дамжуулах шугамаар дамжуулан K8S руу нууц болгон оруулах − Mozilla SOPS - Kustomize нууцтай хослуулан маш сайн ажиллах болно. Үүнтэй төстэй функцүүдийг гүйцэтгэдэг dotGPG зэрэг бусад хэрэгслүүд байдаг: HashiCorp Vault, Нууц үнэ цэнийн залгаасуудыг тохируулна уу.

Ingress

Хэрэв та дотоод порт дамжуулалтыг ашиглахаар сонгоогүй бол танд тохируулсан Ingress Controller хэрэгтэй болно. Хэрэв та ашиглахгүй бол ingress-nginx (Жолооны диаграм) дараа нь та шаардлагатай тэмдэглэгээг суулгах хэрэгтэй гэдгээ аль хэдийн мэдэж байгаа байх ingress-patch.yaml.tmpl буюу platform/ingress.yaml. Хэрэв та ingress-nginx-г ашиглаж байгаа бөгөөд ачааллын тэнцвэржүүлэгчийг зааж байгаа nginx ingress анги, гадаад DNS эсвэл орлуулагч тэмдэгт DNS оруулгыг харвал та явахад бэлэн байна. Үгүй бол Ingress Controller болон DNS-ийг тохируулна уу, эсвэл эдгээр алхмуудыг алгасаад pod-той шууд холболтоо үргэлжлүүлээрэй.

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

Томкат бүрэн бэлэн болтол хэдэн минут хүлээнэ үү. Сертификат-менежер домэйн нэрийг баталгаажуулахад хэсэг хугацаа шаардагдана. Дараа нь та kubetail гэх мэт хэрэгсэл эсвэл зүгээр л kubectl ашиглан бүртгэлийг хянах боломжтой:

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

Дараагийн алхамууд

Зөвшөөрөл

Энэ нь Kubernetes-ээс илүү Camunda BPM-ийг тохируулахтай холбоотой боловч REST API дээр анхдагчаар баталгаажуулалтыг идэвхгүй болгосон гэдгийг анхаарах нь чухал юм. Чи чадна үндсэн баталгаажуулалтыг идэвхжүүлнэ эсвэл өөр аргыг ашиглана уу J.W.T.. Та xml-г ачаалахдаа тохиргооны зураг болон боть, эсвэл зураг дээрх байгаа файлуудыг засахын тулд xmlstarlet (дээрхийг харна уу) ашиглаж болно, мөн wget-г ашиглаж эсвэл init контейнер болон хуваалцсан эзлэхүүнийг ашиглан ачаалж болно.

Сеанс менежмент

Бусад олон програмын нэгэн адил Camunda BPM нь JVM дээрх сешнүүдийг зохицуулдаг тул хэрэв та олон хуулбарыг ажиллуулахыг хүсвэл наалттай сешнүүдийг идэвхжүүлж болно (жишээ нь ingress-nginx), хуулбар алга болтол оршин байх эсвэл күүкид Max-Age шинж чанарыг тохируулна уу. Илүү найдвартай шийдлийн хувьд та Tomcat-д Session Manager-ийг байрлуулж болно. Ларс байна тусдаа бичлэг Энэ сэдвээр, гэхдээ иймэрхүү зүйл:

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

тайлбар: та sed-ийн оронд xmlstarlet ашиглаж болно

Бид ашигласан твмпрокси Google Cloud Memorystore-ийн урд талд, хамт memcached-session-менежер (Redis-ийг дэмждэг) үүнийг ажиллуулна.

Дэмжих

Хэрэв та сессийг аль хэдийн ойлгосон бол Camunda BPM-ийн масштабыг нэмэгдүүлэх эхний (болон ихэнхдээ сүүлчийн) хязгаарлалт нь мэдээллийн сантай холбогдох байж магадгүй юм. Хэсэгчлэн тохируулах боломжтой болсон "хайрцагнаас" Мөн settings.xml файл доторх intialSize-г идэвхгүй болгоё. Нэмэх Хэвтээ pod Autoscaler (HPA) мөн та хонгилын тоог автоматаар хялбархан тохируулах боломжтой.

Хүсэлт ба хязгаарлалт

В platform/deployment.yaml Бид нөөцийн талбарыг хатуу кодчилсныг та харах болно. Энэ нь HPA-тай сайн ажилладаг боловч нэмэлт тохиргоо шаардлагатай байж болно. Kustomize нөхөөс нь үүнд тохиромжтой. см. ingress-patch.yaml.tmpl и ./kustomization.yaml.tmpl

дүгнэлт

Тиймээс бид Prometheus хэмжигдэхүүнүүд, бүртгэлүүд, H2 мэдээллийн сан, TLS болон Ingress бүхий Camunda BPM-ийг Kubernetes дээр суулгасан. Бид ConfigMaps болон Dockerfile ашиглан jar файлууд болон тохиргооны файлуудыг нэмсэн. Бид нууцаас өгөгдлийг эзлэхүүн болон орчны хувьсагчид шууд солилцох талаар ярилцсан. Нэмж дурдахад бид олон хуулбар болон баталгаажуулсан API-д зориулж 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, орчуулга нийтлэл Аластер Ферт, Ларс Ланж

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх