Camunda BPM exekutatzen Kubernetes-en

Camunda BPM exekutatzen Kubernetes-en

Kubernetes erabiltzen al duzu? Prest zaude zure Camunda BPM instantziak makina birtualetatik ateratzeko edo, agian, Kubernetes-en exekutatzen saiatu? Ikus ditzagun konfigurazio arrunt batzuk eta zure behar zehatzetara egokitu daitezkeen elementu indibidualak.

Aurretik Kubernetes erabili duzula suposatzen du. Hala ez bada, zergatik ez begiratu lidergoa eta ez duzu zure lehen kluster hasi?

Authors

  • Alastair Firth (Alastair Firth) - Gunearen fidagarritasuneko ingeniari senior Camunda Cloud taldeko;
  • Lars Lange (Lars Lange) - Camundako DevOps ingeniaria.

Laburbilduz:

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

Ados, seguruenik ez du funtzionatu skaffold eta kustomize instalatuta ez dituzulako. Beno, gero irakurri!

Zer da Camunda BPM

Camunda BPM kode irekiko negozio-prozesuen kudeaketa eta erabakiak automatizatzeko plataforma bat da, negozio-erabiltzaileak eta software-garatzaileak lotzen dituena. Pertsonak, (mikro) zerbitzuak edota bot-ak koordinatzeko eta konektatzeko aproposa da! Erabilera kasu desberdinei buruz gehiago irakur dezakezu hemen link.

Zergatik erabili Kubernetes

Kubernetes Linux-en aplikazio modernoak exekutatzeko de facto estandarra bihurtu da. Hardwarearen emulazioaren ordez sistema-deiak eta kernelak memoria eta zereginen aldaketa kudeatzeko duen gaitasuna erabiliz, abiarazte-denbora eta abiarazte-denbora gutxienera murrizten dira. Hala ere, abantailarik handiena Kubernetes-ek eskaintzen duen API estandarretik etor daiteke aplikazio guztiek behar duten azpiegitura konfiguratzeko: biltegiratzea, sareak eta monitorizazioa. 2020ko ekainean 6 urte bete zituen eta beharbada kode irekiko bigarren proiektu handiena da (Linuxen ondoren). Duela gutxi, bere funtzionaltasuna aktiboki egonkortzen ari da azken urteotan iterazio azkarraren ondoren, mundu osoko ekoizpen-lan kargarentzat kritiko bihurtzen baita.

Camunda BPM Engine-k kluster berean exekutatzen diren beste aplikazio batzuetara erraz konektatu daiteke, eta Kubernetes-ek eskalagarritasun bikaina eskaintzen du, azpiegitura-kostuak benetan beharrezkoa denean soilik handitzeko (eta erraz murrizteko behar direnean).

Monitorizazioaren kalitatea ere asko hobetzen da Prometheus, Grafana, Loki, Fluentd eta Elasticsearch bezalako tresnekin, eta kluster bateko lan-karga guztiak zentralki ikusteko aukera ematen dizu. Gaur Prometheus esportatzailea Java makina birtualean (JVM) nola inplementatu aztertuko dugu.

helburuak

Ikus ditzagun Camunda BPM Docker irudia pertsonaliza dezakegun zenbait eremu (GitHub) Kubernetesekin ondo elkarreragin dezan.

  1. Erregistroak eta neurketak;
  2. Datu-basearen konexioak;
  3. Autentifikazioa;
  4. Saioaren kudeaketa.

Helburu horiek lortzeko hainbat modu aztertuko ditugu eta prozesu osoa argi eta garbi erakutsiko dugu.

Kontuan izan: Enterprise bertsioa erabiltzen ari al zara? Begira Hemen eta eguneratu irudi estekak behar izanez gero.

Lan-fluxuaren garapena

