Vai jÅ«s izmantojat Kubernetes? Vai esat gatavs pÄrvietot savus Camunda BPM gadÄ«jumus no virtuÄlajÄm maŔīnÄm vai varbÅ«t vienkÄrÅ”i mÄÄ£inÄt tos palaist Kubernetes? ApskatÄ«sim dažas izplatÄ«tas konfigurÄcijas un atseviŔķus vienumus, kurus var pielÄgot jÅ«su Ä«paÅ”ajÄm vajadzÄ«bÄm.
Tiek pieÅemts, ka esat iepriekÅ” izmantojis Kubernetes. Ja nÄ, kÄpÄc gan nepaskatÄ«ties vadÄ«ba un nesÄc savu pirmo kopu?
Larss Lange (Lars Lange) - DevOps inženieris uzÅÄmumÄ Camunda.
ÄŖsumÄ:
git clone https://github.com/camunda-cloud/camunda-examples.git
cd camunda-examples/camunda-bpm-demo
make skaffold
Labi, tas, iespÄjams, nedarbojÄs, jo jums nav instalÄta skaffold un kustomize. Nu tad lasi tÄlÄk!
Kas ir Camunda BPM
Camunda BPM ir atvÄrtÄ koda biznesa procesu pÄrvaldÄ«bas un lÄmumu automatizÄcijas platforma, kas savieno biznesa lietotÄjus un programmatÅ«ras izstrÄdÄtÄjus. Tas ir ideÄli piemÄrots cilvÄku, (mikro)pakalpojumu vai pat robotu koordinÄÅ”anai un savienoÅ”anai! VairÄk par dažÄdiem lietoÅ”anas gadÄ«jumiem varat lasÄ«t vietnÄ saite.
KÄpÄc izmantot Kubernetes
Kubernetes ir kļuvis par de facto standartu modernu lietojumprogrammu palaiÅ”anai operÄtÄjsistÄmÄ Linux. Izmantojot sistÄmas izsaukumus, nevis aparatÅ«ras emulÄciju un kodola spÄju pÄrvaldÄ«t atmiÅu un uzdevumu pÄrslÄgÅ”anu, sÄknÄÅ”anas un palaiÅ”anas laiks tiek samazinÄts lÄ«dz minimumam. TomÄr lielÄkais ieguvums var bÅ«t no standarta API, ko Kubernetes nodroÅ”ina, lai konfigurÄtu infrastruktÅ«ru, kas nepiecieÅ”ama visÄm lietojumprogrammÄm: uzglabÄÅ”anai, tÄ«kla izveidei un uzraudzÄ«bai. Tam 2020. gada jÅ«nijÄ apritÄja 6 gadi, un tas, iespÄjams, ir otrs lielÄkais atvÄrtÄ pirmkoda projekts (pÄc Linux). TÄ nesen ir aktÄ«vi stabilizÄjusi savu funkcionalitÄti pÄc straujas iterÄcijas pÄdÄjos gados, jo tÄ kļūst kritiska ražoÅ”anas noslodzei visÄ pasaulÄ.
Camunda BPM Engine var viegli izveidot savienojumu ar citÄm lietojumprogrammÄm, kas darbojas tajÄ paÅ”Ä klasterÄ«, un Kubernetes nodroÅ”ina lielisku mÄrogojamÄ«bu, ļaujot palielinÄt infrastruktÅ«ras izmaksas tikai tad, kad tas patieÅ”Äm ir nepiecieÅ”ams (un viegli samazinÄt tÄs pÄc vajadzÄ«bas).
UzraudzÄ«bas kvalitÄte ir ievÄrojami uzlabota arÄ« ar tÄdiem rÄ«kiem kÄ Prometheus, Grafana, Loki, Fluentd un Elasticsearch, kas ļauj centralizÄti skatÄ«t visas darba slodzes klasterÄ«. Å odien mÄs apskatÄ«sim, kÄ ieviest Prometheus eksportÄtÄju Java virtuÄlajÄ maŔīnÄ (JVM).
MÄrÄ·i
ApskatÄ«sim dažas jomas, kurÄs varam pielÄgot Camunda BPM Docker attÄlu (GitHub), lai tas labi mijiedarbotos ar Kubernetes.
ŽurnÄli un metrika;
Datu bÄzu savienojumi;
AutentifikÄcija;
Sesijas vadība.
MÄs apskatÄ«sim vairÄkus veidus, kÄ sasniegt Å”os mÄrÄ·us, un skaidri parÄdÄ«sim visu procesu.
PiezÄ«me: Vai izmantojat Enterprise versiju? Skaties Å”eit un pÄc vajadzÄ«bas atjauniniet attÄlu saites.
DarbplÅ«smas izstrÄde
Å ajÄ demonstrÄcijÄ mÄs izmantosim Skaffold, lai izveidotu Docker attÄlus, izmantojot Google Cloud Build. Tam ir labs atbalsts dažÄdiem rÄ«kiem (piemÄram, Kustomize un Helm), CI un veidoÅ”anas rÄ«kiem, kÄ arÄ« infrastruktÅ«ras nodroÅ”inÄtÄjiem. Fails skaffold.yaml.tmpl ietver iestatÄ«jumus Google Cloud Build un GKE, nodroÅ”inot ļoti vienkÄrÅ”u veidu, kÄ palaist ražoÅ”anas lÄ«meÅa infrastruktÅ«ru.
make skaffold ielÄdÄs Dockerfile kontekstu programmÄ Cloud Build, izveidos attÄlu un saglabÄs to GCR un pÄc tam lietos manifestus jÅ«su klasterim. Tas ir tas, ko tas dara make skaffold, bet Skaffold ir daudz citu funkciju.
Kubernetes yaml veidnÄm mÄs izmantojam kustomize, lai pÄrvaldÄ«tu yaml pÄrklÄjumus, neatdalot visu manifestu, ļaujot izmantot git pull --rebase turpmÄkiem uzlabojumiem. Tagad tas ir kubectl un diezgan labi darbojas Å”ÄdÄm lietÄm.
MÄs arÄ« izmantojam envsubst, lai *.yaml.tmpl failos aizpildÄ«tu saimniekdatora nosaukumu un GCP projekta ID. JÅ«s varat redzÄt, kÄ tas darbojas makefile vai vienkÄrÅ”i turpinÄt tÄlÄk.
Skaffold - lai izveidotu savus doka attÄlus un vienkÄrÅ”u izvietoÅ”anu GKE
Å Ä« koda kopija
Envsubst
Darbplūsma, izmantojot manifestus
Ja nevÄlaties izmantot kustomize vai skaffold, varat atsaukties uz manifestiem generated-manifest.yaml un pielÄgojiet tos jÅ«su izvÄlÄtajai darbplÅ«smai.
ŽurnÄli un metrika
Prometheus ir kļuvis par standartu metrikas apkopoÅ”anai Kubernetes. Tas aizÅem tÄdu paÅ”u niÅ”u kÄ AWS Cloudwatch Metrics, Cloudwatch Alerts, Stackdriver Metrics, StatsD, Datadog, Nagios, vSphere Metrics un citi. Tas ir atvÄrts avots, un tam ir spÄcÄ«ga vaicÄjumu valoda. VizualizÄciju uzticÄsim Grafana ā tam ir liels skaits informÄcijas paneļu, kas pieejami jau no kastes. Tie ir savienoti viens ar otru un ir salÄ«dzinoÅ”i viegli uzstÄdÄmi prometejs-operators.
PÄc noklusÄjuma Prometheus izmanto ekstrakcijas modeli <service>/metrics, un Å”im nolÅ«kam tiek pievienoti blakusvÄÄ£u konteineri. DiemžÄl JMX metriku vislabÄk var reÄ£istrÄt JVM, tÄpÄc blakusvÄÄ£u konteineri nav tik efektÄ«vi. Savienojamies jmx_exporter atvÄrtÄ koda no Prometheus uz JVM, pievienojot to konteinera attÄlam, kas nodroÅ”inÄs ceļu /metrics citÄ ostÄ.
Pievienojiet konteineram Prometheus jmx_exporter
-- 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
Nu, tas bija viegli. EksportÄtÄjs uzraudzÄ«s runci un parÄdÄ«s tÄ rÄdÄ«tÄjus Prometheus formÄtÄ vietnÄ <svc>:9404/metrics
EksportÄtÄja iestatÄ«Å”ana
UzmanÄ«gs lasÄ«tÄjs var brÄ«nÄ«ties, no kurienes tas nÄk prometheus-jmx.yaml? JVM var darboties daudz dažÄdu lietu, un runcis ir tikai viena no tÄm, tÄpÄc eksportÄtÄjam ir nepiecieÅ”ama papildu konfigurÄcija. Ir pieejamas standarta konfigurÄcijas runcim, wildfly, kafka un tÄ tÄlÄk Å”eit. MÄs pievienosim runci kÄ ConfigMap programmÄ Kubernetes un pÄc tam uzstÄdiet to kÄ sÄjumu.
TÄdÄjÄdi tiks pievienots katrs elements files[] kÄ ConfigMap konfigurÄcijas elementu. ConfigMapGenerators ir lieliski, jo tie sajauc konfigurÄcijas datus un piespiež podziÅu restartÄt, ja tie mainÄs. Tie arÄ« samazina konfigurÄcijas apjomu izvietoÅ”anÄ, jo vienÄ VolumeMount var pievienot visu konfigurÄcijas failu "mapi".
Visbeidzot, mums ir jÄmontÄ ConfigMap kÄ sÄjums podÄ:
BrÄ«niŔķīgi. Ja Prometheus nav konfigurÄts, lai veiktu pilnÄ«gu tÄ«rÄ«Å”anu, iespÄjams, jums bÅ«s jÄpasaka, lai tas iztÄ«rÄ«tu pÄkstis. Prometheus Operator lietotÄji var izmantot service-monitor.yaml lai sÄktu. IzpÄtÄ«t Service-monitor.yaml, operatora dizains Šø ServiceMonitorSpec pirms sÄkat.
Å Ä« modeļa paplaÅ”inÄÅ”ana uz citiem lietoÅ”anas gadÄ«jumiem
Visi faili, ko pievienojam ConfigMapGenerator, bÅ«s pieejami jaunajÄ direktorijÄ /etc/config. Varat paplaÅ”inÄt Å”o veidni, lai pievienotu citus nepiecieÅ”amos konfigurÄcijas failus. Varat pat uzstÄdÄ«t jaunu starta skriptu. Tu vari izmantot apakÅ”ceļŔ lai uzstÄdÄ«tu atseviŔķus failus. Lai atjauninÄtu xml failus, apsveriet iespÄju izmantot xmlstarlet sed vietÄ. Tas jau ir iekļauts attÄlÄ.
ŽurnÄli
Lieliski jaunumi! Lietojumprogrammu žurnÄli jau ir pieejami stdout, piemÄram, ar kubectl logs. Fluentd (instalÄta pÄc noklusÄjuma GKE) pÄrsÅ«tÄ«s jÅ«su žurnÄlus uz Elasticsearch, Loki vai jÅ«su uzÅÄmuma reÄ£istrÄÅ”anas platformu. Ja vÄlaties izmantot jsonify žurnÄliem, varat sekot iepriekÅ” norÄdÄ«tajai veidnei, lai instalÄtu logback.
Datu bÄze
PÄc noklusÄjuma attÄlam bÅ«s H2 datu bÄze. Tas mums nav piemÄrots, un mÄs izmantosim Google Cloud SQL ar Cloud SQL Proxy - tas bÅ«s nepiecieÅ”ams vÄlÄk, lai atrisinÄtu iekÅ”ÄjÄs problÄmas. Å Ä« ir vienkÄrÅ”a un uzticama iespÄja, ja jums nav savas izvÄles datu bÄzes iestatÄ«Å”anÄ. AWS RDS nodroÅ”ina lÄ«dzÄ«gu pakalpojumu.
NeatkarÄ«gi no izvÄlÄtÄs datu bÄzes, ja vien tÄ nav H2, jums bÅ«s jÄiestata atbilstoÅ”ie vides mainÄ«gie platform/deploy.yaml. Tas izskatÄs apmÄram Å”Ädi:
PiezÄ«me: Varat izmantot Kustomize, lai izvietotu to dažÄdÄs vidÄs, izmantojot pÄrklÄjumu: piemÄrs.
PiezÄ«me: lietojums valueFrom: secretKeyRef. LÅ«dzu, izmantojiet Ŕī Kubernetes funkcija pat izstrÄdes laikÄ, lai jÅ«su noslÄpumi bÅ«tu droŔībÄ.
VisticamÄk, jums jau ir izvÄlÄta sistÄma Kubernetes noslÄpumu pÄrvaldÄ«bai. Ja nÄ, Å”eit ir dažas iespÄjas: Å”ifrÄjiet tos, izmantojot mÄkoÅa pakalpojumu sniedzÄja KMS, un pÄc tam ievadiet tos K8S kÄ noslÄpumus, izmantojot kompaktdiska konveijeru. MozillaSOPS - ļoti labi darbosies kombinÄcijÄ ar Kustomize noslÄpumiem. Ir arÄ« citi rÄ«ki, piemÄram, dotGPG, kas veic lÄ«dzÄ«gas funkcijas: HashiCorp Vault, PielÄgojiet slepeno vÄrtÄ«bu spraudÅus.
IekļūŔana
Ja vien neizvÄlaties izmantot vietÄjo portu pÄradresÄciju, jums bÅ«s nepiecieÅ”ams konfigurÄts ieejas kontrolleris. Ja neizmantojat ingress-nginx (StÅ«res diagramma), tad jÅ«s, visticamÄk, jau zinÄt, ka jums ir jÄinstalÄ nepiecieÅ”amÄs anotÄcijas ingress-patch.yaml.tmpl vai platform/ingress.yaml. Ja izmantojat ingress-nginx un redzat nginx ievades klasi ar slodzes lÄ«dzsvarotÄju, kas norÄda uz to, un ÄrÄju DNS vai aizstÄjÄjzÄ«mes DNS ierakstu, jums ir labi. PretÄjÄ gadÄ«jumÄ konfigurÄjiet ieejas kontrolieri un DNS vai izlaidiet Ŕīs darbÄ«bas un saglabÄjiet tieÅ”u savienojumu ar podziÅu.
TLS
Ja jÅ«s izmantojat sertificÄts menedžeris vai kube-lego un letsencrypt - sertifikÄti jaunajai pieteikÅ”anÄs vietai tiks iegÅ«ti automÄtiski. PretÄjÄ gadÄ«jumÄ atveriet ingress-patch.yaml.tmpl un pielÄgojiet to savÄm vajadzÄ«bÄm.
Palaist!
Ja ievÄrojÄt visu iepriekÅ” rakstÄ«to, tad komandu make skaffold HOSTNAME=<you.example.com> vajadzÄtu palaist pieejamo gadÄ«jumu <hostname>/camunda
Ja neesat iestatÄ«jis savu pieteikumvÄrdu uz publisku URL, varat to novirzÄ«t ar localhost: kubectl port-forward -n camunda-bpm-demo svc/camunda-bpm 8080:8080 par localhost:8080/camunda
Pagaidiet dažas minÅ«tes, lÄ«dz runcis ir pilnÄ«bÄ gatavs. Cert-manager prasÄ«s kÄdu laiku, lai pÄrbaudÄ«tu domÄna nosaukumu. PÄc tam varat pÄrraudzÄ«t žurnÄlus, izmantojot pieejamos rÄ«kus, piemÄram, tÄdu rÄ«ku kÄ kubetail, vai vienkÄrÅ”i izmantojot kubectl:
Tas vairÄk attiecas uz Camunda BPM konfigurÄÅ”anu nekÄ Kubernetes, taÄu ir svarÄ«gi Åemt vÄrÄ, ka pÄc noklusÄjuma autentifikÄcija REST API ir atspÄjota. JÅ«s varat iespÄjot pamata autentifikÄciju vai izmantojiet citu metodi, piemÄram J.W.T.. Varat izmantot konfigurÄcijas kartes un sÄjumus, lai ielÄdÄtu xml, vai xmlstarlet (skatiet iepriekÅ”), lai rediÄ£Ätu attÄlÄ esoÅ”os failus, un izmantot wget vai ielÄdÄt tos, izmantojot sÄkuma konteineru un koplietotu sÄjumu.
Sesijas vadība
TÄpat kÄ daudzas citas lietojumprogrammas, Camunda BPM apstrÄdÄ sesijas JVM, tÄdÄļ, ja vÄlaties palaist vairÄkas replikas, varat iespÄjot lipÄ«gÄs sesijas (piemÄram ingress-nginx), kas pastÄvÄs, lÄ«dz pazudÄ«s kopija, vai iestatiet sÄ«kfailu atribÅ«tu Max-Age. Lai iegÅ«tu stabilÄku risinÄjumu, varat izvietot sesiju pÄrvaldnieku Tomcat. Larsam ir atseviŔķs ieraksts par Å”o tÄmu, bet kaut kas lÄ«dzÄ«gs:
Ja jÅ«s jau saprotat sesijas, pirmais (un bieži vien pÄdÄjais) Camunda BPM mÄrogoÅ”anas ierobežojums var bÅ«t savienojums ar datu bÄzi. DaļÄja pielÄgoÅ”ana jau ir pieejama "no kastes" AtspÄjosim arÄ« intialSize failÄ settings.xml. Pievienot Horizontal Pod Autoscaler (HPA) un jÅ«s varat viegli automÄtiski mÄrogot pÄkstu skaitu.
Pieprasījumi un ierobežojumi
Š platform/deployment.yaml JÅ«s redzÄsit, ka esam stingri iekodÄjuÅ”i resursu lauku. Tas labi darbojas ar HPA, taÄu var bÅ«t nepiecieÅ”ama papildu konfigurÄcija. Tam ir piemÄrots kustomize plÄksteris. Cm. ingress-patch.yaml.tmpl Šø ./kustomization.yaml.tmpl
secinÄjums
TÄpÄc mÄs instalÄjÄm Camunda BPM vietnÄ Kubernetes ar Prometheus metriku, žurnÄliem, H2 datu bÄzi, TLS un Ingress. MÄs pievienojÄm jar failus un konfigurÄcijas failus, izmantojot ConfigMaps un Dockerfile. MÄs runÄjÄm par datu apmaiÅu ar sÄjumiem un tieÅ”i uz vides mainÄ«gajiem no noslÄpumiem. TurklÄt mÄs sniedzÄm pÄrskatu par Camunda iestatÄ«Å”anu vairÄkÄm replikÄm un autentificÄtai API.