Inaendesha Camunda BPM kwenye Kubernetes

Inaendesha Camunda BPM kwenye Kubernetes

Je, unatumia Kubernetes? Je, uko tayari kuhamisha matukio yako ya Camunda BPM kutoka kwa mashine pepe, au labda ujaribu tu kuziendesha kwenye Kubernetes? Hebu tuangalie baadhi ya usanidi wa kawaida na vipengee vya mtu binafsi ambavyo vinaweza kulengwa kulingana na mahitaji yako mahususi.

Inadhania kuwa umetumia Kubernetes hapo awali. Ikiwa sivyo, kwa nini usiangalie mwongozo na si kuanza nguzo yako ya kwanza?

Waandishi

  • Alastair Firth (Alastair Firth) - Mhandisi Mwandamizi wa Kuegemea wa Tovuti kwenye timu ya Wingu ya Camunda;
  • Lars Lange (Lars Lange) - Mhandisi wa DevOps huko Camunda.

Kwa kifupi:

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

Sawa, labda haikufanya kazi kwa sababu huna skaffold na kustomize imewekwa. Vizuri basi soma!

Camunda BPM ni nini

Camunda BPM ni mfumo huria wa usimamizi wa mchakato wa biashara na jukwaa la otomatiki la maamuzi ambalo huunganisha watumiaji wa biashara na wasanidi programu. Ni bora kwa kuratibu na kuunganisha watu, (micro) huduma au hata roboti! Unaweza kusoma zaidi juu ya kesi tofauti za utumiaji kiungo.

Kwa nini utumie Kubernetes

Kubernetes imekuwa kiwango cha ukweli cha kuendesha programu za kisasa kwenye Linux. Kwa kutumia simu za mfumo badala ya uigaji wa maunzi na uwezo wa kernel wa kudhibiti kumbukumbu na ubadilishanaji wa kazi, muda wa kuwasha na wakati wa kuanza hupunguzwa sana. Hata hivyo, manufaa makubwa zaidi yanaweza kuja kutoka kwa API ya kawaida ambayo Kubernetes hutoa ili kusanidi miundombinu inayohitajika na programu zote: hifadhi, mitandao, na ufuatiliaji. Ilifikisha umri wa miaka 2020 mnamo Juni 6 na labda ni mradi wa pili mkubwa wa chanzo wazi (baada ya Linux). Hivi majuzi imekuwa ikiimarisha utendakazi wake baada ya kurudiwa kwa haraka katika miaka michache iliyopita kwani inakuwa muhimu kwa mzigo wa kazi za uzalishaji kote ulimwenguni.

Injini ya Camunda BPM inaweza kuunganishwa kwa urahisi na programu zingine zinazoendeshwa kwenye nguzo moja, na Kubernetes hutoa uwezo bora zaidi, hukuruhusu kuongeza gharama za miundombinu inapohitajika tu (na kuzipunguza kwa urahisi inavyohitajika).

Ubora wa ufuatiliaji pia umeboreshwa sana kwa kutumia zana kama vile Prometheus, Grafana, Loki, Fluentd na Elasticsearch, zinazokuruhusu kutazama mizigo yote ya kazi katika kundi moja. Leo tutaangalia jinsi ya kutekeleza muuzaji nje wa Prometheus kwenye Mashine ya Virtual ya Java (JVM).

Malengo ya

Wacha tuangalie maeneo machache ambapo tunaweza kubinafsisha picha ya Camunda BPM Docker (github) ili kuingiliana vizuri na Kubernetes.

  1. Kumbukumbu na vipimo;
  2. Viunganisho vya hifadhidata;
  3. Uthibitisho;
  4. Usimamizi wa kikao.

Tutaangalia njia kadhaa za kufikia malengo haya na kuonyesha wazi mchakato mzima.

Kumbuka: Je, unatumia toleo la Enterprise? Tazama hapa na usasishe viungo vya picha inavyohitajika.

Maendeleo ya mtiririko wa kazi

