KjÞrer Camunda BPM pÄ Kubernetes

KjÞrer Camunda BPM pÄ Kubernetes

Bruker du Kubernetes? Klar til Ä flytte dine Camunda BPM-forekomster ut av virtuelle maskiner, eller kanskje bare prÞve Ä kjÞre dem pÄ Kubernetes? La oss se pÄ noen vanlige konfigurasjoner og individuelle elementer som kan skreddersys til dine spesifikke behov.

Det forutsetter at du har brukt Kubernetes fÞr. Hvis ikke, hvorfor ikke ta en titt pÄ lederskap og ikke starte din fÞrste klynge?

Forfattere

  • Alastair Firth (Alastair Firth) - Senior Site Reliability Engineer pĂ„ Camunda Cloud-teamet;
  • Lars Lange (Lars Lange) - DevOps-ingeniĂžr hos Camunda.

Kort oppsummert:

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

Ok, det fungerte sannsynligvis ikke fordi du ikke har installert skaffold og kustomize. Vel, les videre!

Hva er Camunda BPM

Camunda BPM er en Äpen kildekodeplattform for forretningsprosessadministrasjon og beslutningsautomatisering som kobler sammen forretningsbrukere og programvareutviklere. Den er ideell for Ä koordinere og koble sammen mennesker, (mikro)tjenester eller til og med roboter! Du kan lese mer om de ulike brukstilfellene pÄ link.

Hvorfor bruke Kubernetes

Kubernetes har blitt de facto standarden for Ä kjÞre moderne applikasjoner i LinuxVed Ä bruke systemkall i stedet for maskinvareemulering og la kjernen administrere minne og oppgavebytte, minimeres oppstartstider. Den stÞrste fordelen kan imidlertid komme fra standard API-et som Kubernetes tilbyr for Ä konfigurere infrastrukturen som trengs av alle applikasjoner: lagring, nettverk og overvÄking. Det feiret sitt seksÄrsjubileum i juni 2020, noe som gjÞr det til kanskje det nest stÞrste Äpen kildekode-prosjektet (etter Linux). Den har nylig aktivt stabilisert funksjonaliteten etter rask iterasjon de siste Ärene, ettersom den blir kritisk for produksjonsarbeidsbelastninger over hele verden.

Camunda BPM Engine kan enkelt koble til andre applikasjoner som kjÞrer pÄ samme klynge, og Kubernetes gir utmerket skalerbarhet, slik at du kun kan Þke infrastrukturkostnadene nÄr det virkelig er nÞdvendig (og enkelt redusere dem etter behov).

Kvaliteten pÄ overvÄking er ogsÄ kraftig forbedret med verktÞy som Prometheus, Grafana, Loki, Fluentd og Elasticsearch, slik at du sentralt kan se alle arbeidsbelastninger i en klynge. I dag skal vi se pÄ hvordan du implementerer Prometheus-eksportÞren i Java Virtual Machine (JVM).

mÄl

La oss se pÄ noen fÄ omrÄder der vi kan tilpasse Camunda BPM Docker-bildet (GitHub) slik at den samhandler godt med Kubernetes.

  1. Logger og beregninger;
  2. Database tilkoblinger;
  3. Autentisering;
  4. Sesjonsledelse.

Vi skal se pÄ flere mÄter Ä nÄ disse mÄlene pÄ og tydelig vise hele prosessen.

Note: Bruker du Enterprise-versjonen? Se her og oppdater bildelenker etter behov.

Arbeidsflytutvikling

I denne demoen vil vi bruke Skaffold til Ä bygge Docker-bilder ved hjelp av Google Cloud Build. Den har god stÞtte for ulike verktÞy (som Kustomize og Helm), CI og byggeverktÞy og infrastrukturleverandÞrer. Fil skaffold.yaml.tmpl inkluderer innstillinger for Google Cloud Build og GKE, som gir en veldig enkel mÄte Ä kjÞre infrastruktur i produksjonsgrad.

