Körning av Camunda BPM i Kubernetes

Körning av Camunda BPM i Kubernetes

AnvĂ€nder du Kubernetes? Är du redo att flytta dina Camunda BPM-instanser frĂ„n virtuella maskiner, eller kanske bara testa att köra dem pĂ„ Kubernetes? LĂ„t oss titta pĂ„ nĂ„gra vanliga konfigurationer och delar som kan anpassas till dina specifika behov.

Det förutsÀtts att du redan har anvÀnt Kubernetes tidigare. Om inte, varför inte kolla in en guide och sÀtta igÄng med din första kluster?

Författare

  • Alastair Firth Ă€r site reliability engineer i Camunda Cloud-teamet;
  • Lars Lange Ă€r DevOps-ingenjör pĂ„ Camunda.

Kort sagt:

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

Sannolikt funkade det inte eftersom du inte har skaffat skaffold och kustomize. SÄ lÀs vidare!

Vad Àr Camunda BPM

Camunda BPM Àr en öppen kÀllkodsplattform för affÀrsprocesshantering och automatisering av beslutsfattande, som förenar affÀrsanvÀndare och programvaruutvecklare. Den Àr perfekt för att koordinera och förena mÀnniskor, (mikro) tjÀnster eller till och med bottar! LÀs mer om olika anvÀndningsfall pÄ lÀnken.

Varför anvÀnda Kubernetes

Kubernetes har blivit de facto-standarden för att köra moderna applikationer i Linux. Genom att anvÀnda systemanrop istÀllet för hÄrdvaruemulering och möjligheterna i kÀrnan att hantera minne och processvÀxling minimeras bÄde uppstartstid och drifttid. Det största fördelen Àr dock det standardiserade API som Kubernetes tillhandahÄller för att konfigurera den infrastruktur som alla applikationer behöver: lagring, nÀtverk och övervakning. I juni 2020 firade det 6 Är och det Àr förmodligen det nÀst största projektet med öppen kÀllkod (efter Linux). PÄ senare tid har det stabiliserat sin funktionalitet efter snabba iterationer under de senaste Ären, dÄ detta blir kritiskt för produktionsbelastningar vÀrlden över.

Camunda BPM-motorn kan enkelt kopplas till andra applikationer som körs i samma kluster, och Kubernetes ger utmÀrkt skalbarhet, vilket möjliggör för att öka kostnaderna för infrastrukturen endast nÀr det verkligen behövs (och enkelt minska dem vid behov).

Kvaliteten pÄ övervakningen förbÀttras ocksÄ av verktyg som Prometheus, Grafana, Loki, Fluentd och Elasticsearch, som möjliggör centraliserad visning av alla arbetsbelastningar i klustret. Idag kommer vi att titta pÄ hur man implementerar en Prometheus-exportör i en Java-virtuell maskin (JVM).

MÄlsÀttningar

LÄt oss titta pÄ nÄgra omrÄden dÀr vi kan konfigurera Docker-bilden för Camunda BPM (github), sÄ att den fungerar bra med Kubernetes.

  1. Loggar och metrik;
  2. Databasanslutningar;
  3. Autentisering;
  4. Sessionhantering.

Vi kommer att utforska flera sÀtt att uppnÄ dessa mÄl och visa hela processen visuellt.

AnmÀrkning: AnvÀnder du Enterprise-versionen? Titta pÄ hÀr och uppdatera lÀnkarna till bilder vid behov.

Utveckling av arbetsflöde

I denna demonstration kommer vi att anvÀnda Skaffold för att bygga Docker-bilder med hjÀlp av Google Cloud Build. Det har bra stöd för olika verktyg (sÄsom Kustomize och Helm), CI och byggverktyg samt infrastruktursleverantörer. Filen skaffold.yaml.tmpl innehÄller instÀllningar för Google Cloud Build och GKE, vilket innebÀr ett mycket enkelt sÀtt att köra industriell infrastruktur.

make skaffold laddar Dockerfile-kontexten till Cloud Build, skapar en bild och sparar den i GCR, och tillÀmpar sedan manifesterna pÄ ditt kluster. Det Àr vad make skaffoldgör, men Skaffold har mÄnga andra funktioner.

För yaml-mallar i Kubernetes anvÀnder vi kustomize för att hantera yaml-overlays utan att behöva grena hela manifestet, vilket gör att du kan anvÀnda git pull --rebase för ytterligare förbÀttringar. Det nu i kubectl och fungerar ganska bra för sÄdana saker.