Demo honetan, Skaffold erabiliko dugu Google Cloud Build erabiliz Docker irudiak eraikitzeko. Hainbat tresnetarako (Kustomize eta Helm, esaterako), CI eta eraikitzeko tresnak eta azpiegitura hornitzaileentzako laguntza ona du. Fitxategia skaffold.yaml.tmpl Google Cloud Build eta GKE-ren ezarpenak barne hartzen ditu, produkzio mailako azpiegiturak exekutatzeko modu oso erraz bat eskaintzen duena.

make skaffold Dockerfile testuingurua Cloud Build-en kargatuko du, irudia eraiki eta GCRn gordeko du, eta, ondoren, manifestuak zure klusterean aplikatuko ditu. Hau da egiten duena make skaffold, baina Skaffoldek beste ezaugarri asko ditu.

Kubernetes-eko yaml txantiloietarako, kustomize erabiltzen dugu yaml gainjartzeak kudeatzeko, manifestu osoa bideratu gabe, erabiltzeko aukera emanez. git pull --rebase hobekuntza gehiago lortzeko. Orain kubectl-en dago eta nahiko ondo funtzionatzen du horrelako gauzetarako.

Envsubst ere erabiltzen dugu *.yaml.tmpl fitxategietan ostalari-izena eta GCP proiektuaren IDa betetzeko. Nola funtzionatzen duen ikus dezakezu makefile edo besterik gabe jarraitu gehiago.

Aldez

Lan-fluxua manifestuak erabiliz

Ez baduzu kustomize edo skaffold erabili nahi, hemengo manifestuetara jo dezakezu generated-manifest.yaml eta egokitu nahi duzun lan-fluxura.

Erregistroak eta neurketak

Prometheus Kubernetes-en metrikak biltzeko estandar bihurtu da. AWS Cloudwatch Metrics, Cloudwatch Alerts, Stackdriver Metrics, StatsD, Datadog, Nagios, vSphere Metrics eta beste batzuen nitxo bera hartzen du. Kode irekikoa da eta kontsulta-lengoaia indartsua du. Bistaratzea Grafanaren esku utziko dugu - kutxatik kanpo eskuragarri dauden aginte-panel ugari ditu. Elkarrekin konektatuta daude eta nahiko erraz instalatzen dira prometheus-operadore.

Lehenespenez, Prometheus-ek erauzketa eredua erabiltzen du <service>/metrics, eta horretarako sidecar edukiontziak gehitzea ohikoa da. Zoritxarrez, JMX neurketak hobekien erregistratzen dira JVMn, beraz, sidecar edukiontziak ez dira hain eraginkorrak. Konektatu gaitezen jmx_exporter kode irekia Prometheus-etik JVMra bidea emango duen edukiontziaren irudiari gehituz /metrics beste portu batean.

Gehitu Prometheus jmx_exporter edukiontzira

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

Beno, hori erraza zen. Esportatzaileak tomcat kontrolatuko du eta bere neurketak Prometheus formatuan erakutsiko ditu helbidean <svc>:9404/metrics

Esportatzailearen konfigurazioa

Irakurle adiak nondik datorren galde dezake prometheus-jmx.yaml? JVMn exekutatu daitezkeen hainbat gauza daude, eta tomcat horietako bat besterik ez da, beraz, esportatzaileak konfigurazio gehigarri bat behar du. Tomcat, wildfly, kafka eta abarrentzako konfigurazio estandarrak eskuragarri daude Hemen. Tomcat gisa gehituko dugu ConfigMap Kubernetes-en eta gero bolumen gisa muntatu.

Lehenik eta behin, esportatzaileen konfigurazio fitxategia gehitzen dugu gure platform/config/ direktoriora

platform/config
└── prometheus-jmx.yaml

Gero gehitzen dugu ConfigMapGenerator в kustomization.yaml.tmpl:

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

Honek elementu bakoitza gehituko du files[] ConfigMap konfigurazio-elementu gisa. ConfigMapGenerators bikainak dira konfigurazio-datuak hash egiten dituztelako eta pod berrabiarazteko behartzen dutelako aldatzen bada. Deployment-en konfigurazio-kopurua ere murrizten dute, konfigurazio-fitxategien "karpeta" oso bat munta dezakezu VolumeMount batean.

