Camunda BPM li ser Kubernetes dimeşîne

Camunda BPM li ser Kubernetes dimeşîne

Ma hûn Kubernetes bikar tînin? Hûn amade ne ku mînakên xwe yên Camunda BPM ji makîneyên virtual derxînin, an jî dibe ku tenê wan biceribînin Kubernetes bimeşînin? Ka em li hin veavakirinên hevpar û hêmanên kesane yên ku dikarin li gorî hewcedariyên weyên taybetî werin sêwirandin binêrin.

Ew texmîn dike ku we berê Kubernetes bikar aniye. Ger na, çima li ber çavan nagirin birêvebirî û koma xweya yekem dest pê neke?

Nivîskar

  • Alastair Firth (Alastair Firth) - Endezyarê Pêbaweriya Malpera Bilind li ser tîmê Camunda Cloud;
  • Lars Lange (Lars Lange) - Endezyarê DevOps li Camunda.

Bi kurtî:

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

Baş e, dibe ku ew nexebite ji ber ku we skaffold û kustomize sazkirî nekiriye. Wê hingê bixwînin!

Camunda BPM çi ye

Camunda BPM platformek rêveberiya pêvajoya karsaziyê û xweseriya biryarê ya çavkaniya vekirî ye ku bikarhênerên karsaziyê û pêşdebirên nermalavê girêdide. Ew ji bo koordînasyon û girêdana mirovan, karûbarên (mîkro) an jî botan îdeal e! Hûn dikarin li ser dozên karanîna cûda bêtir bixwînin link.

Çima Kubernetes bikar bînin

Kubernetes ji bo xebitandina serîlêdanên nûjen ên li Linux-ê bûye standardek de facto. Bi karanîna bangên pergalê li şûna emûlasyona hardware û şiyana kernelê ya birêvebirina bîranîn û veguheztina peywirê, dema boot û dema destpêkirinê herî kêm têne girtin. Lêbelê, feydeya herî mezin dibe ku ji API-ya standard a ku Kubernetes peyda dike ji bo mîhengkirina binesaziya ku ji hêla hemî serlêdanan ve tê xwestin were: hilanîn, torê, û çavdêrîkirin. Ew di Hezîrana 2020-an de 6 salî bû û dibe ku duyemîn projeya çavkaniya vekirî ya herî mezin e (piştî Linux). Ew di van demên dawî de piştî dubarekirina bilez di van çend salên borî de fonksiyona xwe bi awayekî aktîf stabîl dike ji ber ku ew ji bo barkêşên hilberînê li çaraliyê cîhanê krîtîk dibe.

Camunda BPM Engine dikare bi hêsanî bi serîlêdanên din ên ku li ser heman komê dixebitin ve girêbide, û Kubernetes pîvanek hêja peyda dike, ku dihêle hûn lêçûnên binesaziyê tenê gava ku bi rastî hewce ne zêde bikin (û bi hêsanî wan li gorî hewcedariyê kêm bikin).

Qalîteya çavdêriyê jî bi amûrên wekî Prometheus, Grafana, Loki, Fluentd û Elasticsearch re pir çêtir dibe, ku dihêle hûn bi navendî hemî barkêşên xebatê di komekê de bibînin. Îro em ê binihêrin ka meriv çawa hinardekarê Prometheus di Java Virtual Machine (JVM) de bicîh dike.

Armancên

Ka em li çend deveran binêrin ku em dikarin wêneya Camunda BPM Docker xweş bikin (github) da ku ew bi Kubernetes re baş têkilî daynin.

  1. Têketin û metrics;
  2. Girêdanên Database;
  3. Authentication;
  4. Rêveberiya rûniştinê.

Em ê li çend awayên gihîştina van armancan binêrin û bi zelalî tevahiya pêvajoyê nîşan bidin.

bingotin: Ma hûn guhertoya Enterprise bikar tînin? Dîtinî vir û li gorî hewcedariyê girêdanên wêneyê nûve bikin.

Pêşveçûna xebatê

Di vê demo de, em ê Skaffold bikar bînin da ku wêneyên Docker bi karanîna Google Cloud Build ava bikin. Ji bo amûrên cihêreng (wekî Kustomize û Helm), CI û amûrên çêkirinê, û pêşkêşkerên binesaziyê piştgirîyek baş heye. Dosî skaffold.yaml.tmpl mîhengên ji bo Google Cloud Build û GKE vedihewîne, ji bo meşandina binesaziya pola hilberînê rêyek pir hêsan peyda dike.

