Pagpadagan sa Camunda BPM sa Kubernetes

Pagpadagan sa Camunda BPM sa Kubernetes

Gigamit ba nimo ang Kubernetes? Andam nga ibalhin ang imong Camunda BPM nga mga instance gikan sa mga virtual machine, o tingali sulayan lang kini sa pagdagan sa Kubernetes? Atong tan-awon ang pipila ka komon nga mga configuration ug indibidwal nga mga butang nga mahimong ipahaum sa imong piho nga mga panginahanglan.

Nagtuo kini nga gigamit nimo ang Kubernetes kaniadto. Kung dili, nganong dili tan-awon giya ug dili magsugod sa imong unang cluster?

tigsulat

  • Alastair Firth (Alastair Firth) - Senior Site Reliability Engineer sa Camunda Cloud team;
  • Lars Lange (Lars Lange) - DevOps engineer sa Camunda.

Sa laktod:

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

Okay, lagmit wala kini molihok tungod kay wala kay naka-install nga skaffold ug kustomize. Aw unya basaha!

Unsa ang Camunda BPM

Ang Camunda BPM usa ka bukas nga gigikanan nga pagdumala sa proseso sa negosyo ug platform sa automation sa desisyon nga nagkonektar sa mga tiggamit sa negosyo ug mga developer sa software. Maayo kini alang sa pag-coordinate ug pagkonektar sa mga tawo, (micro) nga serbisyo o bisan mga bot! Mahimo nimong mabasa ang dugang bahin sa lainlaing mga kaso sa paggamit sa link.

Nganong gamiton ang Kubernetes

Ang Kubernetes nahimong de facto nga sumbanan sa pagpadagan sa modernong mga aplikasyon sa Linux. Pinaagi sa paggamit sa mga tawag sa sistema imbes nga hardware emulation ug ang abilidad sa kernel sa pagdumala sa memorya ug pagbalhin sa buluhaton, ang oras sa pag-boot ug oras sa pagsugod gitipigan sa labing gamay. Bisan pa, ang pinakadako nga benepisyo mahimong moabut gikan sa standard nga API nga gihatag sa Kubernetes aron ma-configure ang imprastraktura nga gikinahanglan sa tanan nga mga aplikasyon: pagtipig, networking, ug pag-monitor. Kini nahimo nga 2020 ka tuig ang edad kaniadtong Hunyo 6 ug tingali ang ikaduha nga pinakadako nga open source nga proyekto (pagkahuman sa Linux). Bag-ohay lang kini nga aktibo nga nagpalig-on sa pagpaandar niini pagkahuman sa paspas nga pag-uli sa miaging pipila ka tuig tungod kay kini nahimong kritikal sa mga workload sa produksiyon sa tibuuk kalibutan.

Ang Camunda BPM Engine dali nga makakonektar sa ubang mga aplikasyon nga nagdagan sa parehas nga cluster, ug ang Kubernetes naghatag og maayo nga scalability, nga nagtugot kanimo sa pagdugang sa mga gasto sa imprastraktura kung gikinahanglan lamang (ug dali nga makunhuran kini kung gikinahanglan).

Ang kalidad sa pag-monitor labi usab nga gipauswag sa mga himan sama sa Prometheus, Grafana, Loki, Fluentd ug Elasticsearch, nga gitugotan ka nga makita sa sentro ang tanan nga mga karga sa trabaho sa usa ka kumpol. Karon atong tan-awon kung giunsa pagpatuman ang Prometheus exporter sa Java Virtual Machine (JVM).

Mga tumong

Atong tan-awon ang pipila ka mga lugar diin mahimo naton ipasibo ang imahe sa Camunda BPM Docker (github) aron kini makig-uban og maayo sa Kubernetes.

  1. Mga log ug sukatan;
  2. Mga koneksyon sa database;
  3. Pagpamatuod;
  4. Pagdumala sa sesyon.

Atong tan-awon ang daghang mga paagi aron makab-ot kini nga mga katuyoan ug klaro nga ipakita ang tibuuk nga proseso.

Примечание: Gigamit ba nimo ang bersyon sa Enterprise? Tan-awa dinhi ug pag-update sa mga link sa imahe kung gikinahanglan.

Pag-uswag sa workflow