Vi anvÀnder ocksÄ envsubst för att fylla i vÀrdnamnet och GCP-projektets ID i filerna * .yaml.tmpl. Du kan se hur det fungerar i makefile eller bara fortsÀtta vidare.

NödvÀndiga förutsÀttningar

  • Arbetskluster Kubernetes
  • Kustomize
  • Skaffold — för att skapa egna docker-bilder och enkelt distribuera i GKE
  • En kopia av denna kod
  • Envsubst

Arbetsflöde med hjÀlp av manifester

Om du inte vill anvÀnda kustomize eller skaffold kan du hÀnvisa till manifesten i generated-manifest.yaml och anpassa dem till det arbetsflöde du vÀljer.

Loggar och metrik

Prometheus har blivit standard för insamling av metrik i Kubernetes. Det tar en liknande plats som AWS Cloudwatch Metrics, Cloudwatch Alerts, Stackdriver Metrics, StatsD, Datadog, Nagios, vSphere Metrics och andra. Det har öppen kĂ€llkod och ett kraftfullt frĂ„gesprĂ„k. Vi överlĂ„ter visualiseringen till Grafana – den levereras med ett stort antal fĂ€rdiga instrumentpaneler. Dessa Ă€r kopplade till varandra och relativt enkla att installera. prometheus-operator.

Som standard anvÀnder Prometheus en uthÀmtningsmodell /metrics, och att lÀgga till sidecar-containrar för detta Àr nÄgot vanligt. TyvÀrr registreras JMX-metrik bÀst inuti JVM, sÄ sidecar-containrar Àr inte lika effektiva. LÄt oss ansluta jmx_exporter öppen kÀllkod frÄn Prometheus till JVM genom att lÀgga till den i containerns bild, vilket ger en vÀg /metrics pÄ en annan port.

LĂ€gg till Prometheus jmx_exporter i containern

-- images/camunda-bpm/Dockerfile
FRÅN 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

NÄvÀl, det var enkelt. Exportören kommer att övervaka tomcat och visa dess metrik i Prometheus-format pÄ adressen :9404/metrics

Konfiguration av exportören

Den uppmĂ€rksamma lĂ€saren kan frĂ„ga sig varifrĂ„n prometheus-jmx.yaml? ĐĄŃƒŃ‰Đ”ŃŃ‚ĐČŃƒĐ”Ń‚ ĐŒĐœĐŸĐłĐŸ Ń€Đ°Đ·ĐœŃ‹Ń… ĐČДщДĐč, ĐșĐŸŃ‚ĐŸŃ€Ń‹Đ” ĐŒĐŸĐłŃƒŃ‚ Ń€Đ°Đ±ĐŸŃ‚Đ°Ń‚ŃŒ ĐČ JVM, Đž tomcat — ŃŃ‚ĐŸ Ń‚ĐŸĐ»ŃŒĐșĐŸ ĐŸĐŽĐœĐ° Оз ĐœĐžŃ…, ĐżĐŸŃŃ‚ĐŸĐŒŃƒ эĐșŃĐżĐŸŃ€Ń‚Đ”Ń€ ĐœŃƒĐ¶ĐŽĐ°Đ”Ń‚ŃŃ ĐČ ĐœĐ”ĐșĐŸŃ‚ĐŸŃ€ĐŸĐč ĐŽĐŸĐżĐŸĐ»ĐœĐžŃ‚Đ”Đ»ŃŒĐœĐŸĐč ĐœĐ°ŃŃ‚Ń€ĐŸĐčĐșĐ”. ĐĄŃ‚Đ°ĐœĐŽĐ°Ń€Ń‚ĐœŃ‹Đ” ĐșĐŸĐœŃ„ĐžĐłŃƒŃ€Đ°Ń†ĐžĐž ĐŽĐ»Ń tomcat, wildfly, kafka Đž таĐș ЎалДД ĐŽĐŸŃŃ‚ŃƒĐżĐœŃ‹ hĂ€rkommer. Vi kommer att lĂ€gga till tomcat som ConfigMap i Kubernetes, och sedan montera det som en volym.

Först lÀgger vi till exportörens konfigurationsfil i vÄr katalog platform/config/

plattform/config
└── prometheus-jmx.yaml

DÀrefter lÀgger vi till ConfigMapGenerator pÄ kustomization.yaml.tmpl:

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

Detta kommer att lÀgga till varje element files[] som en konfigurationspost i ConfigMap. ConfigMapGenerators Àr bra eftersom de hash-kodifierar konfigurationsdata och initierar en omstart av podden om den Àndras. De minskar ocksÄ volymen av konfigurationer i Deployment, eftersom du kan montera hela "mappen" av konfigurationsfiler i en och samma VolumeMount.

Slutligen behöver vi montera ConfigMap som en volym till podden:

-- plattform/deployment.yaml
apiVersion: apps/v1
typ: Distribution
[...]
specifikation:
mall:
specifikation:
[...]
volymer:
- name: config
konfigurationsKarta:
namn: konfiguration
standardlÀge: 0744
containrar:
- namn: camunda-bpm
volymMontering:
- monteringsvÀg: /etc/config/
namn: konfiguration
[...]

Perfekt. Om Prometheus inte Àr instÀllt för att rensa helt kanske du behöver be den att rensa poddar. AnvÀndare av Prometheus Operator kan anvÀnda service-monitor.yaml för att komma igÄng. Granska Service-monitor.yaml, operator design och ServiceMonitorSpec innan du gÄr vidare.

Spridningen av denna mall till andra anvÀndningsfall

Alla filer som vi lÀgger till i ConfigMapGenerator kommer att vara tillgÀngliga i den nya katalogen. /etc/config. Du kan utöka denna mall för att montera andra nödvÀndiga konfigurationsfiler. Du kan till och med montera ett nytt startskript. Du kan anvÀnda subPath för att montera enskilda filer. För att uppdatera xml-filer, övervÀg att anvÀnda xmlstarlet istÀllet för sed. Det ingÄr redan i bilden.

Loggar

Bra nyheter! Applikationsloggar finns redan tillgÀngliga pÄ stdout, till exempel med hjÀlp av kubectl logs. Fluentd (det Àr förinstallerat i GKE) vidarebefordrar dina loggar till Elasticsearch, Loki eller din företagsloggningsplattform. Om du vill anvÀnda jsonify för loggar kan du följa ovanstÄende mall för installation logback.

Databas

Som standard kommer bilden att ha en H2-databas. Det passar oss inte, och vi kommer att anvĂ€nda Google Cloud SQL med Cloud SQL Proxy — det behövs senare för att lösa interna uppgifter. Det Ă€r ett enkelt och tillförlitligt alternativ om du inte har egna preferenser för databasinstĂ€llningar. AWS RDS erbjuder en liknande tjĂ€nst.

Oavsett vilken databas du vÀljer, sÄ lÀnge det inte Àr H2, mÄste du stÀlla in de relevanta miljövariablerna i platform/deploy.yaml. Det ser ungefÀr ut sÄ hÀr:

-- plattform/deployment.yaml
apiVersion: apps/v1
typ: Distribution
[...]
specifikation:
mall:
specifikation:
[...]
containrar:
- namn: camunda-bpm
miljö:
- namn: DB_DRIVER
vÀrde: org.postgresql.Driver
- namn: DB_URL
vÀrde: jdbc:postgresql://postgres-proxy.db:5432/process-engine
- namn: DB_USERNAME
valueFrom:
secretKeyRef:
namn: cambpm-db-credentials
nyckel: db_username
- namn: DB_PASSWORD
valueFrom:
secretKeyRef:
namn: cambpm-db-credentials
nyckel: db_password
[...]

AnmÀrkning: Du kan anvÀnda Kustomize för att distribuera i olika miljöer med hjÀlp av overlay: exempel.

AnmÀrkning: anvÀndning valueFrom: secretKeyRef. VÀnligen anvÀnd denna Kubernetes-funktion Àven under utvecklingen för att hÄlla dina hemligheter sÀkra.

Det Ă€r mycket troligt att du redan har ett föredraget system för hantering av Kubernetes-hemligheter. Om inte, hĂ€r Ă€r nĂ„gra alternativ: kryptera dem med KMS frĂ„n din molnleverantör, och implementera dem i K8S som hemligheter genom en CD-pipeline — MozillaSOPS — fungerar mycket bra tillsammans med Kustomize-hemligheter. Det finns Ă€ven andra verktyg, sĂ„som dotGPG — de utför liknande funktioner: HashiCorp Vault, Kustomize Secret Value Plugins.

Ingress

Om du inte vÀljer att anvÀnda port forwarding, behöver du en konfigurerad Ingress Controller. Om du inte anvÀnder ingress-nginx (Helm-diagrammet) sÄ vet du förmodligen redan att du mÄste ange nödvÀndiga anteckningar i ingress-patch.yaml.tmpl eller platform/ingress.yaml. Om du anvÀnder ingress-nginx och ser nginx ingress-klass med en lastbalanserare pekande pÄ den och extern DNS eller en wildcard DNS-post, Àr allt redo. Annars, konfigurera Ingress Controller och DNS eller hoppa över dessa steg och behÄll direktkontakten till podden.