make skaffold dê çarçoweya Dockerfile li Cloud Build bar bike, wêneyê ava bike û wê di GCR de hilîne, û dûv re manîfestoyan li koma xwe bicîh bike. Ya ku dike ev e make skaffold, lê Skaffold gelek taybetmendiyên din hene.

Ji bo şablonên yaml ên li Kubernetes, em kustomize bikar tînin da ku serpêhatiyên yaml birêve bibin bêyî ku tevahiya manîfestoyê bişkînin, bihêle hûn bikar bînin. git pull --rebase ji bo pêşveçûnên bêtir. Niha ew di kubectl de ye û ji bo tiştên weha pir baş dixebite.

Her weha em envsubst bikar tînin da ku navê mêvandar û ID-ya projeya GCP-ê di pelên *.yaml.tmpl de bicîh bikin. Hûn dikarin bibînin ka ew di hundurê de çawa dixebite makefile an jî tenê bêtir berdewam bikin.

Conditionsertên pêwîst

  • Koma xebatê Kubernetes
  • Customize
  • Skaffold - ji bo afirandina wêneyên dokera xwe û bicîhkirina hêsan a GKE
  • Kopiya vê kodê
  • Envsubst

Karûbar bi karanîna manîfestoyan

Heke hûn nexwazin kustomize an skaffold bikar bînin, hûn dikarin li manîfestoyan binihêrin generated-manifest.yaml û wan li gorî xebata bijartina we biguncînin.

Têketin û metrics

Prometheus ji bo berhevkirina metrîkan li Kubernetes bûye standard. Ew heman cîhê wekî AWS Cloudwatch Metrics, Cloudwatch Alerts, Stackdriver Metrics, StatsD, Datadog, Nagios, vSphere Metrics û yên din digire. Ew çavkaniyek vekirî ye û zimanek pirsê ya hêzdar heye. Em ê vîzyonê spartin Grafana - ew bi hejmareke mezin a tabloyên ku ji qutiyê ve têne peyda kirin tê. Ew bi hevûdu ve girêdayî ne û sazkirina bi nisbî hêsan e prometheus-operator.

Bi xwerû, Prometheus modela derxistinê bikar tîne <service>/metrics, û lê zêdekirina konteynerên kêlekê ji bo vê gelemperî ye. Mixabin, metrîkên JMX çêtirîn di nav JVM-ê de têne tomar kirin, ji ber vê yekê konteynerên kêlekê ne ew qas bikêr in. Werin em girêdan jmx_exporter çavkaniya vekirî ji Prometheus heya JVM-ê bi lê zêdekirina wê li wêneya konteynerê ya ku dê rê peyda bike /metrics li ser bendereke cuda.

Prometheus jmx_exporter li konteynerê zêde bikin

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

Belê, ew hêsan bû. Hinardekar dê tomcat bişopîne û metrîkên wê di forma Prometheus de nîşan bide <svc>:9404/metrics

Sazkirina Exporter

Dibe ku xwendevanê baldar meraq bike ku ew ji ku hatî prometheus-jmx.yaml? Gelek tiştên cihêreng hene ku dikarin di JVM-ê de bimeşînin, û tomcat tenê yek ji wan e, ji ber vê yekê hinardekar pêdivî bi veavakirina zêde heye. Mîhengên standard ên ji bo tomcat, wildfly, kafka û hwd hene vir. Em ê wek tomcat zêde bikin ConfigMap di Kubernetes de û paşê wê wekî cildekê siwar bikin.

Pêşîn, em pelê veavakirina hinardekar li pelrêça platforma/config/ xwe zêde dikin

platform/config
└── prometheus-jmx.yaml

Paşê em lê zêde dikin ConfigMapGenerator в kustomization.yaml.tmpl:

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

Ev ê her elementek zêde bike files[] wekî hêmanek veavakirina ConfigMap. ConfigMapGenerators pir mezin in ji ber ku ew daneyên vesazkirinê dişewitînin û heke ew biguhezîne bi zorê ji nû ve dest pê dike. Ew her weha mîqdara veavakirinê di Deployment de kêm dikin ji ber ku hûn dikarin tevahî "peldankek" pelên vesazkirinê di yek VolumeMount de siwar bikin.

