Esecuzione di Camunda BPM nantu à Kubernetes

Esecuzione di Camunda BPM nantu à Kubernetes

Aduprate Kubernetes? Pronti à spustà e vostre istanze Camunda BPM fora di e macchine virtuali, o forse solu pruvate à eseguisce in Kubernetes? Fighjemu alcune cunfigurazioni cumuni è elementi individuali chì ponu esse adattati à i vostri bisogni specifichi.

Si assume chì avete usatu Kubernetes prima. Se no, perchè ùn fighjate micca dirigenza è micca principià u vostru primu cluster?

L'autori

  • Alastair Firth (Alastair Firth) - Senior Site Reliability Engineer in a squadra Camunda Cloud;
  • Lars Lange (Lars Lange) - Ingegnere DevOps à Camunda.

In breve:

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

Va bè, probabilmente ùn hà micca travagliatu perchè ùn avete micca skaffold è kustomize installati. Ebbè allora leghje !

Cosa hè Camunda BPM

Camunda BPM hè una piattaforma open source di gestione di i prucessi cummerciale è di l'automatizazione di decisioni chì cunnetta l'utilizatori di l'affari è i sviluppatori di software. Hè ideale per a coordinazione è a cunnessione di e persone, (micro) servizii o ancu bots! Pudete leghje più nantu à i diversi casi d'usu à a lea.

Perchè aduprà Kubernetes

Kubernetes hè diventatu u standard de facto per eseguisce applicazioni muderne in Linux. Utilizendu e chjama di u sistema invece di l'emulazione di hardware è a capacità di u kernel per gestisce a memoria è u cambiamentu di u travagliu, u tempu di boot è u tempu di startup sò mantinuti à u minimu. Tuttavia, u più grande benefiziu pò vene da l'API standard chì Kubernetes furnisce per cunfigurà l'infrastruttura necessaria da tutte l'applicazioni: almacenamiento, rete è monitoraghju. Hà fattu 2020 anni in ghjugnu 6 è hè forse u sicondu prughjettu open source più grande (dopu à Linux). Recentemente hà stabilizatu attivamente a so funziunalità dopu una rapida iterazione in l'ultimi anni, postu chì diventa critica per i carichi di travagliu di produzzione in u mondu.

Camunda BPM Engine pò cunnetta facilmente à altre applicazioni chì funzionanu nantu à u stessu cluster, è Kubernetes furnisce una scalabilità eccellente, chì vi permette di aumentà i costi di l'infrastruttura solu quandu hè veramente necessariu (è facilmente riduzzione cum'è necessariu).

A qualità di u monitoraghju hè ancu assai migliuratu cù arnesi cum'è Prometheus, Grafana, Loki, Fluentd è Elasticsearch, chì vi permettenu di vede centralmente tutti i carichi di travagliu in un cluster. Oghje vedemu cumu implementà l'esportatore Prometheus in a Java Virtual Machine (JVM).

Scopi

Fighjemu uni pochi di spazii induve pudemu persunalizà l'imaghjini di Camunda BPM Docker (github) in modu chì interagisce bè cù Kubernetes.

  1. logs è metrica;
  2. cunnessione di basa di dati;
  3. autentificazione;
  4. Gestione di sessione.

Fighjemu parechje manere di ghjunghje sti scopi è mustrà chjaramente tuttu u prucessu.

Vita: Aduprate a versione Enterprise ? Fighjate ccà è aghjurnà i ligami di l'imaghjini quantu necessariu.

Sviluppu di u flussu di travagliu

In questa demo, useremu Skaffold per custruisce l'imaghjini Docker cù Google Cloud Build. Hà un bonu supportu per diversi strumenti (cum'è Kustomize è Helm), CI è strumenti di custruzzione, è i fornituri d'infrastruttura. File skaffold.yaml.tmpl include paràmetri per Google Cloud Build è GKE, chì furnisce un modu assai simplice per eseguisce l'infrastruttura di produzzione.

make skaffold caricarà u cuntestu Dockerfile in Cloud Build, custruisce l'imaghjini è almacenà in GCR, è poi applicà i manifesti à u vostru cluster. Questu hè ciò chì face make skaffold, ma Skaffold hà parechje altre funziunalità.

Per i mudelli yaml in Kubernetes, usemu kustomize per gestisce i sovrapposizioni di yaml senza bifurcà tuttu u manifestu, chì vi permette di utilizà git pull --rebase per più migliurà. Avà hè in kubectl è funziona abbastanza bè per tali cose.

Avemu ancu aduprà envsubst per populà u nome d'ospite è l'ID di prughjettu GCP in i schedarii *.yaml.tmpl. Pudete vede cumu funziona makefile o solu cuntinuà più.

Prerequisiti

  • cluster di travagliu Kubernetes
  • Personalizà
  • Scaffold - per creà e vostre propiu imagine docker è facilità di implementazione à GKE
  • Copia di stu codice
  • Envsubst