make skaffold vil laste Dockerfile-konteksten inn i Cloud Build, bygge bildet og lagre det i GCR, og deretter bruke manifestene pÄ klyngen din. Dette er hva den gjÞr make skaffold, men Skaffold har mange andre funksjoner.

For yaml-maler i Kubernetes bruker vi kustomize for Ă„ administrere yaml-overlegg uten Ă„ forkaste hele manifestet, slik at du kan bruke git pull --rebase for ytterligere forbedringer. NĂ„ er det i kubectl og det fungerer ganske bra for slike ting.

Vi bruker ogsÄ envsubst til Ä fylle ut vertsnavnet og GCP-prosjekt-IDen i *.yaml.tmpl-filene. Du kan se hvordan det fungerer i makefile eller bare fortsett videre.

Forutsetninger

  • Arbeidsklynge Kubernetes
  • Tilpass
  • Skaffold - for Ă„ lage dine egne docker-bilder og enkel distribusjon til GKE
  • Kopi av denne koden
  • Envsubst

Arbeidsflyt ved hjelp av manifester

Hvis du ikke Ăžnsker Ă„ bruke kustomize eller skaffold, kan du henvise til manifestene i generated-manifest.yaml og tilpasse dem til arbeidsflyten du Ăžnsker.

Logger og beregninger

Prometheus har blitt standarden for innsamling av beregninger i Kubernetes. Den har samme nisje som AWS Cloudwatch Metrics, Cloudwatch Alerts, Stackdriver Metrics, StatsD, Datadog, Nagios, vSphere Metrics og andre. Det er Ă„pen kildekode og har et kraftig spĂžrresprĂ„k. Vi overlater visualiseringen til Grafana – den kommer med et stort antall dashbord tilgjengelig rett ut av esken. De er koblet til hverandre og er relativt enkle Ă„ installere med prometheus-operatĂžr.

Som standard bruker Prometheus utvinningsmodellen <service>/metrics, og Ä legge til sidevognsbeholdere for dette er vanlig. Dessverre logges JMX-beregninger best i JVM, sÄ sidevognscontainere er ikke like effektive. La oss koble til jmx_exporter Äpen kildekode fra Prometheus til JVM ved Ä legge den til containerbildet som vil gi banen /metrics pÄ en annen havn.

Legg til Prometheus jmx_exporter i beholderen

-- images/camunda-bpm/Dockerfile
FROM camunda/camunda-bpm-platform:tomcat-7.11.0

## Legg til prometheus-eksportĂžr
KJØR 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 er den reserverte prometheus-jmx-porten
ENV CATALINA_OPTS -javaagent:lib/
jmx_prometheus_javaagent-0.11.0.jar=9404:/etc/config/prometheus-jmx.yaml

Vel, det var lett. EksportÞren vil overvÄke tomcat og vise dens beregninger i Prometheus-format pÄ <svc>:9404/metrics

EksportĂžr oppsett

Den oppmerksomme leseren lurer kanskje pÄ hvor det kom fra prometheus-jmx.yaml? Det er mange forskjellige ting som kan kjÞres i JVM, og tomcat er bare en av dem, sÄ eksportÞren trenger litt ekstra konfigurasjon. Standardkonfigurasjoner for tomcat, wildfly, kafka og sÄ videre er tilgjengelige her. Vi vil legge til tomcat som ConfigMap i Kubernetes og deretter montere den som et volum.

FÞrst legger vi til eksportÞrkonfigurasjonsfilen til vÄr plattform/config/-katalog

platform/config
└── prometheus-jmx.yaml

SĂ„ legger vi til ConfigMapGenerator ĐČ kustomization.yaml.tmpl:

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

Dette vil legge til hvert element files[] som et ConfigMap-konfigurasjonselement. ConfigMapGenerators er gode fordi de hash konfigurasjonsdataene og tvinger en pod omstart hvis den endres. De reduserer ogsÄ mengden konfigurasjon i Deployment siden du kan montere en hel "mappe" med konfigurasjonsfiler i ett VolumeMount.

