Та 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 дүрсийг өөрчлөх боломжтой хэд хэдэн хэсгийг харцгаая (
- Бүртгэл ба хэмжүүр;
- Өгөгдлийн сангийн холболтууд;
- Баталгаажуулалт;
- Сеанс менежмент.
Бид эдгээр зорилгодоо хүрэх хэд хэдэн арга замыг авч үзэж, бүх үйл явцыг тодорхой харуулах болно.
тайлбар: Та 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
эсвэл цааш үргэлжлүүлээрэй.
Шаардлагатай нөхцлүүд
- Ажлын кластер
Kubernetes Тохируулах Скаффолд - өөрийн докерын зургийг бүтээх, GKE-д хялбар байршуулах- Энэ кодын хуулбар
- Envsubst
Манифест ашиглан ажлын урсгал
Хэрэв та kustomize эсвэл skaffold ашиглахыг хүсэхгүй байгаа бол доорх манифестуудыг үзэж болно. generated-manifest.yaml
мөн тэдгээрийг өөрийн сонгосон ажлын урсгалд тохируулаарай.
Бүртгэл ба хэмжүүр
Prometheus нь Кубернетес дэх хэмжүүр цуглуулах стандарт болсон. Энэ нь AWS Cloudwatch Metrics, Cloudwatch Alerts, Stackdriver Metrics, StatsD, Datadog, Nagios, vSphere Metrics болон бусадтай ижил байр суурийг эзэлдэг. Энэ нь нээлттэй эх сурвалж бөгөөд хүчирхэг хайлтын хэлтэй. Бид дүрслэлийг Графана-д даатгах болно - энэ нь хайрцагнаас гарах боломжтой олон тооны хяналтын самбартай ирдэг. Тэдгээр нь хоорондоо холбогдсон бөгөөд суулгахад харьцангуй хялбар байдаг
Анхдагч байдлаар, 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 нь тохиргооны өгөгдлүүдийг хэш болгож, өөрчлөгдвөл 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
,
Энэ загварыг бусад хэрэглээний тохиолдлуудад өргөтгөх
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-ээр шифрлээд дараа нь CD дамжуулах шугамаар дамжуулан K8S руу нууц болгон оруулах −
Ingress
Хэрэв та дотоод порт дамжуулалтыг ашиглахаар сонгоогүй бол танд тохируулсан Ingress Controller хэрэгтэй болно. Хэрэв та ашиглахгүй бол ingress-patch.yaml.tmpl
буюу platform/ingress.yaml
. Хэрэв та ingress-nginx-г ашиглаж байгаа бөгөөд ачааллын тэнцвэржүүлэгчийг зааж байгаа nginx ingress анги, гадаад DNS эсвэл орлуулагч тэмдэгт DNS оруулгыг харвал та явахад бэлэн байна. Үгүй бол Ingress Controller болон DNS-ийг тохируулна уу, эсвэл эдгээр алхмуудыг алгасаад pod-той шууд холболтоо үргэлжлүүлээрэй.
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
Томкат бүрэн бэлэн болтол хэдэн минут хүлээнэ үү. Сертификат-менежер домэйн нэрийг баталгаажуулахад хэсэг хугацаа шаардагдана. Дараа нь та kubetail гэх мэт хэрэгсэл эсвэл зүгээр л kubectl ашиглан бүртгэлийг хянах боломжтой:
kubectl logs -n camunda-bpm-demo $(kubectl get pods -o=name -n camunda-bpm-demo) -f
Дараагийн алхамууд
Зөвшөөрөл
Энэ нь Kubernetes-ээс илүү Camunda BPM-ийг тохируулахтай холбоотой боловч 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
тайлбар: та sed-ийн оронд xmlstarlet ашиглаж болно
Бид ашигласан
Дэмжих
Хэрэв та сессийг аль хэдийн ойлгосон бол Camunda BPM-ийн масштабыг нэмэгдүүлэх эхний (болон ихэнхдээ сүүлчийн) хязгаарлалт нь мэдээллийн сантай холбогдох байж магадгүй юм. Хэсэгчлэн тохируулах боломжтой болсон "
Хүсэлт ба хязгаарлалт
В 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