Иҷрои Camunda BPM дар Kubernetes

Иҷрои Camunda BPM дар Kubernetes

Оё шумо 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 насб накардаед. Хуб, пас хонед!

Camunda BPM чист

Camunda BPM платформаи идоракунии равандҳои бизнес ва автоматикунонии тасмимҳои кушодаасос мебошад, ки корбарони тиҷорат ва таҳиягарони нармафзорро мепайвандад. Он барои ҳамоҳангсозӣ ва пайваст кардани одамон, хидматҳо (микро) ва ҳатто ботҳо беҳтарин аст! Шумо метавонед дар бораи ҳолатҳои гуногуни истифода дар ин ҷо бештар хонед пайванд.

Чаро Kubernetes истифода баред

Kubernetes ба стандарти воқеии иҷро кардани замимаҳои муосир дар Linux табдил ёфтааст. Бо истифода аз зангҳои система ба ҷои эмуляцияи сахтафзор ва қобилияти ядро ​​​​ барои идоракунии хотира ва ивазкунии вазифаҳо, вақти боркунӣ ва вақти оғозёбӣ то ҳадди ақал нигоҳ дошта мешавад. Аммо, фоидаи калонтарин метавонад аз API-и стандартие, ки Kubernetes барои танзими инфрасохтори барои ҳама барномаҳо талаб мекунад: нигоҳдорӣ, шабакасозӣ ва мониторинг ба даст ояд. Он моҳи июни соли 2020 6 сола шуд ва шояд дуюмин лоиҳаи калонтарини кушодаасос (пас аз Linux) бошад. Он вақтҳои охир фаъолнокии худро пас аз такрори зуд дар тӯли чанд соли охир ба эътидол меорад, зеро он барои сарбории истеҳсолӣ дар саросари ҷаҳон муҳим мегардад.

Camunda BPM Engine метавонад ба барномаҳои дигаре, ки дар як кластер кор мекунанд, ба осонӣ пайваст шавад ва Kubernetes миқёспазирии аълоро таъмин мекунад ва ба шумо имкон медиҳад, ки хароҷоти инфрасохторро танҳо ҳангоми зарурат зиёд кунед (ва ҳангоми зарурат онҳоро ба осонӣ кам кунед).

Сифати мониторинг инчунин бо асбобҳо ба монанди Prometheus, Grafana, Loki, Fluentd ва Elasticsearch хеле беҳтар карда шудааст, ки ба шумо имкон медиҳад, ки тамоми сарбории корро дар кластер ба таври мутамарказ дидан кунед. Имрӯз мо мебинем, ки чӣ тавр содиркунандаи Prometheus -ро ба Java Virtual Machine (JVM) татбиқ кардан мумкин аст.

Мақсадҳо

Биёед ба чанд соҳае назар андозем, ки дар он мо тасвири Camunda BPM Docker-ро танзим карда метавонем (Гитуб) то ки он бо Кубернетес хуб муошират кунад.

  1. Сабтҳо ва нишондиҳандаҳо;
  2. Пайвастшавӣ ба пойгоҳи додаҳо;
  3. Аутентификатсия;
  4. Идоракунии сессия.

Мо якчанд роҳҳои ноил шудан ба ин ҳадафҳоро дида мебароем ва тамоми равандро равшан нишон медиҳем.

эрод гирифтан: Оё шумо версияи 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 дар Кубернетес, мо kustomize-ро барои идора кардани қабатҳои ямл бидуни шикастани тамоми манифест истифода мебарем ва ба шумо имкон медиҳад, ки истифода баред git pull --rebase барои такмили минбаъда. Ҳоло он дар kubectl аст ва он барои чунин чизҳо хеле хуб кор мекунад.

Мо инчунин envsubst-ро барои пур кардани номи мизбон ва ID лоиҳаи GCP дар файлҳои *.yaml.tmpl истифода мебарем. Шумо метавонед бубинед, ки он чӣ гуна кор мекунад makefile ё танҳо минбаъд идома диҳед.

Шароити зарурӣ

Ҷараёни кор бо истифода аз манифестҳо

Агар шумо нахоҳед kustomize ё skaffold-ро истифода баред, шумо метавонед ба манифестҳои дар generated-manifest.yaml ва онҳоро ба ҷараёни кори интихобкардаатон мутобиқ кунед.

Сабтҳо ва нишондиҳандаҳо

Prometheus ба стандарти ҷамъоварии ченакҳо дар Кубернетес табдил ёфтааст. Он ҳамчун AWS Cloudwatch Metrics, Cloudwatch Alerts, Stackdriver Metrics, StatsD, Datadog, Nagios, vSphere Metrics ва дигарон ҷойгоҳро ишғол мекунад. Он манбаи кушода аст ва забони пурқуввати пурсиш дорад. Мо визуализатсияро ба Grafana месупорем - он бо шумораи зиёди панелҳои аз қуттӣ дастрас мавҷуд аст. Онҳо ба ҳамдигар пайвастанд ва насб кардани онҳо нисбатан осон аст прометей — оператор.

