
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 och sÀtta igÄng med din första kluster?
Författare
- Àr site reliability engineer i Camunda Cloud-teamet;
- À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Ä .
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 (), sÄ att den fungerar bra med Kubernetes.
- Loggar och metrik;
- Databasanslutningar;
- Autentisering;
- 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Ä 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
- â 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. .
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 ö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 Đž ŃаĐș ЎалДД ĐŽĐŸŃŃŃĐżĐœŃ kommer. Vi kommer att lĂ€gga till tomcat som 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 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, och 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 för att montera enskilda filer. För att uppdatera xml-filer, övervÀg att anvÀnda 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 .
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: .
AnmÀrkning: anvÀndning valueFrom: secretKeyRef. VÀnligen anvÀnd À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 â â fungerar mycket bra tillsammans med Kustomize-hemligheter. Det finns Ă€ven andra verktyg, sĂ„som dotGPG â de utför liknande funktioner: , .
Ingress
Om du inte vÀljer att anvÀnda port forwarding, behöver du en konfigurerad Ingress Controller. Om du inte anvÀnder () 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 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 eller anvÀnda en annan metod, till exempel . 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 (), 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 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 innan Google Cloud Memorystore, med (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 "". Vi stÀnger ocksÄ av initialSize i filen settings.xml. LÀgg till 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 Alastair Firth, Lars Lange
KĂ€lla: habr.com