Azkenik, ConfigMap bolumen gisa muntatu behar dugu podan:

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

Zoragarria. Prometheus ez badago garbiketa osoa egiteko konfiguratuta, baliteke lekak garbitzeko esan beharko diozu. Prometheus Operator erabiltzaileek erabil dezakete service-monitor.yaml hasteko. Arakatu Service-monitor.yaml, operadorearen diseinua и ServiceMonitorSpec hasi baino lehen.

Eredu hau beste erabilera kasuetara hedatzea

ConfigMapGenerator-era gehitzen ditugun fitxategi guztiak eskuragarri egongo dira direktorio berrian /etc/config. Txantiloi hau luza dezakezu behar dituzun beste konfigurazio fitxategiak muntatzeko. Hasierako script berri bat ere munta dezakezu. Erabili dezakezu azpibidea fitxategi indibidualak muntatzeko. XML fitxategiak eguneratzeko, kontuan hartu erabiltzea xmlstarlet sed ordez. Dagoeneko irudian sartuta dago.

Aldizkariak

Berri bikaina! Aplikazioen erregistroak dagoeneko eskuragarri daude stdout-en, adibidez kubectl logs. Fluentd-ek (lehenespenez GKEn instalatua) zure erregistroak Elasticsearch, Loki edo zure enpresa-erregistro plataformara birbidaltuko ditu. jsonify erregistroetarako erabili nahi baduzu, goiko txantiloia jarraitu dezakezu instalatzeko saioa atzera.

Datu-basea

Berez, irudiak H2 datu-base bat izango du. Hau ez da egokia guretzat, eta Google Cloud SQL erabiliko dugu Cloud SQL Proxy-rekin - hau beharrezkoa izango da geroago barne arazoak konpontzeko. Aukera sinple eta fidagarria da datu-basea konfiguratzeko zure lehentasunak ez badituzu. AWS RDS-k antzeko zerbitzu bat eskaintzen du.

Aukeratzen duzun datu-basea edozein dela ere, H2 ez bada behintzat, ingurune-aldagai egokiak ezarri beharko dituzu. platform/deploy.yaml. Honela dirudi:

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

Kontuan izan: Kustomize erabil dezakezu ingurune desberdinetara hedatzeko gainjarri bat erabiliz: Adibidez.

Kontuan izan: erabilera valueFrom: secretKeyRef. Mesedez, erabili Kubernetes ezaugarri hau garapenean ere zure sekretuak seguru mantentzeko.

Litekeena da dagoeneko Kubernetes sekretuak kudeatzeko hobetsitako sistema bat izatea. Hala ez bada, hona hemen aukera batzuk: enkriptatzea zure hodeiko hornitzailearen KMSarekin eta gero K8S-en sekretu gisa injektatzea CD kanalaren bidez - MozillaSOPS - Oso ondo funtzionatuko du Kustomize sekretuekin konbinatuta. Badira beste tresna batzuk, hala nola dotGPG, antzeko funtzioak betetzen dituztenak: HashiCorp Ganga, Pertsonalizatu balio sekretuaren pluginak.

Ingress

Tokiko ataka birbidaltzea aukeratzen ez baduzu behintzat, Ingress Controller konfiguratua beharko duzu. Ez baduzu erabiltzen ingress-nginx (Helm taula) orduan ziurrenik dagoeneko badakizu beharrezko oharrak instalatu behar dituzula ingress-patch.yaml.tmpl edo platform/ingress.yaml. Ingress-nginx erabiltzen ari bazara eta nginx sarrera-klase bat ikusten baduzu karga-orekatzaile batekin eta kanpoko DNS edo komodin DNS sarrera batekin, prest zaude. Bestela, konfiguratu Ingress Controller eta DNSa, edo saltatu urrats hauek eta mantendu podarekin zuzeneko konexioa.

TLS

