Benotzt Dir Kubernetes? Bereet fir Är Camunda BPM Instanzen aus virtuelle Maschinnen ze plënneren, oder vläicht just probéieren se op Kubernetes ze lafen? Loosst eis e puer gemeinsam Konfiguratiounen an eenzel Elementer kucken, déi op Är spezifesch Bedierfnesser ugepasst kënne ginn.
Et gëtt ugeholl datt Dir Kubernetes virdru benotzt hutt. Wann net, firwat net e Bléck op Leadership an net Ären éischte Stärekoup ufänken?
Auteuren
Alastair Firth (Alastair Firth) - Senior Site Reliability Engineer am Camunda Cloud Team;
Lars Lange (Lars Lange) - DevOps Ingenieur bei Camunda.
Kuerz gesot:
git clone https://github.com/camunda-cloud/camunda-examples.git
cd camunda-examples/camunda-bpm-demo
make skaffold
Okay, et huet wahrscheinlech net geschafft well Dir hutt net Skaffold an kustomize installéiert. Ma dann liest weider!
Wat ass Camunda BPM
Camunda BPM ass eng Open Source Geschäftsprozessmanagement an Entscheedungsautomatiséierungsplattform déi Geschäftsbenotzer a Softwareentwéckler verbënnt. Et ass ideal fir Leit ze koordinéieren an ze verbannen, (Mikro) Servicer oder souguer Bots! Dir kënnt méi iwwer déi verschidde Benotzungsfäll liesen op Link.
Firwat benotzt Kubernetes
Kubernetes ass den de facto Standard ginn fir modern Uwendungen op Linux ze lafen. Andeems Dir System Uriff benotzt anstatt Hardware Emulatioun an d'Fäegkeet vum Kernel fir Erënnerung an Taskschalter ze managen, ginn d'Bootzäit an d'Startzäit op e Minimum gehal. Wéi och ëmmer, de gréisste Virdeel kann aus der Standard API kommen déi Kubernetes ubitt fir d'Infrastruktur ze konfiguréieren déi vun all Uwendungen erfuerderlech ass: Späicheren, Netzwierker an Iwwerwaachung. Et gouf 2020 Joer al am Juni 6 an ass vläicht deen zweetgréissten Open Source Projet (no Linux). Et huet viru kuerzem seng Funktionalitéit no enger séierer Iteratioun an de leschte Joeren aktiv stabiliséiert wéi et kritesch gëtt fir d'Produktiounsaarbechtslaascht ronderëm d'Welt.
Camunda BPM Engine kann einfach mat aner Uwendungen konnektéieren, déi am selwechte Stärekoup lafen, a Kubernetes bitt exzellent Skalierbarkeet, wat Iech erlaabt d'Infrastrukturkäschte nëmmen ze erhéijen wann et wierklech néideg ass (a se einfach reduzéieren wéi néideg).
D'Qualitéit vun der Iwwerwaachung gëtt och staark verbessert mat Tools wéi Prometheus, Grafana, Loki, Fluentd an Elasticsearch, wat Iech erlaabt all Aarbechtslaascht an engem Cluster zentral ze gesinn. Haut kucke mir wéi een de Prometheus Exporter an d'Java Virtual Machine (JVM) implementéiert.
Zilsetzungen
Loosst eis e puer Beräicher kucken wou mir de Camunda BPM Docker Bild personaliséiere kënnen (github) sou datt et gutt mat Kubernetes interagéiert.
Logbicher a Metriken;
Datebank Verbindungen;
Authentifikatioun;
Sëtzung Gestioun.
Mir wäerte verschidde Weeër kucken fir dës Ziler z'erreechen an de ganze Prozess kloer ze weisen.
Remarque: Benotzt Dir d'Enterprise Versioun? Kuckt hei an update Bild Linken wéi néideg.
Workflow Entwécklung
An dëser Demo wäerte mir Skaffold benotzen fir Docker Biller mat Google Cloud Build ze bauen. Et huet gutt Ënnerstëtzung fir verschidden Tools (wéi Kustomize an Helm), CI a bauen Tools, an Infrastruktur Ubidder. Fichier skaffold.yaml.tmpl enthält Astellunge fir Google Cloud Build a GKE, e ganz einfache Wee fir Produktiounsgrad Infrastruktur ze lafen.
make skaffold lued den Dockerfile Kontext an Cloud Build, baut d'Bild an späichert et am GCR, a gëlt dann d'Manifester op Äre Cluster. Dëst ass wat et mécht make skaffold, mee Skaffold huet vill aner Funktiounen.
Fir Yaml Templates a Kubernetes benotze mir kustomize fir Yaml Iwwerlager ze managen ouni de ganze Manifest ze forckelen, wat Iech erlaabt Iech ze benotzen git pull --rebase fir weider Verbesserungen. Elo ass et am kubectl an et funktionnéiert ganz gutt fir sou Saachen.
Mir benotzen och envsubst fir den Hostnumm an den GCP Projet ID an den *.yaml.tmpl Dateien ze populéieren. Dir kënnt gesinn wéi et funktionnéiert an makefile oder einfach weider fueren.
Skaffold - fir Är eege Docker-Biller ze kreéieren an einfach Deployment op GKE
Kopie vun dësem Code
Envsubst
Workflow mat Manifestatiounen
Wann Dir net wëllt kustomize oder skaffold benotzen, kënnt Dir op d'Manifester bezéien an generated-manifest.yaml an adaptéieren se un de Workflow vun Ärer Wiel.
Logbicher a Metriken
Prometheus ass de Standard ginn fir Metriken a Kubernetes ze sammelen. Et besetzt déiselwecht Nisch wéi AWS Cloudwatch Metrics, Cloudwatch Alerts, Stackdriver Metrics, StatsD, Datadog, Nagios, vSphere Metrics an anerer. Et ass Open Source an huet eng mächteg Ufrosprooch. Mir wäerten d'Visualiséierung u Grafana uvertraut - et kënnt mat enger grousser Zuel vun Dashboards verfügbar aus der Këscht. Si si matenee verbonnen a si relativ einfach ze installéieren prometheus-Operateur.
Par défaut benotzt Prometheus den Extraktiounsmodell <service>/metrics, a Sidecar Container fir dëst ze addéieren ass heefeg. Leider sinn JMX Metriken am beschten am JVM protokolléiert, sou datt Sidecar Container net sou effizient sinn. Loosst eis konnektéieren jmx_exporter Open Source vum Prometheus op de JVM andeems se se an d'Containerbild bäigefüügt deen de Wee ubitt /metrics op engem aneren Hafen.
Füügt Prometheus jmx_exporter an de Container
-- images/camunda-bpm/Dockerfile
FROM 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
Gutt, dat war einfach. Den Exportateur iwwerwaacht den Tomcat a weist seng Metriken am Prometheus Format op <svc>:9404/metrics
Exporter Setup
Den opmierksam Lieser freet sech vläicht wou et hierkënnt prometheus-jmx.yaml? Et gi vill verschidde Saachen, déi am JVM lafen kënnen, an Tomcat ass just ee vun hinnen, sou datt den Exportateur eng zousätzlech Konfiguratioun brauch. Standard Konfiguratiounen fir Tomcat, Wildfly, Kafka a sou weider sinn verfügbar hei. Mir wäerten Tomcat als ConfigMap an Kubernetes an dann Montéierung et als Volume.
Als éischt fügen mir d'Exporter Konfiguratiounsdatei op eis Plattform/config/ Verzeichnis
Dëst wäert all Element derbäi files[] als ConfigMap Konfiguratiounselement. ConfigMapGenerators si super well se d'Konfiguratiounsdaten hashéieren an e Pod Neistart forcéieren wann et ännert. Si reduzéieren och d'Quantitéit vun der Konfiguratioun am Deployment well Dir e ganze "Dossier" vu Konfiguratiounsdateien an engem VolumeMount montéiere kënnt.
Schlussendlech musse mir de ConfigMap als Volume op de Pod montéieren:
Wonnerbar. Wann de Prometheus net konfiguréiert ass fir eng voll Botz ze maachen, musst Dir et vläicht soen fir d'Pods ze botzen. Prometheus Operator Benotzer kënne benotzen service-monitor.yaml unzefänken. Entdeckt Service-monitor.yaml, Bedreiwer Design и ServiceMonitorSpec ier Dir ufänken.
Dëst Muster op aner Benotzungsfäll ausdehnen
All Dateien, déi mir op ConfigMapGenerator addéieren, sinn am neie Verzeechnes verfügbar /etc/config. Dir kënnt dës Schabloun verlängeren fir all aner Konfiguratiounsdateien ze montéieren déi Dir braucht. Dir kënnt souguer en neie Startup Skript montéieren. Dir kënnt benotzen subPath fir eenzel Dateien ze montéieren. Fir xml Dateien ze aktualiséieren, betruecht d'Benotzung xmlstarlet amplaz seed. Et ass schonn am Bild abegraff.
Zäitschrëften
Flott Neiegkeet! Applikatioun Logbicher sinn schonn op stdout sinn, zum Beispill mat kubectl logs. Fluentd (installéiert par défaut am GKE) wäert Är Logbicher op Elasticsearch, Loki, oder Är Enterprise Log Plattform weiderginn. Wann Dir jsonify fir Logbicher benotze wëllt, da kënnt Dir déi uewe genannte Schabloun verfollegen fir ze installéieren logback.
Datebank
Par défaut wäert d'Bild eng H2 Datebank hunn. Dëst ass net gëeegent fir eis, a mir wäerte Google Cloud SQL mat Cloud SQL Proxy benotzen - dëst wäert spéider gebraucht ginn fir intern Probleemer ze léisen. Dëst ass eng einfach an zouverlässeg Optioun wann Dir keng eege Virléiften hutt fir d'Datebank opzestellen. AWS RDS bitt en ähnlechen Service.
Onofhängeg vun der Datebank déi Dir gewielt hutt, ausser et ass H2, musst Dir déi entspriechend Ëmfeldvariablen astellen platform/deploy.yaml. Et gesäit sou eppes aus:
Remarque: Dir kënnt Kustomize benotze fir op verschidden Ëmfeld mat engem Iwwerlager ze deployéieren: Beispill.
Remarque: Gebrauch valueFrom: secretKeyRef. Weg, benotzen dëser Kubernetes Fonktioun och während der Entwécklung fir Är Geheimnisser sécher ze halen.
Et ass méiglech datt Dir schonn e bevorzugt System fir d'Gestioun vu Kubernetes Geheimnisser hutt. Wann net, hei sinn e puer Optiounen: Verschlësselt se mat Ärem Cloud Provider KMS an injizéiert se dann an K8S als Geheimnisser iwwer d'CD Pipeline - Mozilla SOPS - wäert ganz gutt a Kombinatioun mat Kustomize Geheimnisser Aarbecht. Et ginn aner Tools, wéi dotGPG, déi ähnlech Funktiounen ausféieren: HashiCorp Vault, Personnaliséieren Secret Value Plugins.
Ingress
Ausser Dir wielt lokal Port Forwarding ze benotzen, braucht Dir e konfiguréierten Ingress Controller. Wann Dir net benotzt ingress-nginx (Helm Chart) da wësst Dir wahrscheinlech schonn datt Dir déi néideg Annotatiounen installéiere musst ingress-patch.yaml.tmpl oder platform/ingress.yaml. Wann Dir Ingress-nginx benotzt an eng nginx Ingress Klass gesitt mat engem Lastbalancer deen drop weist an en externen DNS oder Wildcard DNS Entrée, sidd Dir gutt fir ze goen. Soss, konfiguréieren den Ingress Controller an DNS, oder sprangen dës Schrëtt a behalen déi direkt Verbindung zum Pod.
TLS
Wann Dir benotzt cert-Manager oder kube-lego a letsencrypt - Certificaten fir den neie Login ginn automatesch kritt. Soss, oppen ingress-patch.yaml.tmpl a personaliséiere se fir Äre Besoinen ze passen.
Lancéiere!
Wann Dir alles hei uewen geschriwwen hutt, dann de Kommando make skaffold HOSTNAME=<you.example.com> soll eng verfügbar Instanz lancéieren an <hostname>/camunda
Wann Dir Äre Login net op eng ëffentlech URL gesat hutt, kënnt Dir se mat weiderleeden localhost: kubectl port-forward -n camunda-bpm-demo svc/camunda-bpm 8080:8080 op localhost:8080/camunda
Waart e puer Minutten bis Tomcat komplett fäerdeg ass. Cert-Manager wäert e bëssen Zäit huelen fir den Domain Numm z'iwwerpréiwen. Dir kënnt dann d'Logbicher iwwerwaachen mat verfügbaren Tools wéi e Tool wéi kubetail, oder einfach mat kubectl:
Dëst ass méi relevant fir Camunda BPM ze konfiguréieren wéi Kubernetes, awer et ass wichteg ze bemierken datt Par défaut d'Authentifikatioun an der REST API deaktivéiert ass. Du kanns Basis Authentifikatioun aktivéieren oder benotzt eng aner Method wéi J.W.T.. Dir kënnt Configmaps a Volumen benotze fir xml ze lueden, oder xmlstarlet (kuckt hei uewen) fir existent Dateien am Bild z'änneren, an entweder wget benotzen oder se lueden mat engem Init Container an engem gemeinsame Volumen.
Sëtzung Gestioun
Wéi vill aner Uwendungen, handhabt Camunda BPM Sessiounen am JVM, also wann Dir méi Repliken wëllt lafen, kënnt Dir Sticky Sessiounen aktivéieren (zum Beispill fir ingress-nginx), déi existéieren bis d'Replika verschwënnt, oder de Max-Age Attribut fir Cookien setzen. Fir eng méi robust Léisung kënnt Dir Session Manager am Tomcat ofsetzen. Lars huet separat Post iwwer dëst Thema, awer eppes wéi:
Wann Dir scho Sessiounen versteet, da kann déi éischt (an dacks déi lescht) Begrenzung fir d'Skaléierung vu Camunda BPM d'Verbindung mat der Datebank sinn. Deelweis Personnalisatioun ass scho verfügbar "aus der Këscht" Loosst eis och intialSize an der Settings.xml Datei ausschalten. Addéieren Horizontal Pod Autoscaler (HPA) an Dir kënnt d'Zuel vun de Pods einfach automatesch skaléieren.
Ufroen a Restriktiounen
В platform/deployment.yaml Dir gesitt datt mir d'Ressource Feld schwéier kodéiert hunn. Dëst funktionnéiert gutt mat HPA, awer kann zousätzlech Konfiguratioun erfuerderen. De kustomize Patch ass gëeegent fir dëst. Cm. ingress-patch.yaml.tmpl и ./kustomization.yaml.tmpl
Konklusioun
Also hu mir Camunda BPM op Kubernetes installéiert mat Prometheus Metriken, Logbicher, H2 Datebank, TLS an Ingress. Mir hunn Jar Dateien a Konfiguratiounsdateien bäigefüügt mat ConfigMaps an Dockerfile. Mir hunn iwwer d'Austausch vun Daten op Bänn geschwat an direkt un Ëmweltvariablen aus Geheimnisser. Zousätzlech hu mir en Iwwerbléck iwwer d'Opstelle vu Camunda fir verschidde Repliken an eng authentifizéiert API geliwwert.