Mihazakazaka Camunda BPM amin'ny Kubernetes

Mihazakazaka Camunda BPM amin'ny Kubernetes

Mampiasa Kubernetes ve ianao? Vonona ny hamindra ny trangan'ny Camunda BPM anao amin'ny milina virtoaly, na mety hanandrana fotsiny amin'ny Kubernetes? Andeha hojerentsika ireo tefy mahazatra sy singa tsirairay izay azo ampifanarahana amin'ny filanao manokana.

Heverina fa efa nampiasa Kubernetes ianao taloha. Raha tsy izany, nahoana raha mijery mpitarika ary tsy manomboka ny cluster voalohany?

mpanoratra

  • Alastair Firth (Alastair Firth) - Injeniera mahatoky amin'ny toerana ambony ao amin'ny ekipa Camunda Cloud;
  • Lars Lange (Lars Lange) - injeniera DevOps ao amin'ny Camunda.

Raha afohezina:

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

Eny ary, mety tsy nety izany satria tsy nametraka skaffold sy kustomize ianao. Dia vakio ary!

Inona no atao hoe Camunda BPM

Camunda BPM dia sehatra fitantanana ny fizotran'ny raharaham-barotra sy ny fanapahan-kevitra automatique izay mampifandray ireo mpampiasa orinasa sy mpamorona rindrambaiko. Tena mety amin'ny fandrindrana sy fampifandraisana olona, ​​serivisy (mikro) na bots mihitsy aza! Afaka mamaky bebe kokoa momba ireo tranga fampiasana samihafa ianao ao amin'ny rohy.

Nahoana no mampiasa Kubernetes

Ny Kubernetes dia lasa fenitra de facto amin'ny fampandehanana fampiharana maoderina amin'ny Linux. Amin'ny alàlan'ny fampiasana antso an-tariby fa tsy ny emulation hardware sy ny fahafahan'ny kernel mitantana ny fitadidiana sy ny fiovan'ny asa, dia tazonina ho faran'izay kely ny fotoana boot sy ny fotoana fanombohana. Na izany aza, ny tombony lehibe indrindra dia mety ho avy amin'ny API mahazatra omen'i Kubernetes mba handrindrana ny fotodrafitrasa takian'ny fampiharana rehetra: fitahirizana, tambajotra ary fanaraha-maso. Nivadika 2020 taona izy io tamin'ny Jona 6 ary angamba no tetikasa loharano misokatra faharoa lehibe indrindra (taorian'ny Linux). Vao haingana izy no nazoto nanamafy ny fampiasany taorian'ny famerimberenana haingana tao anatin'ny taona vitsivitsy izay lasa manakiana ny enta-mamokatra eran'izao tontolo izao.

Ny Camunda BPM Engine dia afaka mifandray mora amin'ny rindranasa hafa mandeha amin'ny cluster iray ihany, ary manome scalability tena tsara i Kubernetes, mamela anao hampitombo ny vidin'ny fotodrafitrasa raha tsy rehefa tena ilaina (ary mampihena azy ireo mora foana raha ilaina).

Ny kalitaon'ny fanaraha-maso dia nohatsaraina be ihany koa miaraka amin'ny fitaovana toa ny Prometheus, Grafana, Loki, Fluentd ary Elasticsearch, ahafahanao mijery afovoany ny enta-mavesatra rehetra ao anaty cluster. Androany isika dia hijery ny fomba fampiharana ny mpanondrana Prometheus ao amin'ny Java Virtual Machine (JVM).

tanjona

Andeha hojerentsika faritra vitsivitsy ahafahantsika manamboatra ny sary Camunda BPM Docker (github) mba hifaneraserany tsara amin'ny Kubernetes.

  1. Logs sy metrika;
  2. Fifandraisana amin'ny database;
  3. Authentication;
  4. Fitantanana fivoriana.

Hijery fomba maromaro hanatratrarana ireo tanjona ireo isika ary hampiseho mazava tsara ny dingana manontolo.

fanamarihana: Mampiasa ny dikan-teny Enterprise ve ianao? Jereo eto ary manavao rohy sary raha ilaina.

Fampandrosoana ny workflow

Amin'ity demo ity dia hampiasa Skaffold izahay hananganana sary Docker amin'ny alàlan'ny Google Cloud Build. Manana fanohanana tsara ho an'ny fitaovana isan-karazany (toy ny Kustomize sy Helm), CI ary fitaovana fananganana, ary mpamatsy fotodrafitrasa. rakitra skaffold.yaml.tmpl ahitana ny firafitry ny Google Cloud Build sy GKE, izay manome fomba tena tsotra hampandehanana fotodrafitrasa ambaratonga famokarana.

make skaffold dia hampiditra ny tontolon'ny Dockerfile ao amin'ny Cloud Build, manangana ny sary ary mitahiry izany ao amin'ny GCR, ary avy eo ampiharo amin'ny cluster anao ny fisehoana. Izany no ataony make skaffold, fa manana endri-javatra maro hafa i Skaffold.

Ho an'ny maodely yaml ao amin'ny Kubernetes, mampiasa kustomize izahay mba hitantana ireo overlay yaml nefa tsy manapaka ny fanehoana manontolo, ahafahanao mampiasa git pull --rebase ho fanatsarana bebe kokoa. Amin'izao fotoana izao dia ao amin'ny kubectl ary miasa tsara amin'ny zavatra toy izany.

Mampiasa envsubst koa izahay mba hamenoana ny anaran'ny mpampiantrano sy ny ID tetikasa GCP ao amin'ny rakitra *.yaml.tmpl. Hitanao ny fomba fiasa ao makefile na tohizo hatrany.

zavatra takiana alohan'ny

  • Cluster asa Kubernetes
  • Ataovy miavaka
  • Skaffold - amin'ny famoronana sary docker anao manokana sy fametrahana mora amin'ny GKE
  • Kopia amin'ity kaody ity
  • Envsubst

Workflow mampiasa manifests

Raha tsy te hampiasa kustomize na skaffold ianao dia azonao atao ny manondro ny manifests in generated-manifest.yaml ary ampifanaraho amin'ny fizotran'ny asa tianao.

Log sy metrika

Prometheus dia lasa fenitra amin'ny fanangonana metrika ao amin'ny Kubernetes. Izy io dia mitana toerana mitovy amin'ny AWS Cloudwatch Metrics, Cloudwatch Alerts, Stackdriver Metrics, StatsD, Datadog, Nagios, vSphere Metrics ary ny hafa. Loharanom-baovao misokatra izy io ary manana fiteny manaitaitra mahery vaika. Ankininay amin'i Grafana ny sary an-tsary - miaraka amin'ny dashboard marobe azo alaina ivelan'ny boaty. Mifamatotra izy ireo ary mora apetraka prometheus-operator.

Amin'ny alàlan'ny default, Prometheus dia mampiasa ny maodely fitrandrahana <service>/metrics, ary matetika ny fampidirana fitoeran'entana ho an'izany. Indrisy anefa, ny metrik'i JMX dia tafiditra tsara indrindra ao anatin'ny JVM, noho izany dia tsy mahomby ny kaontenera sidecar. Andao hifandray jmx_exporter loharano misokatra avy amin'ny Prometheus mankany amin'ny JVM amin'ny fampidirana azy amin'ny sarin'ny container izay hanome ny lalana /metrics amin'ny seranana hafa.

Ampio Prometheus jmx_exporter amin'ny kaontenera

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

Eny, mora izany. Ny mpanondrana dia hanara-maso ny tomcat ary hampiseho ny metrika ao amin'ny endrika Prometheus amin'ny <svc>:9404/metrics

Fametrahana mpanondrana

Mety hanontany tena ny mpamaky tsara hoe avy aiza ilay izy prometheus-jmx.yaml? Misy zavatra maro samihafa azo atao ao amin'ny JVM, ary ny tomcat dia iray amin'izy ireo, noho izany dia mila fanitsiana fanampiny ny mpanondrana. Misy fanamafisam-peo mahazatra ho an'ny tomcat, wildfly, kafka sy ny sisa eto. Hanampy tomcat ho ConfigMap ao amin'ny Kubernetes ary apetaho ho toy ny boky.

Voalohany, ampidirinay ao amin'ny lahatahiry sehatra / config / ny rakitra fanamafisana mpanondrana

platform/config
└── prometheus-jmx.yaml

Dia ampianay ConfigMapGenerator в kustomization.yaml.tmpl:

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

Izany dia hanampy ny singa tsirairay files[] ho singa fanamafisana ConfigMap. Tena tsara ny ConfigMapGenerators satria manefy ny angon-drakitra fanamafisana izy ireo ary manery ny famerenana ny pod raha miova izany. Mampihena ny habetsaky ny fanamafisana ao amin'ny Deployment ihany koa izy ireo satria azonao atao ny mametraka "folder" iray manontolo amin'ny rakitra fanamafisana ao anaty VolumeMount iray.

