Kouri Camunda BPM sou Kubernetes

Kouri Camunda BPM sou Kubernetes

Èske w ap itilize Kubernetes? Pare pou deplase ka Camunda BPM ou yo soti nan machin vityèl, oswa petèt jis eseye kouri yo sou Kubernetes? Ann gade nan kèk konfigirasyon komen ak atik endividyèl ki ka pwepare a bezwen espesifik ou yo.

Li sipoze ke ou te itilize Kubernetes anvan. Si ou pa, poukisa pa pran yon gade nan lidèchip epi ou pa kòmanse premye gwoup ou a?

Otè

  • Alastair Firth (Alastair Firth) - Senior Site Reliability Engineer nan ekip Camunda Cloud la;
  • Lars Lange (Lars Lange) - Enjenyè DevOps nan Camunda.

An rezime:

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

Oke, pwobableman li pa t travay paske ou pa gen skaffold ak kustomize enstale. Oke Lè sa a, li sou!

Ki sa ki Camunda BPM?

Camunda BPM se yon platfòm jesyon pwosesis biznis ak automatisation desizyon ki konekte itilizatè biznis ak devlopè lojisyèl. Li se ideyal pou kowòdone ak konekte moun, (mikwo) sèvis oswa menm bots! Ou ka li plis sou diferan ka itilizasyon yo nan lyen.

Poukisa sèvi ak Kubernetes

Kubernetes te vin estanda defakto pou kouri aplikasyon modèn sou Linux. Lè w itilize apèl sistèm olye pou yo imitasyon pyès ki nan konpitè ak kapasite nwayo a pou jere memwa ak chanjman travay, tan bòt ak tan demaraj yo kenbe nan yon minimòm. Sepandan, pi gwo benefis la ka soti nan API estanda Kubernetes bay pou konfigirasyon enfrastrikti tout aplikasyon yo mande yo: depo, rezo, ak siveyans. Li te gen 2020 ane fin vye granmoun nan mwa jen 6 e li se petèt dezyèm pi gwo pwojè sous louvri (apre Linux). Dènyèman, li te aktivman estabilize fonksyonalite li yo apre iterasyon rapid sou kèk ane ki sot pase yo kòm li vin kritik nan kantite travay pwodiksyon atravè mond lan.

Camunda BPM Engine ka fasilman konekte ak lòt aplikasyon ki kouri sou menm gwoup la, ak Kubernetes bay ekselan évolutivité, ki pèmèt ou ogmante pri enfrastrikti sèlman lè li vrèman nesesè (epi fasil redwi yo jan sa nesesè).

Kalite siveyans la amelyore anpil tou ak zouti tankou Prometheus, Grafana, Loki, Fluentd ak Elasticsearch, ki pèmèt ou wè tout chaj travay yo nan yon gwoup. Jodi a nou pral gade kijan pou aplike ekspòtatè Prometheus nan Java Virtual Machine (JVM).

Objektif

Ann gade kèk zòn kote nou ka Customize imaj Camunda BPM Docker (GitHub) pou li byen reyaji ak Kubernetes.

  1. Logs ak mezi;
  2. Koneksyon baz done;
  3. Otantifikasyon;
  4. Jesyon sesyon.

Nou pral gade plizyè fason pou reyalize objektif sa yo epi montre aklè tout pwosesis la.

Note: Èske w ap itilize vèsyon Enterprise? Gade isit la epi mete ajou lyen imaj yo jan sa nesesè.

Devlopman workflow

Nan demonstrasyon sa a, nou pral sèvi ak Skaffold pou konstwi imaj Docker lè l sèvi avèk Google Cloud Build. Li gen bon sipò pou plizyè zouti (tankou Kustomize ak Helm), CI ak zouti bati, ak founisè enfrastrikti. File skaffold.yaml.tmpl gen ladann anviwònman pou Google Cloud Build ak GKE, ki bay yon fason trè senp pou kouri enfrastrikti pwodiksyon-klas.

make skaffold pral chaje kontèks Dockerfile a nan Cloud Build, bati imaj la epi estoke li nan GCR, ak Lè sa a, aplike manifest yo nan gwoup ou a. Sa a se sa li fè make skaffold, men Skaffold gen anpil lòt karakteristik.

Pou modèl yaml nan Kubernetes, nou itilize kustomize pou jere superpositions yaml san yo pa fouche tout manifest la, ki pèmèt ou itilize git pull --rebase pou plis amelyorasyon. Koulye a, li nan kubectl epi li travay byen byen pou bagay sa yo.

Nou itilize envsubst tou pou ranpli non host la ak ID pwojè GCP nan dosye *.yaml.tmpl yo. Ou ka wè ki jan li travay nan makefile oswa jis kontinye pi lwen.

Condition

Workflow lè l sèvi avèk manifest

Si ou pa vle sèvi ak kustomize oswa skaffold, ou ka refere a manifest yo nan generated-manifest.yaml epi adapte yo ak workflow ou chwazi a.

Logs ak metrik

