Tmexxi Camunda BPM fuq Kubernetes

Tmexxi Camunda BPM fuq Kubernetes

Qed tuża Kubernetes? Lest biex iċċaqlaq l-istanzi tiegħek ta' Camunda BPM minn magni virtwali, jew forsi sempliċement ipprova tħaddemhom fuq Kubernetes? Ejja nħarsu lejn xi konfigurazzjonijiet komuni u oġġetti individwali li jistgħu jiġu mfassla apposta għall-bżonnijiet speċifiċi tiegħek.

Jassumi li użajt Kubernetes qabel. Jekk le, għaliex ma tagħtix ħarsa lejn gwida u ma tibda l-ewwel cluster tiegħek?

Awturi

  • Alastair Firth (Alastair Firth) - Senior Site Reliability Engineer fit-tim ta' Camunda Cloud;
  • Lars Lange (Lars Lange) - Inġinier DevOps f'Camunda.

Fil-qosor:

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

Okay, probabbilment ma ħadimx għax m'għandekx skaffold u kustomize installati. Tajjeb allura aqra!

X'inhu Camunda BPM

Camunda BPM hija pjattaforma ta 'ġestjoni tal-proċess tan-negozju u awtomazzjoni tad-deċiżjonijiet ta' sors miftuħ li tgħaqqad l-utenti tan-negozju u l-iżviluppaturi tas-softwer. Huwa ideali għall-koordinazzjoni u l-konnessjoni ta 'nies, (mikro) servizzi jew saħansitra bots! Tista' taqra aktar dwar il-każijiet ta' użu differenti fuq rabta.

Għaliex tuża Kubernetes

Kubernetes sar l-istandard de facto għat-tħaddim ta 'applikazzjonijiet moderni fuq Linux. Bl-użu tas-sejħiet tas-sistema minflok l-emulazzjoni tal-ħardwer u l-abbiltà tal-kernel li jimmaniġġja l-memorja u l-bidla tal-kompitu, il-ħin tal-ibbutjar u l-ħin tal-istartjar jinżammu għall-minimu. Madankollu, l-akbar benefiċċju jista 'jiġi mill-API standard li Kubernetes jipprovdi biex jiġi kkonfigurat l-infrastruttura meħtieġa mill-applikazzjonijiet kollha: ħażna, netwerking u monitoraġġ. Għalaq 2020 snin f'Ġunju 6 u huwa forsi t-tieni l-akbar proġett ta' sors miftuħ (wara Linux). Dan l-aħħar ilu jistabbilizza b'mod attiv il-funzjonalità tiegħu wara iterazzjoni mgħaġġla matul l-aħħar ftit snin hekk kif din issir kritika għall-piżijiet tax-xogħol tal-produzzjoni madwar id-dinja.

Camunda BPM Engine jista 'faċilment jgħaqqad ma' applikazzjonijiet oħra li jaħdmu fuq l-istess cluster, u Kubernetes jipprovdi skalabbiltà eċċellenti, li tippermettilek iżżid l-ispejjeż tal-infrastruttura biss meta tkun verament meħtieġa (u tnaqqashom faċilment kif meħtieġ).

Il-kwalità tal-monitoraġġ hija wkoll imtejba ħafna b'għodod bħal Prometheus, Grafana, Loki, Fluentd u Elasticsearch, li jippermettulek tara ċentralment il-piżijiet tax-xogħol kollha fi cluster. Illum se nħarsu lejn kif nimplimentaw l-esportatur Prometheus fil-Magni Virtwali Java (JVM).

Għanijiet

Ejja nħarsu lejn ftit oqsma fejn nistgħu nippersonalizzaw l-immaġni Camunda BPM Docker (GitHub) sabiex jinteraġixxi tajjeb ma' Kubernetes.

  1. Zkuk u metriċi;
  2. Konnessjonijiet ta' database;
  3. Awtentikazzjoni;
  4. Ġestjoni tas-sessjoni.

Se nħarsu lejn diversi modi kif nilħqu dawn l-għanijiet u nuru b'mod ċar il-proċess kollu.

Innota: Qed tuża l-verżjoni Enterprise? Ħares hawn u aġġorna links tal-immaġni kif meħtieġ.

Żvilupp tal-fluss tax-xogħol

F'din id-demo, se nużaw Skaffold biex nibnu immaġini Docker billi tuża Google Cloud Build. Għandu appoġġ tajjeb għal diversi għodod (bħal Kustomize u Helm), għodod CI u build, u fornituri tal-infrastruttura. Fajl skaffold.yaml.tmpl jinkludi settings għal Google Cloud Build u GKE, li jipprovdi mod sempliċi ħafna biex titħaddem infrastruttura tal-produzzjoni.

make skaffold se jgħabbi l-kuntest Dockerfile fis-Cloud Build, jibni l-immaġni u aħżenha f'GCR, u mbagħad tapplika l-manifesti għall-cluster tiegħek. Dan huwa dak li jagħmel make skaffold, iżda Skaffold għandu ħafna karatteristiċi oħra.

Għall-mudelli tal-yaml f'Kubernetes, nużaw kustomize biex niġġestixxu s-superpożizzjonijiet tal-yaml mingħajr ma nfork il-manifest kollu, li jippermettilek tuża git pull --rebase għal aktar titjib. Issa huwa f'kubectl u jaħdem pjuttost tajjeb għal affarijiet bħal dawn.

Aħna nużaw ukoll envsubst biex timla l-hostname u l-ID tal-proġett GCP fil-fajls *.yaml.tmpl. Tista' tara kif taħdem fiha makefile jew sempliċement kompli aktar.

Prerekwiżiti

  • Raggruppament tax-xogħol Kubernetes
  • Ippersonalizza
  • Skaffold - għall-ħolqien ta' l-immaġini tad-docker tiegħek u l-iskjerament faċli għall-GKE
  • Kopja ta' dan il-kodiċi
  • Envsubst

Fluss tax-xogħol bl-użu ta 'manifesti

Jekk ma tridx tuża kustomize jew skaffold, tista' tirreferi għall-manifesti fi generated-manifest.yaml u tadattahom għall-fluss tax-xogħol tal-għażla tiegħek.

Zkuk u metriċi

Prometheus sar l-istandard għall-ġbir tal-metriċi f'Kubernetes. Tokkupa l-istess niċċa bħal AWS Cloudwatch Metrics, Cloudwatch Alerts, Stackdriver Metrics, StatsD, Datadog, Nagios, vSphere Metrics u oħrajn. Huwa sors miftuħ u għandu lingwa ta' mistoqsija qawwija. Aħna ser nafdaw il-viżwalizzazzjoni lil Grafana - tiġi flimkien ma 'numru kbir ta' dashboards disponibbli barra mill-kaxxa. Huma konnessi ma 'xulxin u huma relattivament faċli biex jiġu installati magħhom prometheus-operatur.

B'mod awtomatiku, Prometheus juża l-mudell ta 'estrazzjoni <service>/metrics, u żżid kontenituri sidecar għal dan huwa komuni. Sfortunatament, il-metriċi JMX huma l-aħjar illoggjati fi ħdan il-JVM, għalhekk il-kontenituri sidecar mhumiex daqshekk effiċjenti. Ejja ngħaqqdu jmx_exporter sors miftuħ minn Prometheus għall-JVM billi żżidha mal-immaġni tal-kontenitur li se tipprovdi l-mogħdija /metrics fuq port differenti.

Żid Prometheus jmx_exporter mal-kontenitur

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

Ukoll, dan kien faċli. L-esportatur se jimmonitorja tomcat u juri l-metriċi tiegħu fil-format Prometheus fuq <svc>:9404/metrics

Setup tal-esportatur

Il-qarrej attent jista’ jistaqsi minn fejn ġie prometheus-jmx.yaml? Hemm ħafna affarijiet differenti li jistgħu jaħdmu fil-JVM, u tomcat huwa biss wieħed minnhom, għalhekk l-esportatur jeħtieġ xi konfigurazzjoni addizzjonali. Konfigurazzjonijiet standard għal tomcat, wildfly, kafka u l-bqija huma disponibbli hawn. Se nżidu tomcat bħala ConfigMap f'Kubernetes u mbagħad mmuntah bħala volum.

L-ewwel, inżidu l-fajl tal-konfigurazzjoni tal-esportatur mad-direttorju tal-pjattaforma/config/ tagħna

platform/config
└── prometheus-jmx.yaml

Imbagħad inżidu ConfigMapGenerator в kustomization.yaml.tmpl:

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

Dan iżid kull element files[] bħala element ta' konfigurazzjoni ConfigMap. Il-ConfigMapGenerators huma tajbin għax iħaffu d-dejta tal-konfigurazzjoni u jġiegħlu l-pod restart jekk tinbidel. Huma jnaqqsu wkoll l-ammont ta 'konfigurazzjoni fl-Iskjerament peress li tista' timmonta "folder" sħiħ ta 'fajls ta' konfigurazzjoni f'VolumeMount wieħed.

Fl-aħħarnett, irridu nimmuntaw il-ConfigMap bħala volum mal-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
[...]

Sabiħ. Jekk Prometheus mhux ikkonfigurat biex jagħmel tindif sħiħ, jista 'jkollok tgħidlu biex tnaddaf il-miżwed. L-utenti tal-Operatur Prometheus jistgħu jużaw service-monitor.yaml biex tibda. Esplora Service-monitor.yaml, disinn tal-operatur и ServiceMonitorSpec qabel tibda.

L-estensjoni ta' dan il-mudell għal każijiet ta' użu oħra

Il-fajls kollha li nżidu ma' ConfigMapGenerator se jkunu disponibbli fid-direttorju l-ġdid /etc/config. Tista' testendi dan il-mudell biex timmonta kwalunkwe fajl ta' konfigurazzjoni ieħor li għandek bżonn. Tista 'anki jintramaw skript tal-istartjar ġdid. Tista 'tuża subPath biex jintramaw fajls individwali. Biex taġġorna l-fajls xml, ikkunsidra li tuża xmlstarlet minflok sed. Huwa diġà inkluż fl-immaġini.

Magażins

Aħbar kbira! Ir-reġistri tal-applikazzjonijiet huma diġà disponibbli fuq stdout, pereżempju ma ' kubectl logs. Fluentd (installat awtomatikament fil-GKE) jgħaddi r-zkuk tiegħek lil Elasticsearch, Loki, jew il-pjattaforma tal-illoggjar tal-intrapriża tiegħek. Jekk trid tuża jsonify għal zkuk allura tista 'ssegwi l-mudell ta' hawn fuq biex tinstalla logback.

Database

B'mod awtomatiku, l-immaġni se jkollha database H2. Dan mhux adattat għalina, u se nużaw Google Cloud SQL ma Cloud SQL Proxy - dan ikun meħtieġ aktar tard biex issolvi problemi interni. Din hija għażla sempliċi u affidabbli jekk ma jkollokx il-preferenzi tiegħek fit-twaqqif tad-database. AWS RDS jipprovdi servizz simili.

Irrispettivament mid-database li tagħżel, sakemm ma tkunx H2, ikollok bżonn tissettja l-varjabbli ambjentali xierqa f' platform/deploy.yaml. Jidher xi ħaġa bħal din:

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

Innota: Tista' tuża Kustomize biex tiskjera f'ambjenti differenti billi tuża overlay: eżempju.

Innota: użu valueFrom: secretKeyRef. Jekk jogħġbok, uża din il-karatteristika Kubernetes anke waqt l-iżvilupp biex iżżomm is-sigrieti tiegħek siguri.

Huwa probabbli li diġà għandek sistema preferuta għall-ġestjoni tas-sigrieti ta 'Kubernetes. Jekk le, hawn xi għażliet: Kriptaġġhom bil-KMS tal-fornitur tas-sħab tiegħek u mbagħad tinjettahom fil-K8S bħala sigrieti permezz tal-pipeline tas-CD - Mozilla SOPS - se taħdem tajjeb ħafna flimkien ma 'sigrieti Kustomize. Hemm għodod oħra, bħal dotGPG, li jwettqu funzjonijiet simili: HashiCorp Vault, Ippersonalizza Plugins tal-Valur Sigriet.

Ingress

Sakemm ma tagħżelx li tuża port forwarding lokali, ser ikollok bżonn Ingress Controller konfigurat. Jekk ma tużax ingress-nginx (Tabella tat-Tmun) allura x'aktarx diġà taf li għandek bżonn tinstalla l-annotazzjonijiet meħtieġa fi ingress-patch.yaml.tmpl jew platform/ingress.yaml. Jekk qed tuża ingress-nginx u tara nginx ingress klassi b'load balancer jipponta lejha u DNS esterna jew dħul DNS wildcard, int tajjeb li tmur. Inkella, ikkonfigura l-Kontrollur tal-Ingress u d-DNS, jew aqbeż dawn il-passi u żomm il-konnessjoni diretta mal-pod.

TLS

Jekk tuża maniġer taċ-ċert jew kube-lego u letsencrypt - ċertifikati għall-login il-ġdid se jinkisbu awtomatikament. Inkella, tiftaħ ingress-patch.yaml.tmpl u tippersonalizzaha biex taqdi l-bżonnijiet tiegħek.

Tnedija!

Jekk segwejt dak kollu miktub hawn fuq, allura l-kmand make skaffold HOSTNAME=<you.example.com> għandha tniedi istanza disponibbli fi <hostname>/camunda

Jekk ma ssettjajtx il-login tiegħek għal URL pubbliku, tista 'tidderieġiha mill-ġdid localhost: kubectl port-forward -n camunda-bpm-demo svc/camunda-bpm 8080:8080 fuq localhost:8080/camunda

Stenna ftit minuti sakemm it-tomcat ikun kompletament lest. Cert-manager se jieħu xi żmien biex jivverifika l-isem tad-dominju. Imbagħad tista' tissorvelja r-zkuk billi tuża għodod disponibbli bħal għodda bħal kubetail, jew sempliċement tuża kubectl:

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

Il-passi li jmiss

Awtorizzazzjoni

Dan huwa aktar rilevanti għall-konfigurazzjoni ta 'Camunda BPM milli Kubernetes, iżda huwa importanti li wieħed jinnota li b'mod awtomatiku, l-awtentikazzjoni hija diżattivata fl-API REST. Tista jippermettu awtentikazzjoni bażika jew uża metodu ieħor bħal J.W.T.. Tista' tuża configmaps u volumi biex tgħabbi xml, jew xmlstarlet (ara hawn fuq) biex teditja fajls eżistenti fl-immaġni, u jew tuża wget jew tgħabbihom billi tuża kontenitur init u volum kondiviż.

Ġestjoni tas-sessjoni

Bħal ħafna applikazzjonijiet oħra, Camunda BPM jimmaniġġja sessjonijiet fil-JVM, għalhekk jekk trid tħaddem repliki multipli, tista 'tippermetti sessjonijiet li jwaħħlu (per eżempju għal ingress-nginx), li se jeżistu sakemm ir-replika tisparixxi, jew issettja l-attribut Max-Age għall-cookies. Għal soluzzjoni aktar robusta, tista' tuża Session Manager f'Tomcat. Lars għandu post separat fuq dan is-suġġett, iżda xi ħaġa bħal:

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

Innota: tista' tuża xmlstarlet minflok sed

Aħna użajna twemproxy quddiem Google Cloud Memorystore, bil maniġer tas-sessjoni memcached (jappoġġja lil Redis) biex imexxiha.

Skalar

Jekk diġà tifhem is-sessjonijiet, allura l-ewwel (u ħafna drabi l-aħħar) limitazzjoni għall-iskala ta 'Camunda BPM tista' tkun il-konnessjoni mad-database. Personalizzazzjoni parzjali hija diġà disponibbli "mill-kaxxa" Ejja tiddiżattiva wkoll intialSize fil-fajl settings.xml. Żid Autoscaler tal-Pod Orizzontali (HPA) u tista 'faċilment tiskala awtomatikament in-numru ta' imżiewed.

Talbiet u restrizzjonijiet

В platform/deployment.yaml Int ser tara li konna hard-coded il-qasam tar-riżorsi. Dan jaħdem tajjeb ma 'HPA, iżda jista' jeħtieġ konfigurazzjoni addizzjonali. Il-garża kustomize hija adattata għal dan. Cm. ingress-patch.yaml.tmpl и ./kustomization.yaml.tmpl

Output

Allura installajna Camunda BPM fuq Kubernetes b'metriċi Prometheus, zkuk, database H2, TLS u Ingress. Żidna fajls vażetti u fajls ta 'konfigurazzjoni bl-użu ta' ConfigMaps u Dockerfile. Tkellimna dwar l-iskambju tad-dejta għal volumi u direttament għal varjabbli ambjentali minn sigrieti. Barra minn hekk, ipprovdejna ħarsa ġenerali lejn it-twaqqif ta 'Camunda għal repliki multipli u API awtentikata.

referenzi

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, traduzzjoni oġġetti Alastair Firth, Lars Lange

Sors: www.habr.com

Żid kumment