Sa kini nga demo, among gamiton ang Skaffold sa paghimo og mga imahe sa Docker gamit ang Google Cloud Build. Kini adunay maayong suporta alang sa lain-laing mga himan (sama sa Kustomize ug Helm), CI ug pagtukod og mga himan, ug mga tighatag sa imprastraktura. file skaffold.yaml.tmpl Naglakip sa mga setting alang sa Google Cloud Build ug GKE, nga naghatag usa ka yano kaayo nga paagi sa pagpadagan sa imprastraktura nga grado sa produksiyon.

make skaffold i-load ang konteksto sa Dockerfile sa Cloud Build, paghimo sa imahe ug itago kini sa GCR, ug dayon i-apply ang mga manifest sa imong cluster. Mao kini ang gibuhat niini make skaffold, apan ang Skaffold adunay daghang ubang mga bahin.

Para sa yaml templates sa Kubernetes, among gigamit ang customize sa pagdumala sa yaml overlays nga walay forking sa tibuok manifest, nga nagtugot kanimo sa paggamit git pull --rebase alang sa dugang nga mga kalamboan. Karon kini naa sa kubectl ug kini maayo kaayo alang sa ingon nga mga butang.

Gigamit usab namo ang envsubst aron i-populate ang hostname ug GCP project ID sa *.yaml.tmpl files. Makita nimo kung giunsa kini molihok makefile o padayon pa lang.

Ang gikinahanglan nga mga kondisyon

  • Gugus sa trabaho Kubernetes
  • Ipasibo
  • Skaffold - alang sa paghimo sa imong kaugalingon nga docker nga mga imahe ug dali nga pag-deploy sa GKE
  • Kopya niini nga kodigo
  • Envsubst

Workflow gamit ang mga manifest

Kung dili nimo gusto nga gamiton ang kustomize o skaffold, mahimo nimong i-refer ang mga manifest sa generated-manifest.yaml ug ipahiangay kini sa workflow nga imong gipili.

Mga log ug sukatan

Ang Prometheus nahimong sumbanan sa pagkolekta sa mga sukatan sa Kubernetes. Nag-okupar kini sa samang niche sama sa AWS Cloudwatch Metrics, Cloudwatch Alerts, Stackdriver Metrics, StatsD, Datadog, Nagios, vSphere Metrics ug uban pa. Kini mao ang bukas nga tinubdan ug adunay usa ka gamhanan nga pangutana nga pinulongan. Itugyan namo ang visualization sa Grafana - kini adunay daghang gidaghanon sa mga dashboard nga anaa sa gawas sa kahon. Sila konektado sa usag usa ug sayon ​​​​nga i-install prometheus-operator.

Sa kasagaran, gigamit ni Prometheus ang modelo sa pagkuha <service>/metrics, ug ang pagdugang sa mga sudlanan sa sidecar alang niini kasagaran. Ikasubo, ang mga sukatan sa JMX labing maayo nga na-log sa sulod sa JVM, busa ang mga sulud sa sidecar dili ingon ka episyente. Magkonektar ta jmx_exporter bukas nga tinubdan gikan sa Prometheus ngadto sa JVM pinaagi sa pagdugang niini ngadto sa sudlanan nga larawan nga maghatag sa dalan /metrics sa laing pantalan.

Idugang ang Prometheus jmx_exporter sa sudlanan

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

Aw, sayon ​​ra kana. Ang exporter mag-monitor sa tomcat ug magpakita sa mga metrics niini sa Prometheus format sa <svc>:9404/metrics

Pag-setup sa eksporter

Ang matinagdanon nga magbabasa mahimong maghunahuna kung diin kini gikan prometheus-jmx.yaml? Adunay daghang lain-laing mga butang nga mahimong modagan sa JVM, ug tomcat mao lamang ang usa kanila, mao nga ang exporter nagkinahanglan sa pipila ka dugang nga configuration. Ang mga sumbanan nga pag-configure alang sa tomcat, wildfly, kafka ug uban pa magamit dinhi. Atong idugang ang tomcat ingon ConfigMap sa Kubernetes ug dayon i-mount kini isip volume.

Una, among idugang ang exporter configuration file sa among platform/config/ directory

platform/config
└── prometheus-jmx.yaml

Dayon atong idugang ConfigMapGenerator в kustomization.yaml.tmpl:

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