TLS

Om du anvĂ€nder cert-manager eller kube-lego och letsencrypt — certifikaten för den nya ingĂ„ngen kommer att erhĂ„llas automatiskt. Annars, öppna ingress-patch.yaml.tmpl och konfigurera det efter dina behov.

Körning!

Om du har följt allt ovanstÄende, bör kommandot make skaffold HOSTNAME= starta en tillgÀnglig instans pÄ /camunda

Om du inte har exponerat ingÄngen via en offentlig URL, kan du omdirigera den med localhost: kubectl port-forward -n camunda-bpm-demo svc/camunda-bpm 8080:8080 till localhost:8080/camunda

VĂ€nta nĂ„gra minuter medan tomcat fullt förbereds. Cert-manager kommer att ta lite tid för att verifiera domĂ€nnamnet. Efter detta kan du följa loggarna med hjĂ€lp av tillgĂ€ngliga verktyg — till exempel ett sĂ„dant verktyg som kubetail, eller bara med kubectl:

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

Följande steg

Behörighet

Detta handlar mer om att konfigurera Camunda BPM Àn Kubernetes, men det Àr viktigt att notera att autentisering i REST API Àr avstÀngt som standard. Du kan aktivera grundlÀggande autentisering eller anvÀnda en annan metod, till exempel JWT. Du kan anvÀnda configmaps och volymer för att ladda xml, eller xmlstarlet (se ovan) för att redigera befintliga filer i bilden, samt antingen anvÀnda wget, eller ladda dem med en init-container och en delad volym.

Sessionshantering

Precis som mÄnga andra applikationer hanterar Camunda BPM sessioner i JVM, sÄ om du vill köra flera repliker kan du aktivera sticky sessions (till exempel för ingress-nginx), som kommer att finnas sÄ lÀnge repliken finns, eller stÀlla in Max-Age-attributet för cookies. Som en mer pÄlitlig lösning kan du distribuera Session Manager i Tomcat. Lars har en separat post om detta Àmne, men nÄgot i stil med:

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 '/^/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

AnmÀrkning: du kan anvÀnda xmlstarlet istÀllet för sed

Vi anvÀnde twemproxy innan Google Cloud Memorystore, med memcached-session-manager (stödjer Redis) för att köra det.

Skalning

Om du har redan hanterat sessionerna, kan den första (och ofta sista) begrÀnsningen för att skala Camunda BPM vara databasanslutningen. Delvis konfiguration finns redan "ovanpÄ". Vi stÀnger ocksÄ av initialSize i filen settings.xml. LÀgg till HorizontalPodAutoscaler (HPA) och du kan enkelt automatiskt skala antalet pods.

FörfrÄgningar och begrÀnsningar

I platform/deployment.yaml du kommer att se att vi har hÄrdkodat resursfÀltet. Detta fungerar bra med HPA, men kan behöva ytterligare konfiguration. En kustomize-patch Àr lÀmplig för detta ÀndamÄl. Se ingress-patch.yaml.tmpl och ./kustomization.yaml.tmpl

Utdata

Nu har vi installerat Camunda BPM pÄ Kubernetes med Prometheus-metriker, loggar, H2-databas, TLS och Ingress. Vi har lagt till jar-filer och konfigurationsfiler med ConfigMaps och Dockerfile. Vi diskuterade databyte mellan volymer och direkt i miljövariabler frÄn hemligheter. Dessutom gav vi en översikt över konfigurationen av Camunda för flera repliker och autentiserad API.

LĂ€nkar

github.com/camunda-cloud/camunda-examples/camunda-bpm-kubernetes
│
├── generated-manifest.yaml <- manifest för anvĂ€ndning utan kustomize
├── bilder
│ └── camunda-bpm
│ └── Dockerfile <- overlay docker image
├── ingress-patch.yaml.tmpl <- site-specifik ingress-konfiguration
├── kustomization.yaml.tmpl <- huvudkustomisering
├── Makefile <- make targets
├── namespace.yaml
├── plattform
│ ├── konfiguration
│ │ └── prometheus-jmx.yaml <- prometheus exporter konfigurationsfil
│ ├── deployment.yaml <- huvuddistribution
│ ├── ingress.yaml
│ ├── kustomization.yaml <- "bas" kustomisering
│ ├── service-monitor.yaml <- exempel pĂ„ prometheus-operator konfiguration
│ └── service.yaml
└── skaffold.yaml.tmpl <- skaffold direktiv

05.08.2020, översÀttning artiklar Alastair Firth, Lars Lange

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster