Darbojas Camunda BPM vietnē Kubernetes

Darbojas Camunda BPM vietnē Kubernetes

Vai jÅ«s izmantojat Kubernetes? Vai esat gatavs pārvietot savus Camunda BPM gadÄ«jumus no virtuālajām maŔīnām vai varbÅ«t vienkārÅ”i mēģināt tos palaist Kubernetes? ApskatÄ«sim dažas izplatÄ«tas konfigurācijas un atseviŔķus vienumus, kurus var pielāgot jÅ«su Ä«paÅ”ajām vajadzÄ«bām.

Tiek pieņemts, ka esat iepriekÅ” izmantojis Kubernetes. Ja nē, kāpēc gan nepaskatÄ«ties vadÄ«ba un nesāc savu pirmo kopu?

Autori

  • Alasters Fērts (Alastērs Fērts) - Camunda Cloud komandas vecākais bÅ«vlaukuma uzticamÄ«bas inženieris;
  • Larss Lange (Lars Lange) - DevOps inženieris uzņēmumā Camunda.

ÄŖsumā:

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

Labi, tas, iespējams, nedarbojās, jo jums nav instalēta skaffold un kustomize. Nu tad lasi tālāk!

Kas ir Camunda BPM

Camunda BPM ir atvērtā koda biznesa procesu pārvaldÄ«bas un lēmumu automatizācijas platforma, kas savieno biznesa lietotājus un programmatÅ«ras izstrādātājus. Tas ir ideāli piemērots cilvēku, (mikro)pakalpojumu vai pat robotu koordinÄ“Å”anai un savienoÅ”anai! Vairāk par dažādiem lietoÅ”anas gadÄ«jumiem varat lasÄ«t vietnē saite.

Kāpēc izmantot Kubernetes

Kubernetes ir kļuvis par de facto standartu modernu lietojumprogrammu palaiÅ”anai operētājsistēmā Linux. Izmantojot sistēmas izsaukumus, nevis aparatÅ«ras emulāciju un kodola spēju pārvaldÄ«t atmiņu un uzdevumu pārslēgÅ”anu, sāknÄ“Å”anas un palaiÅ”anas laiks tiek samazināts lÄ«dz minimumam. Tomēr lielākais ieguvums var bÅ«t no standarta API, ko Kubernetes nodroÅ”ina, lai konfigurētu infrastruktÅ«ru, kas nepiecieÅ”ama visām lietojumprogrammām: uzglabāŔanai, tÄ«kla izveidei un uzraudzÄ«bai. Tam 2020. gada jÅ«nijā apritēja 6 gadi, un tas, iespējams, ir otrs lielākais atvērtā pirmkoda projekts (pēc Linux). Tā nesen ir aktÄ«vi stabilizējusi savu funkcionalitāti pēc straujas iterācijas pēdējos gados, jo tā kļūst kritiska ražoÅ”anas noslodzei visā pasaulē.

Camunda BPM Engine var viegli izveidot savienojumu ar citām lietojumprogrammām, kas darbojas tajā paŔā klasterÄ«, un Kubernetes nodroÅ”ina lielisku mērogojamÄ«bu, ļaujot palielināt infrastruktÅ«ras izmaksas tikai tad, kad tas patieŔām ir nepiecieÅ”ams (un viegli samazināt tās pēc vajadzÄ«bas).

UzraudzÄ«bas kvalitāte ir ievērojami uzlabota arÄ« ar tādiem rÄ«kiem kā Prometheus, Grafana, Loki, Fluentd un Elasticsearch, kas ļauj centralizēti skatÄ«t visas darba slodzes klasterÄ«. Å odien mēs apskatÄ«sim, kā ieviest Prometheus eksportētāju Java virtuālajā maŔīnā (JVM).

Mērķi

Apskatīsim dažas jomas, kurās varam pielāgot Camunda BPM Docker attēlu (GitHub), lai tas labi mijiedarbotos ar Kubernetes.

  1. Žurnāli un metrika;
  2. Datu bāzu savienojumi;
  3. Autentifikācija;
  4. Sesijas vadība.

Mēs apskatÄ«sim vairākus veidus, kā sasniegt Å”os mērÄ·us, un skaidri parādÄ«sim visu procesu.

PiezÄ«me: Vai izmantojat Enterprise versiju? Skaties Å”eit un pēc vajadzÄ«bas atjauniniet attēlu saites.

Darbplūsmas izstrāde

Å ajā demonstrācijā mēs izmantosim Skaffold, lai izveidotu Docker attēlus, izmantojot Google Cloud Build. Tam ir labs atbalsts dažādiem rÄ«kiem (piemēram, Kustomize un Helm), CI un veidoÅ”anas rÄ«kiem, kā arÄ« infrastruktÅ«ras nodroÅ”inātājiem. Fails skaffold.yaml.tmpl ietver iestatÄ«jumus Google Cloud Build un GKE, nodroÅ”inot ļoti vienkārÅ”u veidu, kā palaist ražoÅ”anas lÄ«meņa infrastruktÅ«ru.

make skaffold ielādēs Dockerfile kontekstu programmā Cloud Build, izveidos attēlu un saglabās to GCR un pēc tam lietos manifestus jūsu klasterim. Tas ir tas, ko tas dara make skaffold, bet Skaffold ir daudz citu funkciju.

Kubernetes yaml veidnēm mēs izmantojam kustomize, lai pārvaldÄ«tu yaml pārklājumus, neatdalot visu manifestu, ļaujot izmantot git pull --rebase turpmākiem uzlabojumiem. Tagad tas ir kubectl un diezgan labi darbojas Ŕādām lietām.

Mēs arÄ« izmantojam envsubst, lai *.yaml.tmpl failos aizpildÄ«tu saimniekdatora nosaukumu un GCP projekta ID. JÅ«s varat redzēt, kā tas darbojas makefile vai vienkārÅ”i turpināt tālāk.

PriekŔnosacījumi

  • Darba klasteris Kubernetes
  • Pielāgot
  • Skaffold - lai izveidotu savus doka attēlus un vienkārÅ”u izvietoÅ”anu GKE
  • Å Ä« koda kopija
  • Envsubst

Darbplūsma, izmantojot manifestus

Ja nevēlaties izmantot kustomize vai skaffold, varat atsaukties uz manifestiem generated-manifest.yaml un pielāgojiet tos jūsu izvēlētajai darbplūsmai.

Žurnāli un metrika

Prometheus ir kļuvis par standartu metrikas apkopoÅ”anai Kubernetes. Tas aizņem tādu paÅ”u niÅ”u kā AWS Cloudwatch Metrics, Cloudwatch Alerts, Stackdriver Metrics, StatsD, Datadog, Nagios, vSphere Metrics un citi. Tas ir atvērts avots, un tam ir spēcÄ«ga vaicājumu valoda. Vizualizāciju uzticēsim Grafana ā€” tam ir liels skaits informācijas paneļu, kas pieejami jau no kastes. Tie ir savienoti viens ar otru un ir salÄ«dzinoÅ”i viegli uzstādāmi prometejs-operators.

Pēc noklusējuma Prometheus izmanto ekstrakcijas modeli <service>/metrics, un Å”im nolÅ«kam tiek pievienoti blakusvāģu konteineri. Diemžēl JMX metriku vislabāk var reÄ£istrēt JVM, tāpēc blakusvāģu konteineri nav tik efektÄ«vi. Savienojamies jmx_exporter atvērtā koda no Prometheus uz JVM, pievienojot to konteinera attēlam, kas nodroÅ”inās ceļu /metrics citā ostā.

Pievienojiet konteineram Prometheus jmx_exporter

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

Nu, tas bija viegli. Eksportētājs uzraudzīs runci un parādīs tā rādītājus Prometheus formātā vietnē <svc>:9404/metrics

Eksportētāja iestatÄ«Å”ana

UzmanÄ«gs lasÄ«tājs var brÄ«nÄ«ties, no kurienes tas nāk prometheus-jmx.yaml? JVM var darboties daudz dažādu lietu, un runcis ir tikai viena no tām, tāpēc eksportētājam ir nepiecieÅ”ama papildu konfigurācija. Ir pieejamas standarta konfigurācijas runcim, wildfly, kafka un tā tālāk Å”eit. Mēs pievienosim runci kā ConfigMap programmā Kubernetes un pēc tam uzstādiet to kā sējumu.

Pirmkārt, mēs pievienojam eksportētāja konfigurācijas failu mūsu platformas/config/ direktorijam

platform/config
ā””ā”€ā”€ prometheus-jmx.yaml

Tad pievienojam ConfigMapGenerator Š² kustomization.yaml.tmpl:

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

Tādējādi tiks pievienots katrs elements files[] kā ConfigMap konfigurācijas elementu. ConfigMapGenerators ir lieliski, jo tie sajauc konfigurācijas datus un piespiež podziņu restartēt, ja tie mainās. Tie arÄ« samazina konfigurācijas apjomu izvietoÅ”anā, jo vienā VolumeMount var pievienot visu konfigurācijas failu "mapi".

