Rhedeg Camunda BPM ar Kubernetes

Rhedeg Camunda BPM ar Kubernetes

Ydych chi'n defnyddio Kubernetes? Yn barod i symud eich achosion Camunda BPM allan o beiriannau rhithwir, neu efallai dim ond ceisio eu rhedeg ar Kubernetes? Gadewch i ni edrych ar rai cyfluniadau cyffredin ac eitemau unigol y gellir eu teilwra i'ch anghenion penodol.

Mae'n cymryd yn ganiataol eich bod wedi defnyddio Kubernetes o'r blaen. Os na, beth am gymryd golwg ar arweinyddiaeth ac nid cychwyn eich clwstwr cyntaf?

Awduron

  • Alastair Firth (Alastair Firth) - Uwch Beiriannydd Dibynadwyedd Safle ar dîm Camunda Cloud;
  • Lars Lange (Lars Lange) - Peiriannydd DevOps yn Camunda.

Yn fyr:

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

Iawn, mae'n debyg nad oedd yn gweithio oherwydd nad oes gennych skaffold a kustomize wedi'u gosod. Wel darllenwch ymlaen!

Beth yw Camunda BPM

Mae Camunda BPM yn blatfform rheoli prosesau busnes ac awtomeiddio penderfyniadau ffynhonnell agored sy'n cysylltu defnyddwyr busnes a datblygwyr meddalwedd. Mae'n ddelfrydol ar gyfer cydlynu a chysylltu pobl, gwasanaethau (micro) neu hyd yn oed bots! Gallwch ddarllen mwy am y gwahanol achosion defnydd yn cyswllt.

Pam defnyddio Kubernetes

Mae Kubernetes wedi dod yn safon de facto ar gyfer rhedeg cymwysiadau modern ar Linux. Trwy ddefnyddio galwadau system yn lle efelychu caledwedd a gallu'r cnewyllyn i reoli cof a newid tasgau, cedwir amser cychwyn ac amser cychwyn mor isel â phosibl. Fodd bynnag, efallai y daw'r budd mwyaf o'r API safonol y mae Kubernetes yn ei ddarparu i ffurfweddu'r seilwaith sy'n ofynnol gan bob cais: storio, rhwydweithio a monitro. Trodd yn 2020 oed ym mis Mehefin 6 ac efallai mai dyma'r ail brosiect ffynhonnell agored mwyaf (ar ôl Linux). Yn ddiweddar mae wedi bod yn sefydlogi ei ymarferoldeb ar ôl ailadrodd cyflym dros yr ychydig flynyddoedd diwethaf wrth iddo ddod yn hanfodol i lwythi gwaith cynhyrchu ledled y byd.

Gall Camunda BPM Engine gysylltu'n hawdd â chymwysiadau eraill sy'n rhedeg ar yr un clwstwr, ac mae Kubernetes yn darparu graddadwyedd rhagorol, sy'n eich galluogi i gynyddu costau seilwaith dim ond pan fo gwir angen (a'u lleihau'n hawdd yn ôl yr angen).

Mae ansawdd y monitro hefyd wedi gwella'n fawr gydag offer fel Prometheus, Grafana, Loki, Fluentd ac Elasticsearch, sy'n eich galluogi i weld yr holl lwythi gwaith mewn clwstwr yn ganolog. Heddiw, byddwn yn edrych ar sut i roi'r allforiwr Prometheus ar waith yn y Peiriant Rhithwir Java (JVM).

Amcanion

Edrychwn ar ychydig o feysydd lle gallwn addasu delwedd Camunda BPM Docker (GitHub) fel ei fod yn rhyngweithio'n dda â Kubernetes.

  1. Logiau a metrigau;
  2. Cysylltiadau cronfa ddata;
  3. Dilysu;
  4. Rheoli sesiwn.

Byddwn yn edrych ar sawl ffordd o gyflawni'r nodau hyn ac yn dangos y broses gyfan yn glir.

Nodyn: Ydych chi'n defnyddio'r fersiwn Menter? Edrych yma a diweddaru dolenni delwedd yn ôl yr angen.

Datblygu llif gwaith

Yn y demo hwn, byddwn yn defnyddio Skaffold i adeiladu delweddau Docker gan ddefnyddio Google Cloud Build. Mae ganddo gefnogaeth dda ar gyfer offer amrywiol (fel Kustomize a Helm), offer CI ac adeiladu, a darparwyr seilwaith. Ffeil skaffold.yaml.tmpl yn cynnwys gosodiadau ar gyfer Google Cloud Build a GKE, gan ddarparu ffordd syml iawn o redeg seilwaith gradd cynhyrchu.

