
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Ä 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 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Ä .
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 (), sÄ den interagerer godt med Kubernetes.
- Logfiler og metrikker;
- Databaseforbindelser;
- Godkendelse;
- 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 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
- - 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 .
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 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 . Vi tilfĂžjer tomcat som 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 ĐČ 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, Đž 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 at montere individuelle filer. For at opdatere xml-filer, overvej at bruge 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 .
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: .
BemĂŠrk: brug valueFrom: secretKeyRef. Brug venligst 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 â - vil fungere meget godt i kombination med Kustomize-hemmeligheder. Der er andre vĂŠrktĂžjer, sĂ„som dotGPG, der udfĂžrer lignende funktioner: , .
Ingress
Medmindre du vÊlger at bruge lokal portvideresendelse, skal du bruge en konfigureret Ingress Controller. Hvis du ikke bruger () 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 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 eller brug en anden metode som f.eks . 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 (), 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 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 foran Google Cloud Memorystore, med (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 "" Lad os ogsÄ deaktivere intialSize i filen settings.xml. TilfÞje 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 Alastair Firth, Lars Lange
Kilde: www.habr.com