Katika onyesho hili, tutatumia Skaffold kuunda picha za Docker kwa kutumia Google Cloud Build. Ina usaidizi mzuri kwa zana mbalimbali (kama vile Kustomize na Helm), CI na zana za ujenzi, na watoa huduma za miundombinu. Faili skaffold.yaml.tmpl inajumuisha mipangilio ya Google Cloud Build na GKE, ikitoa njia rahisi sana ya kuendesha miundombinu ya kiwango cha uzalishaji.

make skaffold itapakia muktadha wa Dockerfile kwenye Cloud Build, itaunda picha na kuihifadhi katika GCR, na kisha kutumia maonyesho kwenye nguzo yako. Hivi ndivyo inavyofanya make skaffold, lakini Skaffold ina sifa nyingine nyingi.

Kwa violezo vya yaml katika Kubernetes, tunatumia kustomize kudhibiti viwekeleo vya yaml bila kugawanya faili yote ya maelezo, kukuruhusu kutumia. git pull --rebase kwa maboresho zaidi. Sasa iko kwenye kubectl na inafanya kazi vizuri kwa vitu kama hivyo.

Pia tunatumia envsubst kujaza jina la mpangishaji na kitambulisho cha mradi wa GCP katika faili za *.yaml.tmpl. Unaweza kuona jinsi inavyofanya kazi ndani makefile au endelea tu zaidi.

Utangulizi

  • Nguzo ya kazi Mabernet
  • Geuza kukufaa
  • Skafu - kwa kuunda picha zako za kizimbani na upelekaji rahisi kwa GKE
  • Nakala ya msimbo huu
  • Envsubst

Mtiririko wa kazi kwa kutumia maonyesho

Ikiwa hutaki kutumia kustomize au skaffold, unaweza kurejelea maonyesho katika generated-manifest.yaml na uzibadilishe kulingana na mtiririko wa chaguo lako.

Kumbukumbu na vipimo

Prometheus imekuwa kiwango cha kukusanya vipimo katika Kubernetes. Inachukua niche sawa na Metrics za AWS Cloudwatch, Arifa za Cloudwatch, Metrics za Stackdriver, StatsD, Datadog, Nagios, vSphere Metrics na zingine. Ni chanzo wazi na ina lugha yenye nguvu ya kuuliza. Tutakabidhi taswira kwa Grafana - inakuja na idadi kubwa ya dashibodi zinazopatikana nje ya boksi. Zimeunganishwa kwa kila mmoja na ni rahisi kusakinisha nazo prometheus-operator.

Kwa msingi, Prometheus hutumia mfano wa uchimbaji <service>/metrics, na kuongeza vyombo vya kando kwa hili ni kawaida. Kwa bahati mbaya, vipimo vya JMX huwekwa vyema ndani ya JVM, kwa hivyo vyombo vya kando havifanyi kazi vizuri. Hebu tuunganishe jmx_nje chanzo wazi kutoka kwa Prometheus hadi JVM kwa kuiongeza kwenye picha ya chombo ambayo itatoa njia /metrics kwenye bandari tofauti.

Ongeza Prometheus jmx_exporter kwenye chombo

-- 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

Naam, hiyo ilikuwa rahisi. Msafirishaji atafuatilia tomcat na kuonyesha vipimo vyake katika umbizo la Prometheus katika <svc>:9404/metrics

Mpangilio wa nje

Msomaji makini anaweza kujiuliza imetoka wapi prometheus-jmx.yaml? Kuna vitu vingi tofauti ambavyo vinaweza kukimbia kwenye JVM, na tomcat ni moja tu yao, kwa hivyo muuzaji nje anahitaji usanidi wa ziada. Mipangilio ya kawaida ya tomcat, wildfly, kafka na kadhalika zinapatikana hapa. Tutaongeza tomcat kama ConfigMap katika Kubernetes na kisha kuiweka kama kiasi.

Kwanza, tunaongeza faili ya usanidi wa muuzaji nje kwenye jukwaa/config/ saraka yetu

platform/config
└── prometheus-jmx.yaml

Kisha tunaongeza ConfigMapGenerator в kustomization.yaml.tmpl:

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

Hii itaongeza kila kipengele files[] kama kipengele cha usanidi cha ConfigMap. ConfigMapGenerators ni nzuri kwa sababu wao huhifadhi data ya usanidi na hulazimisha uanzishaji upya wa ganda iwapo itabadilika. Pia hupunguza kiwango cha usanidi katika Upelekaji kwani unaweza kuweka "folda" nzima ya faili za usanidi katika VolumeMount moja.

Hatimaye, tunahitaji kuweka ConfigMap kama kiasi kwenye ganda:

-- 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
[...]

Ajabu. Ikiwa Prometheus haijasanidiwa kufanya usafishaji kamili, unaweza kulazimika kuiambia kusafisha maganda. Watumiaji wa Prometheus Operator wanaweza kutumia service-monitor.yaml ili kuanza. Chunguza Service-monitor.yaml, muundo wa operator и ServiceMonitorSpec kabla ya kuanza.

Kupanua muundo huu kwa matukio mengine ya matumizi

Faili zote tunazoongeza kwa ConfigMapGenerator zitapatikana katika saraka mpya /etc/config. Unaweza kupanua kiolezo hiki ili kupachika faili nyingine zozote za usanidi unazohitaji. Unaweza hata kuweka hati mpya ya kuanza. Unaweza kutumia Njia ndogo kuweka faili za kibinafsi. Ili kusasisha faili za xml, zingatia kutumia xmlstarlet badala ya sed. Tayari imejumuishwa kwenye picha.

Magazeti

Habari njema! Kumbukumbu za programu tayari zinapatikana kwenye stdout, kwa mfano na kubectl logs. Fasaha (iliyosakinishwa kwa chaguomsingi katika GKE) itasambaza kumbukumbu zako kwa Elasticsearch, Loki, au jukwaa lako la ukataji miti la biashara. Ikiwa unataka kutumia jsonify kwa magogo basi unaweza kufuata kiolezo hapo juu kusakinisha kurudi nyuma.

Database

Kwa chaguo-msingi, picha itakuwa na hifadhidata ya H2. Hii haitufai, na tutatumia Google Cloud SQL na Wakala wa Cloud SQL - hii itahitajika baadaye ili kutatua matatizo ya ndani. Hili ni chaguo rahisi na la kuaminika ikiwa huna mapendekezo yako mwenyewe katika kuanzisha hifadhidata. AWS RDS hutoa huduma sawa.

Bila kujali hifadhidata unayochagua, isipokuwa ikiwa ni H2, utahitaji kuweka anuwai za mazingira zinazofaa. platform/deploy.yaml. Inaonekana kitu kama hiki:

-- 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
[...]

Kumbuka: Unaweza kutumia Kustomize kupeleka kwa mazingira tofauti kwa kutumia funika: mfano.

Kumbuka: matumizi valueFrom: secretKeyRef. Tafadhali, tumia kipengele hiki cha Kubernetes hata wakati wa maendeleo ili kuweka siri zako salama.

Kuna uwezekano kwamba tayari una mfumo unaopendelea wa kudhibiti siri za Kubernetes. Ikiwa sivyo, hapa kuna chaguzi kadhaa: Kuzisimba kwa njia fiche kwa KMS ya mtoa huduma wako wa mtandao na kisha kuziingiza kwenye K8S kama siri kupitia bomba la CD - SOPS za Mozilla - itafanya kazi vizuri sana pamoja na siri za Kustomize. Kuna zana zingine, kama vile dotGPG, ambazo hufanya kazi sawa: Vault ya HashiCorp, Geuza kukufaa programu-jalizi za Siri ya Thamani.

Ingress

Isipokuwa ukichagua kutumia usambazaji wa mlango wa ndani, utahitaji Kidhibiti cha Kuingia kilichosanidiwa. Ikiwa hutumii ingress-nginx (Chati ya usukani) basi uwezekano mkubwa tayari unajua kuwa unahitaji kusakinisha vidokezo muhimu ndani ingress-patch.yaml.tmpl au platform/ingress.yaml. Ikiwa unatumia ingress-nginx na unaona darasa la ingress la nginx lililo na usawazishaji wa mzigo unaoelekeza kwake na kiingilio cha nje cha DNS au kadi ya mwitu ya DNS, ni vizuri kwenda. Vinginevyo, sanidi Kidhibiti cha Ingress na DNS, au ruka hatua hizi na uweke muunganisho wa moja kwa moja kwenye ganda.

TLS

Ikiwa unatumia meneja mkuu au kube-lego na letsencrypt - vyeti vya kuingia mpya vitapatikana kiotomatiki. Vinginevyo, fungua ingress-patch.yaml.tmpl na uibadilishe ili iendane na mahitaji yako.

Zindua!

Ikiwa ulifuata kila kitu kilichoandikwa hapo juu, basi amri make skaffold HOSTNAME=<you.example.com> inapaswa kuzindua mfano unaopatikana ndani <hostname>/camunda

Ikiwa haujaweka kuingia kwako kwa URL ya umma, unaweza kuelekeza upya kwa localhost: kubectl port-forward -n camunda-bpm-demo svc/camunda-bpm 8080:8080 juu ya localhost:8080/camunda

Subiri dakika chache hadi tomcat iko tayari kabisa. Cert-manager itachukua muda kuthibitisha jina la kikoa. Kisha unaweza kufuatilia magogo kwa kutumia zana zinazopatikana kama vile zana kama kubetail, au kutumia kubectl tu:

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

Hatua zifuatazo

Authorization

Hii ni muhimu zaidi kwa kusanidi Camunda BPM kuliko Kubernetes, lakini ni muhimu kutambua kwamba kwa chaguo-msingi, uthibitishaji umezimwa katika REST API. Unaweza wezesha uthibitishaji wa msingi au tumia njia nyingine kama J.W.T.. Unaweza kutumia usanidi na ujazo kupakia xml, au xmlstarlet (tazama hapo juu) kuhariri faili zilizopo kwenye picha, na utumie wget au kuzipakia kwa kutumia chombo cha init na sauti iliyoshirikiwa.

Usimamizi wa kikao

Kama programu zingine nyingi, Camunda BPM hushughulikia vikao kwenye JVM, kwa hivyo ikiwa unataka kutekeleza nakala nyingi, unaweza kuwezesha vipindi vya kunata (kwa mfano kwa ingress-nginx), ambayo itakuwepo hadi nakala inapotea, au kuweka sifa ya Umri wa Max kwa vidakuzi. Kwa suluhisho thabiti zaidi, unaweza kupeleka Kidhibiti cha Kipindi katika Tomcat. Lars ana chapisho tofauti juu ya mada hii, lakini kitu kama:

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

Kumbuka: unaweza kutumia xmlstarlet badala ya sed

Tulitumia twemproksi mbele ya Google Cloud Memorystore, na memcached-kikao-meneja (inasaidia Redis) kuiendesha.

Kuongeza

Ikiwa tayari unaelewa vipindi, basi kizuizi cha kwanza (na mara nyingi cha mwisho) cha kuongeza Camunda BPM kinaweza kuwa kiunganisho cha hifadhidata. Ubinafsishaji kiasi tayari unapatikana "kutoka kwa sanduku" Hebu pia tuzime intialSize katika faili ya settings.xml. Ongeza Kidhibiti Kiotomatiki cha Mlalo (HPA) na unaweza kuongeza kwa urahisi idadi ya maganda.

Maombi na vikwazo

В platform/deployment.yaml Utaona kwamba tumeweka msimbo kwa bidii kwenye uga wa rasilimali. Hii inafanya kazi vizuri na HPA, lakini inaweza kuhitaji usanidi wa ziada. Kiraka cha kustomize kinafaa kwa hili. Sentimita. ingress-patch.yaml.tmpl и ./kustomization.yaml.tmpl

Pato

Kwa hivyo tulisakinisha Camunda BPM kwenye Kubernetes kwa kutumia metriki za Prometheus, kumbukumbu, hifadhidata ya H2, TLS na Ingress. Tuliongeza faili za jar na faili za usanidi kwa kutumia ConfigMaps na Dockerfile. Tulizungumza juu ya kubadilishana data kwa wingi na moja kwa moja kwa anuwai ya mazingira kutoka kwa siri. Kwa kuongezea, tulitoa muhtasari wa kusanidi Camunda kwa nakala nyingi na API iliyothibitishwa.

marejeo

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, tafsiri nakala Alastair Firth, Lars Lange

Chanzo: mapenzi.com

Kuongeza maoni