Prometheus te vin estanda pou kolekte mezi nan Kubernetes. Li okipe menm nich ak AWS Cloudwatch Metrics, Cloudwatch Alerts, Stackdriver Metrics, StatsD, Datadog, Nagios, vSphere Metrics ak lòt moun. Li se sous louvri epi li gen yon lang rekèt pwisan. Nou pral konfye vizyalizasyon an bay Grafana - li vini ak yon gwo kantite tablodbò ki disponib soti nan bwat la. Yo konekte youn ak lòt epi yo relativman fasil pou enstale prometheus-operateur.

Pa default, Prometheus itilize modèl ekstraksyon an <service>/metrics, epi ajoute veso sidecar pou sa a komen. Malerezman, mezi JMX yo pi byen konekte nan JVM a, kidonk veso sidecar yo pa efikas. Ann konekte jmx_exporter sous louvri soti nan Prometheus nan JVM a lè w ajoute li nan imaj la veso ki pral bay chemen an /metrics sou yon pò diferan.

Ajoute Prometheus jmx_exporter nan veso a

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

Oke, sa te fasil. Ekspòtatè a pral kontwole tomcat epi montre mezi li yo nan fòma Prometheus nan <svc>:9404/metrics

Ekspòtatè konfigirasyon

Lektè atantif la ka mande ki kote li soti prometheus-jmx.yaml? Gen anpil bagay diferan ki ka kouri nan JVM a, ak tomcat se jis youn nan yo, kidonk ekspòtatè a bezwen kèk konfigirasyon adisyonèl. Konfigirasyon estanda pou tomcat, wildfly, kafka ak sou sa yo disponib isit la. Nou pral ajoute tomcat kòm ConfigMap nan Kubernetes ak Lè sa a, monte li kòm yon volim.

Premyèman, nou ajoute fichye konfigirasyon ekspòtatè a nan anyè platfòm/config/nou an

platform/config
└── prometheus-jmx.yaml

Lè sa a, nou ajoute ConfigMapGenerator в kustomization.yaml.tmpl:

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

Sa a pral ajoute chak eleman files[] kòm yon eleman konfigirasyon ConfigMap. ConfigMapGenerators yo gwo paske yo hash done yo konfigirasyon epi fòse yon rekòmanse pod si li chanje. Yo menm tou yo redwi kantite konfigirasyon nan Deplwaman paske ou ka monte yon "dosye" tout fichye konfigirasyon nan yon sèl VolumeMount.

Finalman, nou bezwen monte ConfigMap la kòm yon volim nan gous la:

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

Bèl bagay. Si Prometheus pa configuré pou fè yon netwayaj konplè, ou ka oblije di li pou netwaye gous yo. Itilizatè Operatè Prometheus ka itilize service-monitor.yaml pou kòmanse. Eksplore Service-monitor.yaml, konsepsyon operatè и ServiceMonitorSpec anvan ou kòmanse.

Pwolonje modèl sa a nan lòt ka itilize

Tout fichye nou ajoute nan ConfigMapGenerator ap disponib nan nouvo anyè a /etc/config. Ou ka pwolonje modèl sa a pou monte nenpòt lòt dosye konfigirasyon ou bezwen. Ou ka menm monte yon nouvo script demaraj. Ou ka itilize subPath pou monte dosye endividyèl yo. Pou mete ajou dosye xml, konsidere itilize xmlstarlet olye de sed. Li deja enkli nan imaj la.

Magazin

Gwo nouvèl! Jounal aplikasyon yo deja disponib sou stdout, pou egzanp avèk kubectl logs. Fluentd (enstale pa default nan GKE) pral voye mòso bwa ou yo bay Elasticsearch, Loki, oswa platfòm antrepwiz ou. Si ou vle sèvi ak jsonify pou mòso bwa Lè sa a, ou ka swiv modèl ki anwo a pou enstale konekte.

Baz done

Pa default, imaj la pral gen yon baz done H2. Sa a pa apwopriye pou nou, epi nou pral sèvi ak Google Cloud SQL ak Cloud SQL Proxy - sa a pral bezwen pita pou rezoud pwoblèm entèn yo. Sa a se yon opsyon ki senp epi serye si ou pa gen pwòp preferans ou nan mete kanpe baz done a. AWS RDS bay yon sèvis menm jan an.

Kèlkeswa baz done ou chwazi a, sof si li se H2, w ap bezwen mete varyab anviwònman ki apwopriye yo nan. platform/deploy.yaml. Li sanble yon bagay tankou sa a:

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

Note: Ou ka itilize Kustomize pou deplwaye nan diferan anviwònman lè l sèvi avèk yon superposition: egzanp.

Note: itilizasyon valueFrom: secretKeyRef. Tanpri, sèvi ak karakteristik Kubernetes sa a menm pandan devlopman pou kenbe sekrè ou an sekirite.