Visbeidzot, mums ir jāmontē ConfigMap kā sējums 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
[...]

BrÄ«niŔķīgi. Ja Prometheus nav konfigurēts, lai veiktu pilnÄ«gu tÄ«rÄ«Å”anu, iespējams, jums bÅ«s jāpasaka, lai tas iztÄ«rÄ«tu pākstis. Prometheus Operator lietotāji var izmantot service-monitor.yaml lai sāktu. IzpētÄ«t Service-monitor.yaml, operatora dizains Šø ServiceMonitorSpec pirms sākat.

Šī modeļa paplaŔināŔana uz citiem lietoŔanas gadījumiem

Visi faili, ko pievienojam ConfigMapGenerator, bÅ«s pieejami jaunajā direktorijā /etc/config. Varat paplaÅ”ināt Å”o veidni, lai pievienotu citus nepiecieÅ”amos konfigurācijas failus. Varat pat uzstādÄ«t jaunu starta skriptu. Tu vari izmantot apakÅ”ceļŔ lai uzstādÄ«tu atseviŔķus failus. Lai atjauninātu xml failus, apsveriet iespēju izmantot xmlstarlet sed vietā. Tas jau ir iekļauts attēlā.

Žurnāli

Lieliski jaunumi! Lietojumprogrammu žurnāli jau ir pieejami stdout, piemēram, ar kubectl logs. Fluentd (instalēta pēc noklusējuma GKE) pārsÅ«tÄ«s jÅ«su žurnālus uz Elasticsearch, Loki vai jÅ«su uzņēmuma reÄ£istrÄ“Å”anas platformu. Ja vēlaties izmantot jsonify žurnāliem, varat sekot iepriekÅ” norādÄ«tajai veidnei, lai instalētu logback.

Datu bāze

Pēc noklusējuma attēlam bÅ«s H2 datu bāze. Tas mums nav piemērots, un mēs izmantosim Google Cloud SQL ar Cloud SQL Proxy - tas bÅ«s nepiecieÅ”ams vēlāk, lai atrisinātu iekŔējās problēmas. Å Ä« ir vienkārÅ”a un uzticama iespēja, ja jums nav savas izvēles datu bāzes iestatÄ«Å”anā. AWS RDS nodroÅ”ina lÄ«dzÄ«gu pakalpojumu.

NeatkarÄ«gi no izvēlētās datu bāzes, ja vien tā nav H2, jums bÅ«s jāiestata atbilstoÅ”ie vides mainÄ«gie platform/deploy.yaml. Tas izskatās apmēram Ŕādi:

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

Piezīme: Varat izmantot Kustomize, lai izvietotu to dažādās vidēs, izmantojot pārklājumu: piemērs.

PiezÄ«me: lietojums valueFrom: secretKeyRef. LÅ«dzu, izmantojiet Ŕī Kubernetes funkcija pat izstrādes laikā, lai jÅ«su noslēpumi bÅ«tu droŔībā.

Visticamāk, jums jau ir izvēlēta sistēma Kubernetes noslēpumu pārvaldÄ«bai. Ja nē, Å”eit ir dažas iespējas: Å”ifrējiet tos, izmantojot mākoņa pakalpojumu sniedzēja KMS, un pēc tam ievadiet tos K8S kā noslēpumus, izmantojot kompaktdiska konveijeru. MozillaSOPS - ļoti labi darbosies kombinācijā ar Kustomize noslēpumiem. Ir arÄ« citi rÄ«ki, piemēram, dotGPG, kas veic lÄ«dzÄ«gas funkcijas: HashiCorp Vault, Pielāgojiet slepeno vērtÄ«bu spraudņus.

IekļūŔana

Ja vien neizvēlaties izmantot vietējo portu pāradresāciju, jums bÅ«s nepiecieÅ”ams konfigurēts ieejas kontrolleris. Ja neizmantojat ingress-nginx (StÅ«res diagramma), tad jÅ«s, visticamāk, jau zināt, ka jums ir jāinstalē nepiecieÅ”amās anotācijas ingress-patch.yaml.tmpl vai platform/ingress.yaml. Ja izmantojat ingress-nginx un redzat nginx ievades klasi ar slodzes lÄ«dzsvarotāju, kas norāda uz to, un ārēju DNS vai aizstājējzÄ«mes DNS ierakstu, jums ir labi. Pretējā gadÄ«jumā konfigurējiet ieejas kontrolieri un DNS vai izlaidiet Ŕīs darbÄ«bas un saglabājiet tieÅ”u savienojumu ar podziņu.