Kini makadugang sa matag elemento files[] isip usa ka elemento sa configuration sa ConfigMap. Nindot ang ConfigMapGenerators tungod kay gi-hash nila ang data sa pag-configure ug gipugos ang usa ka pod nga i-restart kung kini mausab. Gipakunhod usab nila ang gidaghanon sa configuration sa Deployment tungod kay mahimo nimong i-mount ang tibuok nga "folder" sa mga configuration file sa usa ka VolumeMount.

Sa katapusan, kinahanglan natong i-mount ang ConfigMap isip volume sa 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
[...]

Kahibulongan. Kung ang Prometheus wala ma-configure aron buhaton ang usa ka hingpit nga paglimpyo, mahimo nimo kini isulti aron limpyohan ang mga pods. Ang mga tiggamit sa Prometheus Operator mahimong magamit service-monitor.yaml sa pagsugod. Susihon Service-monitor.yaml, disenyo sa operator и ServiceMonitorSpec sa dili ka pa magsugod.

Ang pagpalapad niini nga sumbanan ngadto sa ubang mga kaso sa paggamit

Ang tanan nga mga file nga among idugang sa ConfigMapGenerator mahimong magamit sa bag-ong direktoryo /etc/config. Mahimo nimong i-extend kini nga template aron i-mount ang bisan unsang ubang mga file sa pag-configure nga imong kinahanglan. Mahimo ka pa nga mag-mount sa usa ka bag-ong script sa pagsugod. Mahimo nimong gamiton subPath aron i-mount ang indibidwal nga mga file. Aron ma-update ang mga xml file, ikonsiderar ang paggamit xmlstarlet imbes nga sed. Nalakip na kini sa hulagway.

Mga magasin

Maayong balita! Ang mga log sa aplikasyon anaa na sa stdout, pananglitan sa kubectl logs. Ang Fluentd (gi-install nga default sa GKE) ipadala ang imong mga troso sa Elasticsearch, Loki, o sa imong platform sa pag-log sa negosyo. Kung gusto nimo gamiton ang jsonify alang sa mga troso mahimo nimong sundon ang template sa ibabaw aron ma-install pag-logback.

Database

Sa kasagaran, ang hulagway adunay H2 database. Dili kini angay alang kanamo, ug among gamiton ang Google Cloud SQL nga adunay Cloud SQL Proxy - kinahanglan kini sa ulahi aron masulbad ang mga internal nga problema. Kini usa ka yano ug kasaligan nga kapilian kung wala ka sa imong kaugalingon nga mga gusto sa pag-set up sa database. Naghatag ang AWS RDS og parehas nga serbisyo.

Bisan unsa pa ang database nga imong gipili, gawas kung kini H2, kinahanglan nimo nga itakda ang angay nga mga variable sa palibot sa platform/deploy.yaml. Ingon niini ang hitsura:

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

Примечание: Mahimo nimong gamiton ang Kustomize aron i-deploy sa lainlaing mga palibot gamit ang usa ka overlay: usa ka panig-ingnan.

Примечание: paggamit valueFrom: secretKeyRef. Palihug, gamita kini nga bahin sa Kubernetes bisan sa panahon sa pag-uswag aron mapadayon ang imong mga sekreto nga luwas.

Lagmit nga duna na kay gusto nga sistema sa pagdumala sa mga sekreto sa Kubernetes. Kung dili, aniay pipila ka mga kapilian: Pag-encrypt niini gamit ang KMS sa imong cloud provider ug dayon i-inject kini sa K8S isip sekreto pinaagi sa CD pipeline − Mozilla SOPS - molihok nga maayo sa kombinasyon sa mga sekreto sa Kustomize. Adunay ubang mga himan, sama sa dotGPG, nga naghimo sa parehas nga mga gimbuhaton: HashiCorp Vault, Ipasibo ang Sekreto nga Mga Plugin sa Bili.

Ingress

Gawas kon mopili ka sa paggamit sa lokal nga port forwarding, kinahanglan nimo ang usa ka na-configure nga Ingress Controller. Kung dili nimo gamiton pagsulod-nginx (Helm nga tsart) unya lagmit nahibal-an na nimo nga kinahanglan nimo nga i-install ang kinahanglan nga mga anotasyon sa ingress-patch.yaml.tmpl o platform/ingress.yaml. Kung nagagamit ka sa ingress-nginx ug makakita ug nginx ingress class nga adunay load balancer nga nagtudlo niini ug external DNS o wildcard DNS entry, maayo ka nga moadto. Kung dili, i-configure ang Ingress Controller ug DNS, o laktawan kini nga mga lakang ug ipadayon ang direktang koneksyon sa pod.