Di dawiyê de, pêdivî ye ku em ConfigMap-ê wekî cildek li ser podê siwar bikin:

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

Pirxweş. Ger Prometheus ji bo paqijkirina tam nehatibe mîheng kirin, dibe ku hûn jê re bibêjin ku potan paqij bike. Bikarhênerên Prometheus Operator dikarin bikar bînin service-monitor.yaml dest pê bikin. Lêkolîn Service-monitor.yaml, design operator и ServiceMonitorSpec berî ku hûn dest pê bikin.

Berfirehkirina vê nimûneyê ji bo rewşên karanîna din

Hemî pelên ku em li ConfigMapGenerator zêde dikin dê di pelrêça nû de peyda bibin /etc/config. Hûn dikarin vê şablonê dirêj bikin da ku hûn pelên mîhengê yên din ên ku hûn hewce ne siwar bikin. Tewra hûn dikarin skrîptek destpêkek nû saz bikin. Hûn dikarin bikar bînin subPath ji bo ku pelên kesane vekin. Ji bo nûvekirina pelên xml, bikar bînin bifikirin xmlstarlet li şûna sed. Ew jixwe di wêneyê de heye.

Kovar

Nûçeyên mezin! Têketinên serîlêdanê jixwe li stdout hene, mînakî bi kubectl logs. Fluentd (ji hêla xwerû ve li GKE hatî saz kirin) dê têketinên we bişîne Elasticsearch, Loki, an platforma têketina pargîdaniya we. Ger hûn dixwazin jsonify ji bo têketinan bikar bînin wê hingê hûn dikarin şablona jorîn bişopînin da ku saz bikin logback.

Database

Bi xwerû, wêne dê databasek H2 hebe. Ev ji bo me ne guncan e, û em ê Google Cloud SQL bi Cloud SQL Proxy bikar bînin - ev ê paşê hewce bike ku pirsgirêkên navxweyî çareser bike. Ev vebijarkek hêsan û pêbawer e heke hûn di sazkirina databasê de tercîhên xwe nebin. AWS RDS karûbarek wekhev peyda dike.

Tevî databasa ku hûn hildibijêrin, heya ku ew H2 nebe, hûn ê hewce bikin ku guhêrbarên hawîrdorê yên guncaw di nav de bicîh bikin. platform/deploy.yaml. Ew tiştek mîna vê xuya dike:

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

bingotin: Hûn dikarin Kustomize bikar bînin da ku li hawîrdorên cihêreng bi karanîna pêvekek bicîh bikin: nimûne.

bingotin: bikaranîn valueFrom: secretKeyRef. Ji kerema xwe, bikar bînin ev taybetmendiya Kubernetes tewra di dema pêşkeftinê de jî da ku sirên xwe ewle bihêlin.

Ihtimal heye ku we jixwe ji bo birêvebirina razên Kubernetes pergalek bijartî heye. Ger na, li vir çend vebijark hene: Bi KMS-ya pêşkêşkarê cloudê xwe re şîfre bikin û dûv re bi navgîniya lûleya CD-yê ve wan wekî nehênî li K8S-ê derxînin - Mozilla SOPS - dê bi hev re bi razên Kustomize re pir baş bixebite. Amûrên din jî hene, wek dotGPG, ku fonksiyonên wekhev pêk tînin: HashiCorp Vault, Pêvekên Nirxa Veşartî xweş bikin.

Ingress

Heya ku hûn nebijartin ku hûn şandina porta herêmî bikar bînin, hûn ê hewceyê Kontrolkerek Ingressê ya mîhengkirî bin. Heke hûn bikar neynin ingress-nginx (Helm chart) wê hingê hûn bi îhtîmalek mezin jixwe dizanin ku hûn hewce ne ku şîroveyên pêwîst tê de saz bikin ingress-patch.yaml.tmpl an platform/ingress.yaml. Ger hûn ingress-nginx bikar tînin û çînek têketina nginx-ê ku balansek barkirinê nîşanî wê ye û DNS-ya derveyî an têketina DNS-ê ya hovane dibîne, hûn baş in ku biçin. Wekî din, Kontrolkera Ingress û DNS-ê mîheng bikin, an van gavan biavêjin û pêwendiya rasterast bi podê re biparêzin.