Farany, mila mametraka ny ConfigMap ho toy ny volume amin'ny pod:

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

Mahafinaritra. Raha tsy namboarina hanao fanadiovana tanteraka ny Prometheus, dia mety tsy maintsy lazainao izany mba hanadio ny pods. Ny mpampiasa Prometheus Operator dia afaka mampiasa service-monitor.yaml hanombohana. hijery Service-monitor.yaml, famolavolana mpandraharaha и ServiceMonitorSpec alohan'ny hanombohanao.

Manitatra ity lamina ity amin'ny tranga fampiasana hafa

Ny rakitra rehetra ampianay amin'ny ConfigMapGenerator dia ho hita ao amin'ny lahatahiry vaovao /etc/config. Azonao atao ny manitatra ity môdely ity mba hametahana rakitra hafa ilainao. Azonao atao mihitsy aza ny mametraka script fanombohana vaovao. Azonao ampiasaina subPath hametahana rakitra tsirairay. Mba hanavaozana ny rakitra xml, diniho ny fampiasana xmlstarlet fa tsy sed. Efa tafiditra ao anatin'ny sary izany.

gazety

Vaovao mahafaly! Ny diarin'ny fampiharana dia efa misy amin'ny stdout, ohatra amin'ny kubectl logs. Ny Fluentd (apetraka amin'ny alàlan'ny default ao amin'ny GKE) dia handefa ny dianao any amin'ny Elasticsearch, Loki, na ny sehatra firaketana orinasanao. Raha te hampiasa jsonify ho an'ny logs ianao dia azonao atao ny manaraka ny modely etsy ambony mba hametrahana logback.

banky angona

Amin'ny alàlan'ny default, ny sary dia hanana tahiry H2. Tsy mety aminay izany, ary hampiasa Google Cloud SQL miaraka amin'ny Cloud SQL Proxy izahay - ilaina izany any aoriana mba hamahana ny olana anatiny. Safidy tsotra sy azo itokisana ity raha tsy manana ny safidinao manokana amin'ny fametrahana ny angon-drakitra ianao. AWS RDS dia manome serivisy mitovy.

Na inona na inona angona nofidinao, raha tsy hoe H2 izany, dia mila mametraka ny fari-piainan'ny tontolo iainana mifanaraka amin'izany ianao. platform/deploy.yaml. Toa toy izao izany:

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

fanamarihana: Azonao atao ny mampiasa Kustomize mba hiparitaka amin'ny tontolo samihafa amin'ny fampiasana overlay: ohatra.

fanamarihana: fampiasana valueFrom: secretKeyRef. Azafady, ampiasao ity endri-javatra Kubernetes ity na dia mandritra ny fampandrosoana aza mba hitazomana ny tsiambaratelonao.

Azo inoana fa efa manana rafitra tianao indrindra ianao amin'ny fitantanana ny tsiambaratelo Kubernetes. Raha tsy izany dia ireto misy safidy vitsivitsy: Ampidiro amin'ny KMS an'ny mpanome rahona anao izy ireo ary ampidiro ao amin'ny K8S ho tsiambaratelo amin'ny alàlan'ny fantsona CD − Mozilla SOPS - hiasa tsara miaraka amin'ny tsiambaratelo Kustomize. Misy fitaovana hafa, toy ny dotGPG, izay manao asa mitovy: HashiCorp Vault, Amboary ny Plugins Secret Value.

Ingress