TLS

Kung mogamit ka sertipiko-manedyer o kube-lego ug letsencrypt - ang mga sertipiko alang sa bag-ong login awtomatikong makuha. Kung dili, ablihi ingress-patch.yaml.tmpl ug ipahiangay kini aron mohaum sa imong mga panginahanglan.

Paglusad!

Kung gisunod nimo ang tanan nga nahisulat sa ibabaw, dayon ang mando make skaffold HOSTNAME=<you.example.com> kinahanglan maglunsad og usa ka magamit nga pananglitan sa <hostname>/camunda

Kung wala nimo gibutang ang imong login sa usa ka publiko nga URL, mahimo nimo kini i-redirect gamit localhost: kubectl port-forward -n camunda-bpm-demo svc/camunda-bpm 8080:8080 sa localhost:8080/camunda

Paghulat pipila ka minuto hangtod ang tomcat hingpit nga andam. Ang Cert-manager mogahin ug panahon sa pagmatuod sa domain name. Mahimo nimong bantayan ang mga log gamit ang magamit nga mga himan sama sa usa ka himan sama sa kubetail, o yano nga paggamit sa kubectl:

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

Sunod nga mga lakang

Awtorisasyon

Mas may kalabotan kini sa pag-configure sa Camunda BPM kaysa sa Kubernetes, apan hinungdanon nga timan-an nga pinaagi sa default, ang pag-authenticate gi-disable sa REST API. Mahimo nimo i-enable ang basic authentication o mogamit ug laing paagi sama sa Ang JWT. Mahimo nimong gamiton ang mga configmap ug mga volume aron makarga ang xml, o xmlstarlet (tan-awa sa ibabaw) aron ma-edit ang mga naa na nga file sa imahe, ug magamit ang wget o i-load kini gamit ang init nga sudlanan ug usa ka gipaambit nga volume.

Pagdumala sa sesyon

Sama sa daghang uban pang mga aplikasyon, ang Camunda BPM nagdumala sa mga sesyon sa JVM, mao nga kung gusto nimo nga magpadagan og daghang mga replika, mahimo nimong magamit ang mga sticky session (pananglitan alang sa ingress-nginx), nga maglungtad hangtod mawala ang replika, o itakda ang Max-Age attribute para sa cookies. Alang sa mas lig-on nga solusyon, mahimo nimong i-deploy ang Session Manager sa Tomcat. Lars adunay bulag nga post niini nga hilisgutan, apan usa ka butang sama sa:

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

Примечание: mahimo nimong gamiton ang xmlstarlet imbes nga sed

Gigamit namo twemproxy atubangan sa Google Cloud Memorystore, uban sa memcached-session-manager (nagsuporta sa Redis) sa pagpadagan niini.

Pag-scale

Kung nakasabut ka na sa mga sesyon, nan ang una (ug kasagaran ang katapusan) nga limitasyon sa pag-scale sa Camunda BPM mahimong koneksyon sa database. Ang partial customization anaa na "gikan sa kahon" I-disable usab nato ang intialSize sa settings.xml file. Idugang Horizontal Pod Autoscaler (HPA) ug dali ra nimo masukod ang gidaghanon sa mga pod.

Mga hangyo ug mga pagdili

В platform/deployment.yaml Imong makita nga among gi-hard-code ang resources field. Maayo kini sa HPA, apan mahimong magkinahanglan og dugang nga configuration. Ang customize patch angay alang niini. Cm. ingress-patch.yaml.tmpl и ./kustomization.yaml.tmpl

konklusyon

Busa among gi-install ang Camunda BPM sa Kubernetes nga adunay Prometheus metrics, logs, H2 database, TLS ug Ingress. Nagdugang kami og mga jar files ug configuration files gamit ang ConfigMaps ug Dockerfile. Naghisgot kami bahin sa pagbaylo sa datos sa mga volume ug direkta sa mga variable sa palibot gikan sa mga sekreto. Dugang pa, naghatag kami usa ka kinatibuk-an nga pagtan-aw sa pag-set up sa Camunda alang sa daghang mga replika ug usa ka gipamatud-an nga API.

mga pakisayran

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, paghubad mga artikulo Alastair Firth, Lars Lange

Source: www.habr.com

Idugang sa usa ka comment