Li posib ke ou deja gen yon sistèm pi pito pou jere sekrè Kubernetes. Si ou pa, isit la gen kèk opsyon: Chide yo ak KMS founisè nwaj ou a ak Lè sa a, enjekte yo nan K8S kòm sekrè atravè tiyo CD la - Mozilla SOPS - ap travay trè byen nan konbinezon ak sekrè Kustomize. Gen lòt zouti, tankou dotGPG, ki fè fonksyon menm jan an: HashiCorp vout, Customize Plugins Valè sekrè.

Pénétrer

Sòf si ou chwazi pou itilize transfè pò lokal yo, w ap bezwen yon Kontwolè Ingress configuré. Si ou pa itilize antre-nginx (Tablo Helm) Lè sa a, ou gen plis chans deja konnen ke ou bezwen enstale anotasyon ki nesesè yo nan ingress-patch.yaml.tmpl oswa platform/ingress.yaml. Si w ap itilize ingress-nginx epi wè yon klas nginx ingress ak yon balans chaj ki montre li ak yon DNS ekstèn oswa DNS wildcard, ou bon pou w ale. Sinon, configured Ingress Controller ak DNS, oswa sote etap sa yo epi kenbe koneksyon dirèk la ak gous la.

tl

Si ou itilize sèt-manadjè oswa kube-lego ak letsencrypt - sètifika pou nouvo koneksyon an pral jwenn otomatikman. Sinon, louvri ingress-patch.yaml.tmpl epi personnaliser li selon sa ou bezwen.

Lanse!

Si ou swiv tout sa ki ekri pi wo a, Lè sa a, kòmandman an make skaffold HOSTNAME=<you.example.com> ta dwe lanse yon egzanp ki disponib nan <hostname>/camunda

Si ou pa mete login ou a nan yon URL piblik, ou ka redireksyon li avèk localhost: kubectl port-forward -n camunda-bpm-demo svc/camunda-bpm 8080:8080 sou localhost:8080/camunda

Rete tann kèk minit jiskaske tomcat konplètman pare. Cert-manadjè ap pran kèk tan pou verifye non domèn. Lè sa a, ou ka kontwole mòso bwa yo lè l sèvi avèk zouti ki disponib tankou yon zouti tankou kubetail, oswa tou senpleman lè l sèvi avèk kubectl:

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

Pwochen etap yo

Otorizasyon

Sa a pi enpòtan nan konfigirasyon Camunda BPM pase Kubernetes, men li enpòtan sonje ke pa default, otantifikasyon enfim nan API REST la. Ou kapab pèmèt otantifikasyon debaz oswa itilize yon lòt metòd tankou J.W.T.. Ou ka itilize konfigmap ak volim pou chaje xml, oswa xmlstarlet (gade pi wo a) pou edite fichye ki deja egziste nan imaj la, epi swa itilize wget oswa chaje yo lè l sèvi avèk yon veso init ak yon volim pataje.

Jesyon sesyon

Menm jan ak anpil lòt aplikasyon, Camunda BPM okipe sesyon nan JVM a, kidonk si ou vle kouri plizyè kopi, ou ka pèmèt sesyon kolan (pou egzanp pou ingress-nginx), ki pral egziste jiskaske kopi a disparèt, oswa mete atribi Max-Age pou bonbon. Pou yon solisyon ki pi solid, ou ka deplwaye Manadjè Sesyon nan Tomcat. Lars genyen pòs separe sou sijè sa a, men yon bagay tankou:

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

Note: ou ka itilize xmlstarlet olye de sed

Nou te itilize twemproxy devan Google Cloud Memorystore, ak memcached-session-manager (sipòte Redis) pou kouri li.

Eskalad

Si ou deja konprann sesyon yo, Lè sa a, premye (e souvan dènye limit la) nan dekale Camunda BPM ka koneksyon an nan baz done a. Pèsonalizasyon pasyèl deja disponib "soti nan bwat la" Ann tou enfim inyalSize nan fichye settings.xml la. Ajoute Orizontal Pod Autoscaler (HPA) epi ou ka fasilman echèl otomatikman kantite gous yo.

Demann ak restriksyon

В platform/deployment.yaml Ou pral wè ke nou te difisil-kode jaden an resous. Sa a travay byen ak HPA, men li ka mande pou konfigirasyon adisyonèl. Patch kustomize la apwopriye pou sa. Cm. ingress-patch.yaml.tmpl и ./kustomization.yaml.tmpl

Sòti

Se konsa, nou enstale Camunda BPM sou Kubernetes ak mezi Prometheus, mòso bwa, baz done H2, TLS ak Ingress. Nou te ajoute fichye bokal ak fichye konfigirasyon lè l sèvi avèk ConfigMaps ak Dockerfile. Nou te pale sou echanj done nan komèsan ak dirèkteman nan varyab anviwònman soti nan sekrè. Anplis de sa, nou te bay yon apèsi sou mete kanpe Camunda pou plizyè kopi ak yon API otantifye.

Referans

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, tradiksyon atik Alastair Firth, Lars Lange

Sous: www.habr.com

Add nouvo kòmantè