make skaffold yn llwytho cyd-destun Dockerfile i Cloud Build, yn adeiladu'r ddelwedd ac yn ei storio yn GCR, ac yna'n cymhwyso'r maniffestau i'ch clwstwr. Dyma beth mae'n ei wneud make skaffold, ond mae gan Skaffold lawer o nodweddion eraill.

Ar gyfer templedi yaml yn Kubernetes, rydym yn defnyddio kustomize i reoli troshaenau yaml heb fforchio'r maniffest cyfan, sy'n eich galluogi i ddefnyddio git pull --rebase am welliannau pellach. Nawr mae mewn kubectl ac mae'n gweithio'n eithaf da ar gyfer pethau o'r fath.

Rydym hefyd yn defnyddio envsubst i lenwi'r enw gwesteiwr ac ID prosiect GCP yn y ffeiliau *.yaml.tmpl. Gallwch weld sut mae'n gweithio yn makefile neu dim ond parhau ymhellach.

Yr amodau angenrheidiol

  • Clwstwr gwaith Kubernetes
  • Addasu
  • Sgaffald - ar gyfer creu eich delweddau dociwr eich hun a'u defnyddio'n hawdd i GKE
  • Copi o'r cod hwn
  • Envsubst

Llif gwaith gan ddefnyddio maniffestau

Os nad ydych am ddefnyddio kustomize neu skaffold, gallwch gyfeirio at y maniffestau yn generated-manifest.yaml a'u haddasu i'r llif gwaith o'ch dewis.

Logiau a metrigau

Mae Prometheus wedi dod yn safon ar gyfer casglu metrigau yn Kubernetes. Mae'n meddiannu'r un niche ag AWS Cloudwatch Metrics, Cloudwatch Alerts, Stackdriver Metrics, StatsD, Datadog, Nagios, vSphere Metrics ac eraill. Mae'n ffynhonnell agored ac mae ganddo iaith ymholiad bwerus. Byddwn yn ymddiried y delweddu i Grafana - mae'n dod gyda nifer fawr o ddangosfyrddau ar gael allan o'r bocs. Maent yn gysylltiedig â'i gilydd ac yn gymharol hawdd i'w gosod prometheus-weithredwr.

Yn ddiofyn, mae Prometheus yn defnyddio'r model echdynnu <service>/metrics, ac mae ychwanegu cynwysyddion car ochr ar gyfer hyn yn gyffredin. Yn anffodus, mae'n well mewngofnodi metrigau JMX o fewn y JVM, felly nid yw cynwysyddion ceir ochr mor effeithlon. Gadewch i ni gysylltu jmx_allforiwr ffynhonnell agored o Prometheus i'r JVM trwy ei ychwanegu at ddelwedd y cynhwysydd a fydd yn darparu'r llwybr /metrics ar borthladd gwahanol.

Ychwanegu Prometheus jmx_exporter i'r cynhwysydd

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

Wel, roedd hynny'n hawdd. Bydd yr allforiwr yn monitro tomcat ac yn arddangos ei fetrigau ar ffurf Prometheus yn <svc>:9404/metrics

Gosodiad Allforiwr

Efallai y bydd y darllenydd astud yn meddwl tybed o ble y daeth prometheus-jmx.yaml? Mae yna lawer o wahanol bethau a all redeg yn y JVM, a dim ond un ohonyn nhw yw tomcat, felly mae angen rhywfaint o gyfluniad ychwanegol ar yr allforiwr. Mae cyfluniadau safonol ar gyfer tomcat, pryfed gwyllt, kafka ac ati ar gael yma. Byddwn yn ychwanegu tomcat fel configMap yn Kubernetes ac yna ei osod fel cyfrol.

Yn gyntaf, rydym yn ychwanegu ffeil ffurfweddu'r allforiwr i'n platfform / config / cyfeiriadur

platform/config
└── prometheus-jmx.yaml

Yna rydym yn ychwanegu ConfigMapGenerator в kustomization.yaml.tmpl:

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

Bydd hyn yn ychwanegu pob elfen files[] fel elfen ffurfweddu ConfigMap. Mae ConfigMapGenerators yn wych oherwydd eu bod yn hash y data ffurfweddu ac yn gorfodi ailgychwyn pod os bydd yn newid. Maent hefyd yn lleihau faint o ffurfweddiad yn Deployment oherwydd gallwch osod "ffolder" cyfan o ffeiliau ffurfweddu mewn un VolumeMount.

Yn olaf, mae angen i ni osod y ConfigMap fel cyfaint i'r 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
[...]

Gwych. Os nad yw Prometheus wedi'i ffurfweddu i wneud glanhau llawn, efallai y bydd yn rhaid i chi ddweud wrtho am lanhau'r codennau. Gall defnyddwyr Prometheus Operator ddefnyddio service-monitor.yaml i ddechrau. Archwiliwch Service-monitor.yaml, dylunio gweithredwr и GwasanaethMonitorSpec cyn i chi ddechrau.

Ymestyn y patrwm hwn i achosion defnydd eraill

Bydd yr holl ffeiliau y byddwn yn eu hychwanegu at ConfigMapGenerator ar gael yn y cyfeiriadur newydd /etc/config. Gallwch ymestyn y templed hwn i osod unrhyw ffeiliau ffurfweddu eraill sydd eu hangen arnoch. Gallwch hyd yn oed osod sgript cychwyn newydd. Gallwch ddefnyddio islwybr i osod ffeiliau unigol. I ddiweddaru ffeiliau xml, ystyriwch ddefnyddio xmlstarlet yn lle sed. Mae eisoes wedi'i gynnwys yn y ddelwedd.

Cylchgronau

Newyddion gwych! Mae logiau cais eisoes ar gael ar stdout, er enghraifft gyda kubectl logs. Bydd Fluentd (wedi'i osod yn ddiofyn yn GKE) yn anfon eich logiau ymlaen at Elasticsearch, Loki, neu'ch platfform logio menter. Os ydych chi am ddefnyddio jsonify ar gyfer logiau yna gallwch chi ddilyn y templed uchod i'w osod mewngofnodi.

Cronfa Ddata

Yn ddiofyn, bydd gan y ddelwedd gronfa ddata H2. Nid yw hyn yn addas i ni, a byddwn yn defnyddio Google Cloud SQL gyda Cloud SQL Proxy - bydd angen hyn yn ddiweddarach i ddatrys problemau mewnol. Mae hwn yn opsiwn syml a dibynadwy os nad oes gennych chi'ch dewisiadau eich hun wrth sefydlu'r gronfa ddata. Mae AWS RDS yn darparu gwasanaeth tebyg.

Waeth pa gronfa ddata a ddewiswch, oni bai ei bod yn H2, bydd angen i chi osod y newidynnau amgylchedd priodol yn platform/deploy.yaml. Mae'n edrych rhywbeth fel hyn:

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

Nodyn: Gallwch ddefnyddio Kustomize i'w ddefnyddio i wahanol amgylcheddau gan ddefnyddio troshaen: enghraifft.

Nodyn: defnydd valueFrom: secretKeyRef. Os gwelwch yn dda, defnyddiwch y nodwedd Kubernetes hon hyd yn oed yn ystod datblygiad i gadw'ch cyfrinachau'n ddiogel.

Mae'n debygol bod gennych chi eisoes system ddewisol ar gyfer rheoli cyfrinachau Kubernetes. Os na, dyma rai opsiynau: Eu hamgryptio gyda KMS eich darparwr cwmwl ac yna eu chwistrellu i K8S fel cyfrinachau trwy'r biblinell CD - Mozilla SOPS - yn gweithio'n dda iawn mewn cyfuniad â chyfrinachau Kustomize. Mae yna offer eraill, fel dotGPG, sy'n cyflawni swyddogaethau tebyg: Lladdgell HashiCorp, Addasu Ategion Gwerth Cyfrinachol.

Mynd i mewn

Oni bai eich bod yn dewis defnyddio anfon porthladd lleol ymlaen, bydd angen Rheolydd Ingress wedi'i ffurfweddu arnoch. Os nad ydych yn defnyddio ingress-nginx (Siart llyw) yna mae'n debyg eich bod eisoes yn gwybod bod angen i chi osod yr anodiadau angenrheidiol i mewn ingress-patch.yaml.tmpl neu platform/ingress.yaml. Os ydych chi'n defnyddio ingress-nginx ac yn gweld dosbarth mewnosod nginx gyda chydbwysedd llwyth yn pwyntio ato a chofnod DNS allanol neu gerdyn gwyllt DNS, mae'n dda ichi fynd. Fel arall, ffurfweddwch y Rheolwr Ingress a DNS, neu sgipiwch y camau hyn a chadwch y cysylltiad uniongyrchol â'r pod.

TLS

Os ydych chi'n defnyddio rheolwr tystysgrif neu kube-lego a letsencrypt - bydd tystysgrifau ar gyfer y mewngofnodi newydd yn cael eu cael yn awtomatig. Fel arall, agorwch ingress-patch.yaml.tmpl a'i addasu i weddu i'ch anghenion.

Lansio!

Os gwnaethoch ddilyn popeth a ysgrifennwyd uchod, yna'r gorchymyn make skaffold HOSTNAME=<you.example.com> Dylai lansio enghraifft sydd ar gael yn <hostname>/camunda

Os nad ydych wedi gosod eich mewngofnodi i URL cyhoeddus, gallwch ei ailgyfeirio ag ef localhost: kubectl port-forward -n camunda-bpm-demo svc/camunda-bpm 8080:8080 ar localhost:8080/camunda

Arhoswch ychydig funudau nes bod Tomcat yn hollol barod. Bydd rheolwr tystysgrif yn cymryd peth amser i ddilysu'r enw parth. Yna gallwch chi fonitro'r logiau gan ddefnyddio'r offer sydd ar gael fel teclyn fel kubetail, neu'n syml gan ddefnyddio kubectl:

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

Camau nesaf

Awdurdodi

Mae hyn yn fwy perthnasol i ffurfweddu Camunda BPM na Kubernetes, ond mae'n bwysig nodi bod dilysu wedi'i analluogi yn yr API REST yn ddiofyn. Gallwch chi galluogi dilysu sylfaenol neu ddefnyddio dull arall fel Mae J.W.T.. Gallwch ddefnyddio configmaps a chyfeintiau i lwytho xml, neu xmlstarlet (gweler uchod) i olygu'r ffeiliau presennol yn y ddelwedd, a naill ai defnyddio wget neu eu llwytho gan ddefnyddio cynhwysydd init a chyfaint a rennir.

Rheoli sesiwn

Fel llawer o gymwysiadau eraill, mae Camunda BPM yn ymdrin â sesiynau yn y JVM, felly os ydych chi am redeg atgynyrchiadau lluosog, gallwch chi alluogi sesiynau gludiog (er enghraifft ar gyfer ingress-nginx), a fydd yn bodoli nes i'r replica ddiflannu, neu osod y priodoledd Max-Age ar gyfer cwcis. I gael datrysiad mwy cadarn, gallwch chi ddefnyddio Sesiwn Manager yn Tomcat. Mae gan Lars post ar wahân ar y pwnc hwn, ond rhywbeth fel:

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

Nodyn: gallwch ddefnyddio xmlstarlet yn lle sed

Defnyddiasom twemproxy o flaen Google Cloud Memorystore, gyda memcached-sesiwn-rheolwr (yn cefnogi Redis) i'w redeg.

Graddio

Os ydych chi eisoes yn deall sesiynau, yna efallai mai'r cyfyngiad cyntaf (ac yn aml yr olaf) i raddio Camunda BPM yw'r cysylltiad â'r gronfa ddata. Mae addasu rhannol eisoes ar gael "o'r blwch" Gadewch i ni hefyd analluogi intialSize yn y ffeil settings.xml. Ychwanegu Graddiwr awto-goden llorweddol (HPA) a gallwch chi raddio nifer y codennau yn awtomatig yn hawdd.

Ceisiadau a chyfyngiadau

В platform/deployment.yaml Fe welwch ein bod wedi codio'n galed ar y maes adnoddau. Mae hyn yn gweithio'n dda gyda HPA, ond efallai y bydd angen cyfluniad ychwanegol. Mae'r clwt kustomize yn addas ar gyfer hyn. Cm. ingress-patch.yaml.tmpl и ./kustomization.yaml.tmpl

Allbwn

Felly fe wnaethom osod Camunda BPM ar Kubernetes gyda metrigau Prometheus, logiau, cronfa ddata H2, TLS ac Ingress. Fe wnaethom ychwanegu ffeiliau jar a ffeiliau ffurfweddu gan ddefnyddio ConfigMaps a Dockerfile. Buom yn siarad am gyfnewid data i gyfeintiau ac yn uniongyrchol i newidynnau amgylchedd o gyfrinachau. Yn ogystal, rydym wedi darparu trosolwg o sefydlu Camunda ar gyfer atgynyrchiadau lluosog ac API dilys.

cyfeiriadau

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, cyfieithiad erthyglau Alastair Firth, Lars Lange

Ffynhonnell: hab.com

Ychwanegu sylw