U flussu di travagliu cù manifesti

Se ùn vulete micca aduprà kustomize o skaffold, pudete riferite à i manifesti in generated-manifest.yaml è adattalli à u flussu di travagliu di a vostra scelta.

Logs è metriche

Prometheus hè diventatu u standard per a cullizzioni di metriche in Kubernetes. Occupa u listessu nichu cum'è AWS Cloudwatch Metrics, Cloudwatch Alerts, Stackdriver Metrics, StatsD, Datadog, Nagios, vSphere Metrics è altri. Hè open source è hà una lingua di quistione putente. Affideremu a visualizazione à Grafana - vene cun un gran numaru di dashboards dispunibili fora di a scatula. Sò cunnessi à l'altri è sò relativamente faciuli di stallà cun prumetheus-operatore.

Per automaticamente, Prometheus usa u mudellu di estrazione <service>/metrics, è aghjunghje cuntenituri sidecar per questu hè cumunu. Sfortunatamente, e metriche JMX sò megliu registrate in a JVM, cusì i cuntenituri sidecar ùn sò micca cusì efficienti. Cunnettamu jmx_exporter open source da Prometheus à a JVM aghjunghjendu à l'imaghjini di u containeru chì furnisce u percorsu /metrics nant'à un altru portu.

Aghjunghjite Prometheus jmx_exporter à u containeru

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

Ebbè, era faciule. L'esportatore monitorerà u tomcat è mostrarà e so metriche in u formatu Prometheus à <svc>:9404/metrics

Configurazione di l'esportatore

U lettore attentu pò dumandassi da induve vene prometheus-jmx.yaml? Ci hè parechje cose diffirenti chì ponu esse curriri in a JVM, è tomcat hè solu unu di elli, cusì l'esportatore hà bisognu di una cunfigurazione supplementaria. Cunfigurazioni standard per tomcat, wildfly, kafka è cusì sò dispunibili ccà. Avemu aghjunghje tomcat cum'è ConfigMap in Kubernetes è poi muntate cum'è un voluminu.

Prima, aghjunghjemu u schedariu di cunfigurazione di l'esportatore à u nostru repertoriu platform/config/

platform/config
└── prometheus-jmx.yaml

Allora aghjunghjemu ConfigMapGenerator в kustomization.yaml.tmpl:

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

Questu aghjunghje ogni elementu files[] cum'è un elementu di cunfigurazione ConfigMap. I ConfigMapGenerators sò fantastichi perchè anu sbulicatu i dati di cunfigurazione è furzà un pod restart se cambia. Riducenu ancu a quantità di cunfigurazione in Deployment postu chì pudete muntà un "cartulare" sanu di schedarii di cunfigurazione in un VolumeMount.

Infine, avemu bisognu di muntà u ConfigMap cum'è un voluminu à u 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
[...]

Meravigliosa. Se Prometheus ùn hè micca cunfiguratu per fà una pulizia completa, pudete avè da dì à pulizziari i pods. L'utilizatori di Prometheus Operator ponu aduprà service-monitor.yaml per principià. Esplora Service-monitor.yaml, disignu operatore и ServiceMonitorSpec prima di principià.

Estendendu stu mudellu à altri casi d'usu

Tutti i schedari chì aghjunghjemu à ConfigMapGenerator seranu dispunibili in u novu cartulare /etc/config. Pudete allargà stu mudellu per muntà qualsiasi altri schedari di cunfigurazione chì avete bisognu. Pudete ancu muntà un novu script di startup. Pudete aduprà subPath per muntà i schedarii individuali. Per aghjurnà i fugliali xml, cunzidira l'usu xmlstarlet invece di sed. Hè digià inclusu in l'imaghjini.

Riviste

Grande nutizia! I logs di l'applicazioni sò digià dispunibili nantu à stdout, per esempiu cù kubectl logs. Fluentd (installatu per difettu in GKE) trasmetterà i vostri logs à Elasticsearch, Loki, o a vostra piattaforma di registrazione di l'impresa. Se vulete usà jsonify per i logs, pudete seguità u mudellu sopra per installà logback.

Base di dati

Per automaticamente, l'imaghjini duverà una basa di dati H2. Questu ùn hè micca adattatu per noi, è avemu aduprà Google Cloud SQL cù Cloud SQL Proxy - questu serà necessariu più tardi per risolve i prublemi interni. Questa hè una opzione simplice è affidabile se ùn avete micca e vostre preferenze in a creazione di a basa di dati. AWS RDS furnisce un serviziu simili.

Indipendentemente da a basa di dati chì sceglite, salvu chì ùn sia H2, avete bisognu di stabilisce e variabili di l'ambiente adatti in platform/deploy.yaml. Sembra qualcosa cusì:

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

Vita: Pudete aduprà Kustomize per implementà in diversi ambienti utilizendu una superposizione: esempiu.

Vita: usu valueFrom: secretKeyRef. Per piacè, aduprate sta funzione Kubernetes ancu durante u sviluppu per mantene i vostri sicreti sicuru.