Raha tsy misafidy ny hampiasa seranan-tsambo eo an-toerana ianao, dia mila Ingress Controller voarindra. Raha tsy mampiasa ianao ingress-nginx (Sarin'ny familiana) dia azo inoana fa efa fantatrao fa mila mametraka ireo fanamarihana ilaina ianao ingress-patch.yaml.tmpl na platform/ingress.yaml. Raha mampiasa ingress-nginx ianao ary mahita kilasy ingress nginx misy mpifandanja entana manondro azy ary fidirana DNS ivelany na wildcard DNS, dia tsara ny mandeha. Raha tsy izany, amboary ny Ingress Controller sy DNS, na tsidiho ireto dingana ireto ary tazony ny fifandraisana mivantana amin'ny pod.

TLS

Raha mampiasa ianao mpitantana fanamarinana na kube-lego sy letsencrypt - ny mari-pankasitrahana ho an'ny fidirana vaovao dia ho azo ho azy. Raha tsy izany, sokafy ingress-patch.yaml.tmpl ary amboary mifanaraka amin'ny filanao.

Alefaso!

Raha nanaraka izay rehetra voasoratra etsy ambony ianao, dia ny baiko make skaffold HOSTNAME=<you.example.com> tokony hanomboka ohatra misy ao <hostname>/camunda

Raha mbola tsy nametraka ny fidiranao amin'ny URL ho an'ny daholobe ianao dia azonao atao ny mamindra azy amin'ny localhost: kubectl port-forward -n camunda-bpm-demo svc/camunda-bpm 8080:8080 amin'ny localhost:8080/camunda

Miandrasa minitra vitsivitsy mandra-pahatongan'ny tomcat ho vonona tanteraka. Maka fotoana kely hanamarina ny anaran'ny sehatra ny Cert-manager. Azonao atao ny manara-maso ny logs amin'ny fampiasana fitaovana misy toy ny fitaovana toy ny kubetail, na mampiasa fotsiny kubectl:

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

Dingana manaraka

alàlana

Mifanaraka kokoa amin'ny fanefena ny Camunda BPM noho ny Kubernetes izany, saingy zava-dehibe ny manamarika fa amin'ny alàlan'ny default, ny fanamarinana dia kilemaina ao amin'ny REST API. Ianao dia afaka avelao ny fanamarinana fototra na mampiasa fomba hafa toy ny J.W.T.. Azonao atao ny mampiasa configmaps sy volumes hametahana ny xml, na xmlstarlet (jereo etsy ambony) hanitsiana ny rakitra efa misy ao amin'ny sary, ary na mampiasa wget na mametaka azy ireo amin'ny fampiasana container init sy volume iombonana.

Fitantanana fivoriana

Sahala amin'ny rindranasa maro hafa, ny Camunda BPM dia mitantana fotoam-pivoriana ao amin'ny JVM, ka raha te hanao kopia maro ianao dia azonao atao ny mametaka sessions (ohatra ho an'ny ingress-nginx), izay hisy mandra-panjavona ny kopia, na mametraka ny toetra Max-Age ho an'ny cookies. Ho an'ny vahaolana matanjaka kokoa dia azonao atao ny mametraka Session Manager ao amin'ny Tomcat. Lars manana lahatsoratra misaraka amin'ity lohahevitra ity, fa zavatra toy izao:

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

fanamarihana: azonao ampiasaina xmlstarlet fa tsy sed

Nampiasainay twemproxy eo anoloan'ny Google Cloud Memorystore, miaraka amin'ny memcached-session-manager (manohana an'i Redis) hampandeha azy.

Scaling

Raha efa azonao ny fotoam-pivoriana, dia ny famerana voalohany (ary matetika ny farany) amin'ny famerana ny Camunda BPM dia ny fifandraisana amin'ny angon-drakitra. Efa misy ny fanamboarana ampahany "avy amin'ny boaty" Andeha hofoanana koa ny intialSize ao amin'ny rakitra settings.xml. hametraka Horizontal Pod Autoscaler (HPA) ary azonao atao ny manitsy mora foana ny isan'ny pods.

Fangatahana sy fameperana

В platform/deployment.yaml Ho hitanao fa nosokajinay mafy ny sehatry ny loharanon-karena. Ity dia miasa tsara amin'ny HPA, saingy mety mitaky fanitsiana fanampiny. Ny patch kustomize dia mety amin'izany. Cm. ingress-patch.yaml.tmpl и ./kustomization.yaml.tmpl

famaranana

Noho izany dia nametraka Camunda BPM tao amin'ny Kubernetes izahay miaraka amin'ny metrika Prometheus, logs, database H2, TLS ary Ingress. Nanampy rakitra jar sy rakitra fikirakirana izahay mampiasa ConfigMaps sy Dockerfile. Niresaka momba ny fifanakalozana angon-drakitra amin'ny volume sy mivantana amin'ny fari-piainan'ny tontolo iainana avy amin'ny tsiambaratelo. Ho fanampin'izay, nanome topimaso momba ny fametrahana Camunda ho an'ny kopia marobe sy API voamarina izahay.

soratra masina

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, fandikan-teny lahatsoratra Alastair Firth, Lars Lange

Source: www.habr.com

Add a comment