Erabiltzen baduzu cert-kudeatzailea edo kube-lego eta letsencrypt - saio-hasiera berrirako ziurtagiriak automatikoki lortuko dira. Bestela, ireki ingress-patch.yaml.tmpl eta pertsonalizatu zure beharretara.

Abiarazi!

Goian idatzitako guztia jarraitu baduzu, komandoa make skaffold HOSTNAME=<you.example.com> eskuragarri dagoen instantzia bat abiarazi beharko luke <hostname>/camunda

Ez baduzu saio-hasiera URL publiko batean ezarri, honekin birbideratu dezakezu localhost: kubectl port-forward -n camunda-bpm-demo svc/camunda-bpm 8080:8080 on localhost:8080/camunda

Itxaron minutu batzuk tomcat guztiz prest egon arte. Cert-kudeatzaileak denbora pixka bat beharko du domeinu-izena egiaztatzeko. Ondoren, erregistroak kontrola ditzakezu erabilgarri dauden tresnak erabiliz, hala nola kubetail bezalako tresna bat edo, besterik gabe, kubectl erabiliz:

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

Hurrengo urratsak

baimen

Hau garrantzitsuagoa da Camunda BPM konfiguratzeko Kubernetes baino, baina kontuan izan behar da lehenespenez autentifikazioa desgaituta dagoela REST APIan. Ahal duzu gaitu oinarrizko autentifikazioa edo erabili bezalako beste metodo bat J.W.T.. Configmapak eta bolumenak erabil ditzakezu xml kargatzeko, edo xmlstarlet (ikus goian) irudian dauden fitxategiak editatzeko, eta wget erabili edo kargatu init edukiontzi bat eta partekatutako bolumen bat erabiliz.

Saioaren kudeaketa

Beste aplikazio asko bezala, Camunda BPM-k JVMn saioak kudeatzen ditu, beraz, hainbat erreplika exekutatu nahi badituzu, saio itsaskorrak gaitu ditzakezu (adibidez ingress-nginx-erako), erreplika desagertu arte egongo dena edo cookieetarako Max-Age atributua ezarri. Irtenbide sendoagoa lortzeko, Tomcat-en Session Manager inplementa dezakezu. Larsek badu aparteko mezua gai honi buruz, baina horrelako zerbait:

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

Kontuan izan: xmlstarlet erabil dezakezu sed-en ordez

Erabili genuen twemproxy Google Cloud Memorystore-ren aurrean, batera memcached-saio-kudeatzailea (Redis onartzen du) exekutatzeko.

Eskalatzea

Saioak dagoeneko ulertzen badituzu, Camunda BPM eskalatzeko lehen muga (eta askotan azkena) datu-baserako konexioa izan daiteke. Dagoeneko pertsonalizazio partziala eskuragarri dago "kutxatik" Desgaitu dezagun inialSize settings.xml fitxategian ere. Gehitu Horizontal Pod Autoscaler (HPA) eta automatikoki eskala dezakezu lekaren kopurua.

Eskaerak eta murrizketak

В platform/deployment.yaml Baliabideen eremua gogor kodetu dugula ikusiko duzu. Honek ondo funtzionatzen du HPArekin, baina baliteke konfigurazio gehigarria behar izatea. Kustomize adabakia egokia da horretarako. cm. ingress-patch.yaml.tmpl и ./kustomization.yaml.tmpl

Irteera

Beraz, Camunda BPM instalatu genuen Kubernetes-en Prometheus metrics, logs, H2 database, TLS eta Ingress-ekin. Jar fitxategiak eta konfigurazio fitxategiak gehitu ditugu ConfigMaps eta Dockerfile erabiliz. Datuak bolumenekin eta zuzenean sekretuetatik ingurune-aldagaiekin trukatzeaz hitz egin dugu. Horrez gain, hainbat errepliketarako Camunda konfiguratzeko ikuspegi orokorra eta autentifikatu API bat eman dugu.

Erreferentziak

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, itzulpena Artikulua Alastair Firth, Lars Lange

Iturria: www.habr.com

Gehitu iruzkin berria