Til slutt mÄ vi montere ConfigMap som et volum til poden:

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

Herlig. Hvis Prometheus ikke er konfigurert til Ä gjÞre en fullstendig opprydding, mÄ du kanskje be den rydde opp i podene. Prometheus Operator-brukere kan bruke service-monitor.yaml for Ä komme i gang. Utforske Service-monitor.yaml, operatÞrdesign О ServiceMonitorSpec fÞr du begynner.

Utvide dette mĂžnsteret til andre brukstilfeller

Alle filer vi legger til i ConfigMapGenerator vil vĂŠre tilgjengelige i den nye katalogen /etc/config. Du kan utvide denne malen til Ă„ montere alle andre konfigurasjonsfiler du trenger. Du kan til og med montere et nytt oppstartsskript. Du kan bruke underbane for Ă„ montere individuelle filer. For Ă„ oppdatere xml-filer, vurder Ă„ bruke xmlstarlet i stedet for sed. Den er allerede inkludert i bildet.

Magasiner

Gode ​​nyheter! Applikasjonslogger er allerede tilgjengelig pĂ„ stdout, for eksempel med kubectl logs. Fluentd (installert som standard i GKE) vil videresende loggene dine til Elasticsearch, Loki eller bedriftens loggingsplattform. Hvis du vil bruke jsonify for logger, kan du fĂžlge malen ovenfor for Ă„ installere tilbakekobling.

Database

Som standard vil bildet ha en H2-database. Dette passer ikke for oss, og vi vil bruke Google Cloud SQL med Cloud SQL Proxy – dette vil vĂŠre nĂždvendig senere for Ă„ lĂžse interne problemer. Dette er et enkelt og pĂ„litelig alternativ hvis du ikke har dine egne preferanser for Ă„ sette opp databasen. AWS RDS tilbyr en lignende tjeneste.

Uansett hvilken database du velger, med mindre det er H2, mÄ du angi de riktige miljÞvariablene i platform/deploy.yaml. Det ser omtrent slik ut:

-- 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: Du kan bruke Kustomize til Ă„ distribuere til forskjellige miljĂžer ved Ă„ bruke et overlegg: eksempel.

Note: bruk valueFrom: secretKeyRef. Vennligst bruk denne Kubernetes-funksjonen selv under utvikling for Ă„ holde hemmelighetene dine trygge.

Det er sannsynlig at du allerede har et foretrukket system for Ă„ administrere Kubernetes-hemmeligheter. Hvis ikke, her er noen alternativer: Kryptere dem med nettskyleverandĂžrens KMS og injisere dem i K8S som hemmeligheter via CD-rĂžrledningen − Mozilla SOPS - vil fungere veldig bra i kombinasjon med Kustomize-hemmeligheter. Det er andre verktĂžy, for eksempel dotGPG, som utfĂžrer lignende funksjoner: HashiCorp hvelv, Tilpass hemmelig verdi-plugins.

Ingress

Med mindre du velger Ä bruke lokal portvideresending, trenger du en konfigurert Ingress Controller. Hvis du ikke bruker ingress-nginx (Hjelmdiagram) sÄ vet du mest sannsynlig allerede at du mÄ installere de nÞdvendige merknadene i ingress-patch.yaml.tmpl eller platform/ingress.yaml. Hvis du bruker ingress-nginx og ser en nginx ingress-klasse med en lastbalanser som peker pÄ den og en ekstern DNS- eller wildcard-DNS-oppfÞring, er du klar. Ellers kan du konfigurere Ingress Controller og DNS, eller hoppe over disse trinnene og beholde den direkte forbindelsen til poden.

TLS

Hvis du bruker cert-leder eller kube-lego og letsencrypt - sertifikater for den nye pÄloggingen hentes automatisk. Ellers Äpne ingress-patch.yaml.tmpl og tilpasse den til dine behov.

Lansering!

Hvis du fulgte alt skrevet ovenfor, sÄ kommandoen make skaffold HOSTNAME=<you.example.com> bÞr starte en tilgjengelig instans i <hostname>/camunda

Hvis du ikke har satt pÄloggingen til en offentlig URL, kan du omdirigere den med localhost: kubectl port-forward -n camunda-bpm-demo svc/camunda-bpm 8080:8080 pÄ localhost:8080/camunda

Vent noen minutter til tomcat er helt klar. Cert-manager vil bruke litt tid pÄ Ä bekrefte domenenavnet. Du kan deretter overvÄke loggene ved Ä bruke tilgjengelige verktÞy som et verktÞy som kubetail, eller ganske enkelt bruke kubectl:

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

De neste trinnene

Autorisasjon

Dette er mer relevant for Ă„ konfigurere Camunda BPM enn Kubernetes, men det er viktig Ă„ merke seg at som standard er autentisering deaktivert i REST API. Du kan aktivere grunnleggende autentisering eller bruk en annen metode som J.W.T.. Du kan bruke configmaps og volumer for Ă„ laste xml, eller xmlstarlet (se ovenfor) for Ă„ redigere eksisterende filer i bildet, og enten bruke wget eller laste dem ved hjelp av en init-beholder og et delt volum.

Sesjonsledelse

Som mange andre applikasjoner hÄndterer Camunda BPM Þkter i JVM, sÄ hvis du vil kjÞre flere replikaer, kan du aktivere klissete Þkter (for eksempel for ingress-nginx), som vil eksistere til replikaen forsvinner, eller angi Max-Age-attributtet for informasjonskapsler. For en mer robust lÞsning kan du distribuere Session Manager i Tomcat. Lars har eget innlegg om dette emnet, men noe sÄnt som:

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 '/^ /jeg
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="redis://redis-proxy.db:22121"
klebrig="usann"
sessionBackupAsync="usann"
storageKeyPrefix="kontekst"
lÄsemodus="auto"
/>' conf/context.xml

Note: du kan bruke xmlstarlet i stedet for sed

Vi brukte twemproxy foran Google Cloud Memorystore, med memcached-session-manager (stĂžtter Redis) for Ă„ kjĂžre den.

skalering

Hvis du allerede forstÄr Þkter, kan den fÞrste (og ofte den siste) begrensningen for Ä skalere Camunda BPM vÊre forbindelsen til databasen. Delvis tilpasning er allerede tilgjengelig "fra esken" La oss ogsÄ deaktivere intialSize i filen settings.xml. Legg til Horisontal Pod Autoscaler (HPA) og du kan enkelt automatisk skalere antall pods.

ForespĂžrsler og begrensninger

В platform/deployment.yaml Du vil se at vi har hardkodet ressursfeltet. Dette fungerer bra med HPA, men kan kreve ytterligere konfigurasjon. Kutomize-lappen er egnet for dette. Cm. ingress-patch.yaml.tmpl о ./kustomization.yaml.tmpl

Utgang

SÄ vi installerte Camunda BPM pÄ Kubernetes med Prometheus-mÄlinger, logger, H2-database, TLS og Ingress. Vi la til jar-filer og konfigurasjonsfiler ved Ä bruke ConfigMaps og Dockerfile. Vi snakket om Ä utveksle data til volumer og direkte til miljÞvariabler fra hemmeligheter. I tillegg ga vi en oversikt over oppsett av Camunda for flere replikaer og en autentisert API.

referanser

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, oversettelse artikler Alastair Firth, Lars Lange

Kilde: www.habr.com

KjĂžp pĂ„litelig hosting for nettsteder med DDoS-beskyttelse, VPS VDS-servere đŸ”„ KjĂžp pĂ„litelig webhotell med DDoS-beskyttelse, VPS VDS-servere | ProHoster