Бо нобаёнӣ, 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 дар Кубернетес ва сипас онро ҳамчун ҳаҷм насб кунед.

Аввалан, мо файли конфигуратсияи содиркунандаро ба феҳристи платформаи худ/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 олиҷанобанд, зеро онҳо маълумоти конфигуратсияро ҳаш мекунанд ва дар сурати тағир ёфтани он подклипро аз нав оғоз кардан маҷбур мекунанд. Онҳо инчунин миқдори конфигуратсияро дар 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, тарҳрезии оператор и ServiceMonitorSpec пеш аз он ки шумо оғоз кунед.

Васеъ кардани ин намуна ба дигар ҳолатҳои истифода

Ҳамаи файлҳое, ки мо ба ConfigMapGenerator илова мекунем, дар феҳристи нав дастрас хоҳанд буд /etc/config. Шумо метавонед ин қолабро барои насб кардани ҳама гуна файлҳои конфигуратсияи ба шумо лозима васеъ кунед. Шумо ҳатто метавонед скрипти нави оғозёбиро насб кунед. Шумо метавонед истифода баред subPath барои васл кардани файлҳои алоҳида. Барои навсозии файлҳои 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 ҳамчун асрор тавассути лӯлаи CD ворид кунед - MozillaSOPS - дар якҷоягӣ бо асрори Kustomize хеле хуб кор хоҳад кард. Воситаҳои дигаре ҳастанд, ба монанди dotGPG, ки вазифаҳои шабеҳро иҷро мекунанд: HashiCorp Vault, Васлкунакҳои арзиши махфиро танзим кунед.

Ingress

Агар шумо истифодаи интиқоли портҳои маҳаллиро интихоб накунед, ба шумо контролери танзимшудаи Ingress лозим мешавад. Агар шумо истифода набаред ingress-nginx (Диаграммаи руль) пас шумо эҳтимолан аллакай медонед, ки шумо бояд эзоҳҳои заруриро дар ingress-patch.yaml.tmpl ё platform/ingress.yaml. Агар шумо ingress-nginx-ро истифода баред ва синфи nginx-ро бинед, ки тавозуни сарборӣ ба он ишора мекунад ва вуруди DNS-и беруна ё аломати ваҳшӣ DNS, шумо хуб меравед. Дар акси ҳол, Controller Ingress ва 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

Якчанд дақиқа интизор шавед, то Томкат комилан омода шавад. Сертификати менеҷер барои тасдиқи номи домен каме вақт мегирад. Пас шумо метавонед гузоришҳоро бо истифода аз абзорҳои мавҷуда, ба монанди асбобе ба монанди 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 ҷойгир кунед. Ларс дорад пости алоҳида дар ин мавзӯъ, аммо чизе монанди:

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 (Редисро дастгирӣ мекунад) барои иҷро кардани он.

Миқёскунӣ

Агар шумо сеансҳоро аллакай фаҳмед, пас аввалин (ва аксаран охирин) маҳдудияти миқёси Camunda BPM метавонад пайвастшавӣ ба пойгоҳи додаҳо бошад. Мутобиқсозии қисман аллакай дастрас аст "аз қуттӣ" Биёед инчунин intialSize-ро дар файли settings.xml ғайрифаъол кунем. Илова Autoscaler Pod Horizontal (HPA) ва шумо метавонед ба осонӣ ба таври худкор миқёси шумораи pods.

Дархостҳо ва маҳдудиятҳо

В platform/deployment.yaml Шумо хоҳед дид, ки мо майдони захираҳоро сахт рамзгузорӣ кардаем. Ин бо HPA хуб кор мекунад, аммо метавонад конфигуратсияи иловагӣ талаб кунад. Ямоқи kustomize барои ин мувофиқ аст. См. ingress-patch.yaml.tmpl и ./kustomization.yaml.tmpl

хулоса

Ҳамин тавр, мо Camunda BPM-ро дар Kubernetes бо метрикаи Prometheus, гузоришҳо, пойгоҳи H2, TLS ва Ingress насб кардем. Мо бо истифода аз ConfigMaps ва Dockerfile файлҳои jar ва файлҳои конфигуратсияро илова кардем. Мо дар бораи мубодилаи маълумот ба ҳаҷм ва мустақиман ба тағирёбандаҳои муҳити зист аз асрор сӯҳбат кардем. Илова бар ин, мо шарҳи танзими 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, тарҷума мақолаҳо Аластер Ферт, Ларс Ланге

Манбаъ: will.com

Илова Эзоҳ