Hè prubabile chì avete digià un sistema preferitu per gestisce i secreti di Kubernetes. Se no, eccu alcune opzioni: Cifrate cù u KMS di u vostru fornitore di nuvola è poi injectendu in K8S cum'è secreti via u pipeline CD - Mozilla SOPS - hà da travaglià assai bè in cumminazione cù i secreti Kustomize. Ci sò altre strumenti, cum'è dotGPG, chì facenu funzioni simili: HashiCorp Vault, Personalizà i plugins di valore secretu.

Ingress

A menu chì ùn sceglite d'utilizà a spedizione di portu lucale, avete bisognu di un Controller d'Ingressu cunfiguratu. Sè vo ùn aduprà ingress-nginx (Graficu di Helm) allora probabilmente sapete digià chì avete bisognu di stallà l'annotazioni necessarie in ingress-patch.yaml.tmpl o platform/ingress.yaml. Sè vo aduprate ingress-nginx è vede una classe d'ingress nginx cun un equilibratore di carica chì punta à questu è un DNS esternu o una entrata DNS wildcard, site bonu per andà. Altrimenti, cunfigurà u Controller Ingress è DNS, o saltate questi passi è mantene a cunnessione diretta à u pod.

TLS

Sè vo aduprate cert-manager o kube-lego è letsencrypt - i certificati per u novu login seranu ottenuti automaticamente. Altrimenti, apre ingress-patch.yaml.tmpl è persunalizà per adattà à i vostri bisogni.

Lanciate!

Sè vo seguitate tuttu scrittu sopra, allura u cumandamentu make skaffold HOSTNAME=<you.example.com> duverebbe lancià una istanza dispunibule in <hostname>/camunda

Se ùn avete micca stabilitu u vostru login à un URL publicu, pudete reindirizzà cù localhost: kubectl port-forward -n camunda-bpm-demo svc/camunda-bpm 8080:8080 nantu localhost:8080/camunda

Aspettate uni pochi di minuti finu à chì u tomcat hè cumplettamente prontu. Cert-manager vi piglià qualchi tempu à verificà u nomu duminiu. Pudete tandu monitorà i logs utilizendu strumenti dispunibuli cum'è un strumentu cum'è kubetail, o simpricimenti utilizendu kubectl:

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

Passi prossimi

Accedi

Questu hè più pertinente per cunfigurà Camunda BPM cà Kubernetes, ma hè impurtante nutà chì per automaticamente, l'autentificazione hè disattivata in l'API REST. Poi attivà l'autentificazione basica o aduprà un altru mètudu cum'è J.W.T.. Pudete utilizà configmaps è volumi per carricà xml, o xmlstarlet (vede sopra) per edità i fugliali esistenti in l'imaghjini, è sia aduprate wget o caricate cù un container init è un voluminu spartutu.

Gestione di sessione

Cum'è parechje altre applicazioni, Camunda BPM gestisce e sessioni in a JVM, cusì se vulete eseguisce parechje replicate, pudete attivà e sessioni sticky (per esempiu per ingress-nginx), chì esisterà finu à chì a replica sparisce, o stabilisce l'attributu Max-Age per i cookies. Per una soluzione più robusta, pudete implementà Session Manager in Tomcat. Lars hà postu separatu nantu à questu tema, ma qualcosa cum'è:

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

Vita: pudete aduprà xmlstarlet invece di sed

Avemu usatu twemproxy davanti à Google Cloud Memorystore, cù memcached-session-manager (supporta Redis) per eseguisce.

Scaling

Sè avete digià capitu e sessioni, allora a prima (è spessu l'ultima) limitazione à scaling Camunda BPM pò esse a cunnessione à a basa di dati. A persunalizazione parziale hè digià dispunibule "da a scatula" Disattivemu ancu intialSize in u schedariu settings.xml. Add Autoscaler à pod horizontale (HPA) è pudete facilmente scala automaticamente u numeru di pods.

Richieste è restrizioni

В platform/deployment.yaml You Mulateri Di L'vede chì avemu hard-coded u campu di risorse. Questu funziona bè cù HPA, ma pò esse bisognu di cunfigurazione supplementu. U patch kustomize hè adattatu per questu. Cm. ingress-patch.yaml.tmpl и ./kustomization.yaml.tmpl

cunchiusioni

Allora avemu installatu Camunda BPM in Kubernetes cù metrica Prometheus, logs, basa di dati H2, TLS è Ingress. Avemu aghjustatu i schedari jar è i schedarii di cunfigurazione cù ConfigMaps è Dockerfile. Avemu parlatu di scambià dati à volumi è direttamente à variabili di l'ambiente da i sicreti. Inoltre, avemu furnitu una panoramica di a cunfigurazione di Camunda per parechje repliche è una API autentificata.

referenze

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, traduzzione articuli Alastair Firth, Lars Lange

Source: www.habr.com

Add a comment