Оё шумо 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-ро танзим карда метавонем (
- Сабтҳо ва нишондиҳандаҳо;
- Пайвастшавӣ ба пойгоҳи додаҳо;
- Аутентификатсия;
- Идоракунии сессия.
Мо якчанд роҳҳои ноил шудан ба ин ҳадафҳоро дида мебароем ва тамоми равандро равшан нишон медиҳем.
эрод гирифтан: Оё шумо версияи 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
ё танҳо минбаъд идома диҳед.
Шароити зарурӣ
- Кластери корӣ
Кубернитель Мутобиқсозӣ Скаффолд - барои эҷоди тасвирҳои докери шахсии худ ва ҷойгиркунии осон дар GKE- Нусхаи ин код
- Envsubst
Ҷараёни кор бо истифода аз манифестҳо
Агар шумо нахоҳед kustomize ё skaffold-ро истифода баред, шумо метавонед ба манифестҳои дар generated-manifest.yaml
ва онҳоро ба ҷараёни кори интихобкардаатон мутобиқ кунед.
Сабтҳо ва нишондиҳандаҳо
Prometheus ба стандарти ҷамъоварии ченакҳо дар Кубернетес табдил ёфтааст. Он ҳамчун 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
Агар шумо истифодаи интиқоли портҳои маҳаллиро интихоб накунед, ба шумо контролери танзимшудаи Ingress лозим мешавад. Агар шумо истифода набаред ingress-patch.yaml.tmpl
ё platform/ingress.yaml
. Агар шумо ingress-nginx-ро истифода баред ва синфи nginx-ро бинед, ки тавозуни сарборӣ ба он ишора мекунад ва вуруди DNS-и беруна ё аломати ваҳшӣ DNS, шумо хуб меравед. Дар акси ҳол, Controller Ingress ва 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
Якчанд дақиқа интизор шавед, то Томкат комилан омода шавад. Сертификати менеҷер барои тасдиқи номи домен каме вақт мегирад. Пас шумо метавонед гузоришҳоро бо истифода аз абзорҳои мавҷуда, ба монанди асбобе ба монанди 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
хулоса
Ҳамин тавр, мо 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