TLS

Ja jÅ«s izmantojat sertificēts menedžeris vai kube-lego un letsencrypt - sertifikāti jaunajai pieteikÅ”anās vietai tiks iegÅ«ti automātiski. Pretējā gadÄ«jumā atveriet ingress-patch.yaml.tmpl un pielāgojiet to savām vajadzÄ«bām.

Palaist!

Ja ievērojāt visu iepriekÅ” rakstÄ«to, tad komandu make skaffold HOSTNAME=<you.example.com> vajadzētu palaist pieejamo gadÄ«jumu <hostname>/camunda

Ja neesat iestatījis savu pieteikumvārdu uz publisku URL, varat to novirzīt ar localhost: kubectl port-forward -n camunda-bpm-demo svc/camunda-bpm 8080:8080 par localhost:8080/camunda

Pagaidiet dažas minÅ«tes, lÄ«dz runcis ir pilnÄ«bā gatavs. Cert-manager prasÄ«s kādu laiku, lai pārbaudÄ«tu domēna nosaukumu. Pēc tam varat pārraudzÄ«t žurnālus, izmantojot pieejamos rÄ«kus, piemēram, tādu rÄ«ku kā kubetail, vai vienkārÅ”i izmantojot kubectl:

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

Nākamās darbības

Atļauja

Tas vairāk attiecas uz Camunda BPM konfigurÄ“Å”anu nekā Kubernetes, taču ir svarÄ«gi ņemt vērā, ka pēc noklusējuma autentifikācija REST API ir atspējota. JÅ«s varat iespējot pamata autentifikāciju vai izmantojiet citu metodi, piemēram J.W.T.. Varat izmantot konfigurācijas kartes un sējumus, lai ielādētu xml, vai xmlstarlet (skatiet iepriekÅ”), lai rediģētu attēlā esoÅ”os failus, un izmantot wget vai ielādēt tos, izmantojot sākuma konteineru un koplietotu sējumu.

Sesijas vadība

Tāpat kā daudzas citas lietojumprogrammas, Camunda BPM apstrādā sesijas JVM, tādēļ, ja vēlaties palaist vairākas replikas, varat iespējot lipÄ«gās sesijas (piemēram ingress-nginx), kas pastāvēs, lÄ«dz pazudÄ«s kopija, vai iestatiet sÄ«kfailu atribÅ«tu Max-Age. Lai iegÅ«tu stabilāku risinājumu, varat izvietot sesiju pārvaldnieku Tomcat. Larsam ir atseviŔķs ieraksts par Å”o tēmu, bet kaut kas lÄ«dzÄ«gs:

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

Piezīme: sed vietā varat izmantot xmlstarlet

Mēs izmantojām twemproxy Google Cloud Memorystore priekŔā, ar memcached-session-manager (atbalsta Redis), lai to palaistu.

MērogoÅ”ana

Ja jÅ«s jau saprotat sesijas, pirmais (un bieži vien pēdējais) Camunda BPM mērogoÅ”anas ierobežojums var bÅ«t savienojums ar datu bāzi. Daļēja pielāgoÅ”ana jau ir pieejama "no kastes" Atspējosim arÄ« intialSize failā settings.xml. Pievienot Horizontal Pod Autoscaler (HPA) un jÅ«s varat viegli automātiski mērogot pākstu skaitu.

Pieprasījumi un ierobežojumi

Š’ platform/deployment.yaml JÅ«s redzēsit, ka esam stingri iekodējuÅ”i resursu lauku. Tas labi darbojas ar HPA, taču var bÅ«t nepiecieÅ”ama papildu konfigurācija. Tam ir piemērots kustomize plāksteris. Cm. ingress-patch.yaml.tmpl Šø ./kustomization.yaml.tmpl

secinājums

Tāpēc mēs instalējām Camunda BPM vietnē Kubernetes ar Prometheus metriku, žurnāliem, H2 datu bāzi, TLS un Ingress. Mēs pievienojām jar failus un konfigurācijas failus, izmantojot ConfigMaps un Dockerfile. Mēs runājām par datu apmaiņu ar sējumiem un tieÅ”i uz vides mainÄ«gajiem no noslēpumiem. Turklāt mēs sniedzām pārskatu par Camunda iestatÄ«Å”anu vairākām replikām un autentificētai API.

atsauces

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., tulkojums Raksts Alasters Fērts, Larss Lange

Avots: www.habr.com

Pievieno komentāru