TLS

Heke hûn bikar bînin rêvebirê cert an kube-lego û letsencrypt - sertîfîkayên ji bo têketina nû dê bixweber werin wergirtin. Wekî din, vekin ingress-patch.yaml.tmpl û wê li gorî hewcedariyên we xweş bikin.

Destpêkirin!

Ger we her tiştê ku li jor hatî nivîsandin şopand, wê hingê ferman make skaffold HOSTNAME=<you.example.com> divê di nav de mînakek berdest dest pê bike <hostname>/camunda

Ger we têketina xwe li ser URLek gelemperî saz nekiriye, hûn dikarin wê beralî bikin localhost: kubectl port-forward -n camunda-bpm-demo svc/camunda-bpm 8080:8080 li ser localhost:8080/camunda

Çend hûrdeman bisekinin heta ku tomcat bi tevahî amade ye. Rêvebirê Cert dê çend dem bigire ku navê domainê rast bike. Dûv re hûn dikarin têketinan bi karanîna amûrên berdest ên wekî amûrek mîna kubetail, an bi tenê kubectl bikar bînin çavdêrî bikin:

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

Gavên din

Destûrkirin

Ev ji Kubernetes-ê bi mîhengkirina Camunda BPM-ê re têkildartir e, lê girîng e ku meriv bala xwe bide ku ji hêla xwerû, verastkirin di REST API-yê de neçalak e. Hûn dikarin erêkirina bingehîn çalak bike an jî rêbazek din bikar bînin J.W.T.. Ji bo barkirina xml, an xmlstarlet (li jor binêre) ji bo guherandina pelên heyî yên di wêneyê de, hûn dikarin konfigurasyon û cildan bikar bînin, an jî wget bikar bînin an jî wan bi karanîna konteynirek destpêkê û cildek hevpar bar bikin.

Rêveberiya rûniştinê

Mîna gelek serîlêdanên din, Camunda BPM danişînan di JVM-ê de birêve dibe, ji ber vê yekê heke hûn dixwazin gelek kopiyan bimeşînin, hûn dikarin danişînên zeliqandî çalak bikin (wek nimûne ji bo ingress-nginx), ya ku dê hebe heya ku kopiyek winda bibe, an jî taybetmendiya Max-Age ji bo cookies destnîşan bike. Ji bo çareseriyek bihêztir, hûn dikarin Rêvebirê Rûniştinê li Tomcat bicîh bikin. Lars heye post cuda li ser vê mijarê, lê tiştek mîna:

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

bingotin: hûn dikarin li şûna sed xmlstarlet bikar bînin

Me bi kar anî twemproxy li ber Google Cloud Memorystore, bi memcached-session-manager (Piştgiriya Redis) dike ku wê bimeşîne.

Scaling

Ger hûn berê danişînan fêm bikin, wê hingê yekem (û pir caran ya paşîn) sînorkirina pîvandina Camunda BPM dibe ku girêdana bi databasê re be. Xweseriya qismî jixwe heye"ji sindoqê" Werin em di pelê settings.xml de jî intialSize neçalak bikin. Lêzêdekirin Horizontal Pod Autoscaler (HPA) û hûn dikarin bi hêsanî bixweber hejmara potan bipîvin.

Daxwaz û sînorkirin

В platform/deployment.yaml Hûn ê bibînin ku me qada çavkaniyan bi hişk kod kiriye. Ev bi HPA re baş dixebite, lê dibe ku veavakirina zêde hewce bike. Patch kustomize ji bo vê yekê guncan e. Cm. ingress-patch.yaml.tmpl и ./kustomization.yaml.tmpl

encamê

Ji ber vê yekê me Camunda BPM li Kubernetes bi metrîkên Prometheus, têketin, databasa H2, TLS û Ingress saz kir. Me pelên jar û pelên vesazkirinê bi karanîna ConfigMaps û Dockerfile zêde kir. Me li ser danûstendina daneyan bi cildan û rasterast bi guhêrbarên hawîrdorê yên ji razan re peyivî. Digel vê yekê, me nêrînek li ser sazkirina Camunda ji bo gelek kopiyan û API-ya pejirandî peyda kir.

references

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/XNUMX/XNUMX, werger gotar Alastair Firth, Lars Lange

Source: www.habr.com

Add a comment