KÞrer Camunda BPM pÄ Kubernetes

KÞrer Camunda BPM pÄ Kubernetes

Bruger du Kubernetes? Klar til at flytte dine Camunda BPM-instanser ud af virtuelle maskiner, eller mÄske bare prÞve at kÞre dem pÄ Kubernetes? Lad os se pÄ nogle almindelige konfigurationer og individuelle elementer, der kan skrÊddersyes til dine specifikke behov.

Det forudsÊtter, at du har brugt Kubernetes fÞr. Hvis ikke, hvorfor sÄ ikke tage et kig pÄ lederskab 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 sagt:

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

Okay, det virkede nok ikke, fordi du ikke har skaffold og kustomize installeret. SĂ„ lĂŠs videre!

Hvad er Camunda BPM

Camunda BPM er en open source platform til forretningsprocesstyring og beslutningsautomatisering, der forbinder forretningsbrugere og softwareudviklere. Den er ideel til at koordinere og forbinde mennesker, (mikro)tjenester eller endda bots! Du kan lÊse mere om de forskellige use cases pÄ link.

Hvorfor bruge Kubernetes

Kubernetes er blevet de facto standarden for at kÞre moderne applikationer i LinuxVed at bruge systemkald i stedet for hardwareemulering og lade kernen styre hukommelse og opgaveskift, minimeres opstarts- og opstartstider. Den stÞrste fordel kan dog komme fra den standard-API, som Kubernetes leverer til konfiguration af den infrastruktur, der er nÞdvendig for alle applikationer: lagring, netvÊrk og overvÄgning. Det fejrede sit seksÄrsjubilÊum i juni 2020, hvilket gÞr det til mÄske det nÊststÞrste open source-projekt (efter LinuxDen har for nylig aktivt stabiliseret sin funktionalitet efter hurtig iteration i lÞbet af de seneste par Är, da den bliver kritisk for produktionsbelastninger over hele verden.

Camunda BPM Engine kan nemt oprette forbindelse til andre applikationer, der kÞrer pÄ den samme klynge, og Kubernetes giver fremragende skalerbarhed, sÄ du kun kan Þge infrastrukturomkostningerne, nÄr det virkelig er nÞdvendigt (og nemt reducere dem efter behov).

Kvaliteten af ​​overvĂ„gningen er ogsĂ„ vĂŠsentligt forbedret med vĂŠrktĂžjer som Prometheus, Grafana, Loki, Fluentd og Elasticsearch, hvilket giver dig mulighed for centralt at se alle arbejdsbelastninger i en klynge. I dag skal vi se pĂ„, hvordan man implementerer Prometheus-eksportĂžren i Java Virtual Machine (JVM).

mÄl

Lad os se pÄ et par omrÄder, hvor vi kan tilpasse Camunda BPM Docker-billedet (github), sÄ den interagerer godt med Kubernetes.

  1. Logfiler og metrikker;
  2. Databaseforbindelser;
  3. Godkendelse;
  4. Sessionsledelse.

Vi vil se pÄ flere mÄder at nÄ disse mÄl pÄ og tydeligt vise hele processen.

BemĂŠrk: Bruger du Enterprise-versionen? Se her og opdatere billedlinks efter behov.

Udvikling af arbejdsgange

I denne demo vil vi bruge Skaffold til at bygge Docker-billeder ved hjÊlp af Google Cloud Build. Det har god understÞttelse af forskellige vÊrktÞjer (sÄsom Kustomize og Helm), CI og build-vÊrktÞjer og infrastrukturudbydere. Fil skaffold.yaml.tmpl inkluderer indstillinger for Google Cloud Build og GKE, hvilket giver en meget enkel mÄde at kÞre produktionskvalitetsinfrastruktur pÄ.

make skaffold vil indlÊse Dockerfile-konteksten i Cloud Build, bygge billedet og gemme det i GCR og derefter anvende manifesterne pÄ din klynge. Dette er, hvad det gÞr make skaffold, men Skaffold har mange andre funktioner.

Til yaml-skabeloner i Kubernetes bruger vi kustomize til at administrere yaml-overlejringer uden at forgrene hele manifestet, sÄ du kan bruge git pull --rebase for yderligere forbedringer. Nu er det i kubectl, og det fungerer ret godt til sÄdanne ting.

Vi bruger ogsÄ envsubst til at udfylde vÊrtsnavnet og GCP-projekt-id'et i *.yaml.tmpl-filerne. Du kan se, hvordan det fungerer i makefile eller bare fortsÊt videre.

ForudsĂŠtninger

  • Arbejdsklynge Kubernetes
  • Tilpas
  • Skaffold - til at oprette dine egne docker-billeder og nem implementering til GKE
  • Kopi af denne kode
  • Envsubst

Workflow ved hjĂŠlp af manifester

Hvis du ikke Ăžnsker at bruge kustomize eller skaffold, kan du henvise til manifesterne i generated-manifest.yaml og tilpasse dem til den arbejdsgang, du vĂŠlger.

Logfiler og metrikker

Prometheus er blevet standarden for indsamling af metrics i Kubernetes. Det indtager samme niche som AWS Cloudwatch Metrics, Cloudwatch Alerts, Stackdriver Metrics, StatsD, Datadog, Nagios, vSphere Metrics og andre. Det er open source og har et kraftfuldt forespĂžrgselssprog. Vi overlader visualiseringen til Grafana - den kommer med et stort antal dashboards, der er tilgĂŠngelige direkte fra kassen. De er forbundet med hinanden og er forholdsvis nemme at installere med prometheus-operatĂžr.

Som standard bruger Prometheus ekstraktionsmodellen <service>/metrics, og det er almindeligt at tilfÞje sidevognsbeholdere til dette. DesvÊrre logges JMX-metrics bedst i JVM, sÄ sidevognscontainere er ikke sÄ effektive. Lad os forbinde jmx_eksportÞr open source fra Prometheus til JVM ved at fÞje det til containerbilledet, som vil give stien /metrics pÄ en anden havn.

TilfĂžj Prometheus jmx_exporter til containeren

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

## TilfĂžj prometheus-eksportĂžr
KØ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 reserverede prometheus-jmx-port
ENV CATALINA_OPTS -javaagent:lib/
jmx_prometheus_javaagent-0.11.0.jar=9404:/etc/config/prometheus-jmx.yaml

NÄ, det var nemt. EksportÞren vil overvÄge tomcat og vise dens metrics i Prometheus-format pÄ <svc>:9404/metrics

EksportĂžr opsĂŠtning

Den opmĂŠrksomme lĂŠser kan undre sig over, hvor det kom fra prometheus-jmx.yaml? Der er mange forskellige ting, der kan kĂžre i JVM, og tomcat er kun en af ​​dem, sĂ„ eksportĂžren har brug for noget ekstra konfiguration. Standardkonfigurationer til tomcat, wildfly, kafka og sĂ„ videre er tilgĂŠngelige her. Vi tilfĂžjer tomcat som ConfigMap i Kubernetes og derefter montere den som et volumen.

FĂžrst tilfĂžjer vi eksportĂžrens konfigurationsfil til vores platform/config/ bibliotek

platform/config
└── prometheus-jmx.yaml

SĂ„ tilfĂžjer vi 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 tilfĂžje hvert element files[] som et ConfigMap-konfigurationselement. ConfigMapGenerators er fantastiske, fordi de hash konfigurationsdataene og tvinger en pod-genstart, hvis den ĂŠndrer sig. De reducerer ogsĂ„ mĂŠngden af ​​konfiguration i Deployment, da du kan montere en hel "mappe" af konfigurationsfiler i Ă©n VolumeMount.

Til sidst skal vi montere ConfigMap som en volumen 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
[...]

Vidunderlig. Hvis Prometheus ikke er konfigureret til at foretage en fuldstĂŠndig oprydning, skal du muligvis bede den om at rydde op i bĂŠlgerne. Prometheus Operator-brugere kan bruge service-monitor.yaml at komme i gang. Udforske Service-monitor.yaml, operatĂžrdesign Đž ServiceMonitorSpec fĂžr du starter.

Udvidelse af dette mĂžnster til andre use cases

Alle filer, vi tilfĂžjer til ConfigMapGenerator, vil vĂŠre tilgĂŠngelige i den nye mappe /etc/config. Du kan udvide denne skabelon til at montere andre konfigurationsfiler, du har brug for. Du kan endda montere et nyt opstartsscript. Du kan bruge understi at montere individuelle filer. For at opdatere xml-filer, overvej at bruge xmlstarlet i stedet for sed. Det er allerede inkluderet i billedet.

Magasiner

Gode ​​nyheder! Applikationslogs er allerede tilgĂŠngelige pĂ„ stdout, for eksempel med kubectl logs. Fluentd (installeret som standard i GKE) vil videresende dine logfiler til Elasticsearch, Loki eller din virksomheds logplatform. Hvis du vil bruge jsonify til logfiler, kan du fĂžlge ovenstĂ„ende skabelon for at installere log tilbage.

database

Som standard vil billedet have en H2-database. Dette er ikke egnet for os, og vi vil bruge Google Cloud SQL med Cloud SQL Proxy - dette vil vÊre nÞdvendigt senere for at lÞse interne problemer. Dette er en enkel og pÄlidelig mulighed, hvis du ikke har dine egne prÊferencer i opsÊtning af databasen. AWS RDS leverer en lignende service.

Uanset hvilken database du vÊlger, medmindre det er H2, skal du indstille de relevante miljÞvariabler i platform/deploy.yaml. Det ser sÄdan ud:

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

BemĂŠrk: Du kan bruge Kustomize til at implementere til forskellige miljĂžer ved hjĂŠlp af et overlay: eksempel.

BemĂŠrk: brug valueFrom: secretKeyRef. Brug venligst denne Kubernetes-funktion selv under udvikling for at holde dine hemmeligheder sikre.

Det er sandsynligt, at du allerede har et foretrukket system til at administrere Kubernetes-hemmeligheder. Hvis ikke, her er nogle muligheder: Kryptering af dem med din cloud-udbyders KMS og derefter injicere dem i K8S som hemmeligheder via CD-pipeline − MozillaSOPS - vil fungere meget godt i kombination med Kustomize-hemmeligheder. Der er andre vĂŠrktĂžjer, sĂ„som dotGPG, der udfĂžrer lignende funktioner: HashiCorp Vault, Tilpas hemmelige vĂŠrdi-plugins.

Ingress

Medmindre du vÊlger at bruge lokal portvideresendelse, skal du bruge en konfigureret Ingress Controller. Hvis du ikke bruger ingress-nginx (Hjelmdiagram) sÄ ved du hÞjst sandsynligt allerede, at du skal installere de nÞdvendige annoteringer i ingress-patch.yaml.tmpl eller platform/ingress.yaml. Hvis du bruger ingress-nginx og ser en nginx ingress-klasse med en load balancer, der peger pÄ den, og en ekstern DNS eller wildcard DNS-indgang, er du god til at gÄ. Ellers skal du konfigurere Ingress Controller og DNS, eller springe disse trin over og bevare den direkte forbindelse til poden.

TLS

Hvis du bruger cert-manager eller kube-lego og letsencrypt - certifikater til det nye login vil blive hentet automatisk. Ellers Äben ingress-patch.yaml.tmpl og skrÊddersy den, sÄ den passer til dine behov.

Lancering!

Hvis du fulgte alt skrevet ovenfor, sÄ kommandoen make skaffold HOSTNAME=<you.example.com> skal starte en tilgÊngelig instans i <hostname>/camunda

Hvis du ikke har indstillet dit login til en offentlig URL, kan du omdirigere det med localhost: kubectl port-forward -n camunda-bpm-demo svc/camunda-bpm 8080:8080 pÄ localhost:8080/camunda

Vent et par minutter, indtil tomcat er helt klar. Cert-manager vil bruge lidt tid pÄ at bekrÊfte domÊnenavnet. Du kan derefter overvÄge logfilerne ved hjÊlp af tilgÊngelige vÊrktÞjer sÄsom et vÊrktÞj som kubetail, eller blot ved at bruge kubectl:

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

NĂŠste trin

Tilladelse

Dette er mere relevant for konfiguration af Camunda BPM end Kubernetes, men det er vigtigt at bemĂŠrke, at godkendelse som standard er deaktiveret i REST API. Du kan aktivere grundlĂŠggende godkendelse eller brug en anden metode som f.eks J.W.T.. Du kan bruge configmaps og volumener til at indlĂŠse xml, eller xmlstarlet (se ovenfor) til at redigere eksisterende filer i billedet, og enten bruge wget eller indlĂŠse dem ved hjĂŠlp af en init-beholder og en delt volumen.

Sessionsledelse

Som mange andre applikationer hÄndterer Camunda BPM sessioner i JVM, sÄ hvis du vil kÞre flere replikaer, kan du aktivere sticky sessioner (for eksempel for ingress-nginx), som vil eksistere, indtil replikaen forsvinder, eller indstil Max-Age-attributten for cookies. For en mere robust lÞsning kan du implementere Session Manager i Tomcat. Lars har separat indlÊg om dette emne, men noget 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"
klistret="falsk"
sessionBackupAsync="falsk"
storageKeyPrefix="kontekst"
lÄsetilstand="auto"
/>' conf/kontekst.xml

BemĂŠrk: du kan bruge xmlstarlet i stedet for sed

Vi brugte twemproxy foran Google Cloud Memorystore, med memcached-session-manager (understĂžtter Redis) for at kĂžre det.

Skalering

Hvis du allerede forstÄr sessioner, sÄ kan den fÞrste (og ofte den sidste) begrÊnsning til at skalere Camunda BPM vÊre forbindelsen til databasen. Delvis tilpasning er allerede tilgÊngelig "fra kassen" Lad os ogsÄ deaktivere intialSize i filen settings.xml. TilfÞje Horisontal Pod Autoscaler (HPA) og du kan nemt automatisk skalere antallet af pods.

Anmodninger og begrĂŠnsninger

В platform/deployment.yaml Du vil se, at vi har hĂ„rdkodet ressourcefeltet. Dette fungerer godt med HPA, men kan krĂŠve yderligere konfiguration. Kutomize-plasteret er velegnet til dette. Cm. ingress-patch.yaml.tmpl Đž ./kustomization.yaml.tmpl

Output

SÄ vi installerede Camunda BPM pÄ Kubernetes med Prometheus-metrics, logs, H2-database, TLS og Ingress. Vi tilfÞjede jar-filer og konfigurationsfiler ved hjÊlp af ConfigMaps og Dockerfile. Vi talte om at udveksle data til volumener og direkte til miljÞvariabler fra hemmeligheder. Derudover gav vi en oversigt over opsÊtning af Camunda til flere replikaer og en autentificeret API.

RЎSЃS <P "RєRё

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, oversĂŠttelse Artikel Alastair Firth, Lars Lange

Kilde: www.habr.com

KĂžb pĂ„lidelig hosting til websteder med DDoS-beskyttelse, VPS VDS-servere đŸ”„ KĂžb pĂ„lidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster