
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Ä og ikke starte din fÞrste klynge?
Forfattere
- (Alastair Firth) - Senior Site Reliability Engineer pÄ Camunda Cloud-teamet;
- (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Ä .
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 () slik at den samhandler godt med Kubernetes.
- Logger og beregninger;
- Database tilkoblinger;
- Autentisering;
- Sesjonsledelse.
Vi skal se pÄ flere mÄter Ä nÄ disse mÄlene pÄ og tydelig vise hele prosessen.
Note: Bruker du Enterprise-versjonen? Se 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
- - 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 .
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 Ä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 . Vi vil legge til tomcat som 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 ĐČ 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, О 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 for Ă„ montere individuelle filer. For Ă„ oppdatere xml-filer, vurder Ă„ bruke 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 .
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: .
Note: bruk valueFrom: secretKeyRef. Vennligst bruk 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 â - vil fungere veldig bra i kombinasjon med Kustomize-hemmeligheter. Det er andre verktĂžy, for eksempel dotGPG, som utfĂžrer lignende funksjoner: , .
Ingress
Med mindre du velger Ä bruke lokal portvideresending, trenger du en konfigurert Ingress Controller. Hvis du ikke bruker () 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 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 eller bruk en annen metode som . 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 (), 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 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 foran Google Cloud Memorystore, med (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 "" La oss ogsÄ deaktivere intialSize i filen settings.xml. Legg til 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 Alastair Firth, Lars Lange
Kilde: www.habr.com
