Ngajalankeun Camunda BPM on Kubernetes

Ngajalankeun Camunda BPM on Kubernetes

Naha anjeun nganggo Kubernetes? Siap pikeun mindahkeun instansi Camunda BPM anjeun kaluar tina mesin virtual, atawa meureun ngan coba ngajalankeun aranjeunna dina Kubernetes? Hayu urang tingali sababaraha konfigurasi umum sareng item individu anu tiasa disaluyukeun sareng kabutuhan khusus anjeun.

Éta nganggap yén anjeun parantos nganggo Kubernetes sateuacanna. Lamun henteu, naha henteu nyandak katingal di kapamimpinan na teu ngamimitian klaster munggaran anjeun?

pangarang

  • Alastair Firth (Alastair Firth) - Insinyur Reliabilitas Loka Senior dina tim Camunda Cloud;
  • Lars Lange (Lars Lange) - insinyur DevOps di Camunda.

Pondokna:

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

Oké, sigana mah teu hasil sabab teu boga skaffold na kustomize dipasang. Muhun lajeng baca on!

Naon Camunda BPM

Camunda BPM mangrupikeun manajemén prosés bisnis open source sareng platform automation kaputusan anu ngahubungkeun pangguna bisnis sareng pamekar parangkat lunak. Éta idéal pikeun koordinasi sareng nyambungkeun jalma, jasa (mikro) atanapi bahkan bot! Anjeun tiasa maca langkung seueur ngeunaan kasus pamakean anu béda di link.

Naha make Kubernetes

Kubernetes parantos janten standar de facto pikeun ngajalankeun aplikasi modern dina Linux. Ku ngagunakeun sauran sistem tinimbang émulasi hardware sareng kamampuan kernel pikeun ngatur mémori sareng gentos tugas, waktos boot sareng waktos ngamimitian dijaga minimal. Nanging, kauntungan anu paling ageung tiasa asalna tina API standar anu disayogikeun ku Kubernetes pikeun ngonpigurasikeun infrastruktur anu diperyogikeun ku sadaya aplikasi: neundeun, jaringan, sareng ngawaskeun. Éta tos 2020 taun dina Juni 6 sareng sigana mangrupikeun proyék open source kadua panggedéna (sanggeus Linux). Éta nembe aktip nyaimbangkeun pungsionalitasna saatos iterasi gancang dina sababaraha taun ka pengker sabab janten kritis kana beban kerja produksi di sakumna dunya.

Camunda BPM Engine bisa kalayan gampang nyambung ka aplikasi sejenna ngajalankeun on klaster sarua, sarta Kubernetes nyadiakeun scalability unggulan, ngamungkinkeun Anjeun pikeun ngaronjatkeun waragad infrastruktur ngan lamun bener diperlukeun (jeung gampang ngurangan aranjeunna sakumaha diperlukeun).

Kualitas ngawaskeun ogé ningkat pisan sareng alat sapertos Prometheus, Grafana, Loki, Fluentd sareng Elasticsearch, anu ngamungkinkeun anjeun ningali sacara sentral sadaya beban kerja dina klaster. Dinten ieu kami bakal ningali kumaha nerapkeun eksportir Prometheus kana Mesin Virtual Java (JVM).

gol

Hayu urang tingali sababaraha daérah dimana urang tiasa ngaropea gambar Camunda BPM Docker (github) supados tiasa berinteraksi sareng Kubernetes.

  1. Log sareng métrik;
  2. sambungan databés;
  3. Auténtikasi;
  4. Manajemén sési.

Urang bakal ningali sababaraha cara pikeun ngahontal tujuan ieu sareng nunjukkeun sacara jelas sadayana prosés.

nyarios: Dupi anjeun nganggo versi Enterprise? Neuteup di dieu sareng ngapdet tautan gambar upami diperyogikeun.

Ngembangkeun workflow

Dina demo ieu, urang bakal nganggo Skaffold pikeun ngawangun gambar Docker nganggo Google Cloud Build. Éta gaduh dukungan anu saé pikeun sababaraha alat (sapertos Kustomize sareng Helm), alat CI sareng ngawangun, sareng panyadia infrastruktur. File skaffold.yaml.tmpl ngawengku setélan pikeun Google Cloud Build jeung GKE, nyadiakeun cara basajan pisan pikeun ngajalankeun infrastruktur kelas produksi.

make skaffold bakal ngamuat kontéks Dockerfile kana Cloud Build, ngawangun gambar sareng simpen dina GCR, teras nerapkeun manifes kana kluster anjeun. Ieu naon eusina make skaffold, tapi Skaffold boga loba fitur sejenna.

Pikeun témplat yaml di Kubernetes, kami nganggo kustomize pikeun ngatur overlay yaml tanpa ngajalin sadayana manifes, ngamungkinkeun anjeun ngagunakeun git pull --rebase pikeun perbaikan salajengna. Ayeuna éta di kubectl sareng tiasa dianggo pikeun hal-hal sapertos kitu.

Urang ogé nganggo envsubst pikeun ngeusian hostname sareng ID proyék GCP dina file *.yaml.tmpl. Anjeun tiasa ningali kumaha gawéna di makefile atawa ngan nuluykeun salajengna.

Kaayaan anu diperyogikeun

  • Kluster gawé Kubernetes
  • Sesuaikeun
  • Skaffold - pikeun nyieun gambar docker sorangan sarta gampang deployment ka GKE
  • Salinan kode ieu
  • Envsubst

Workflow ngagunakeun manifests

Upami anjeun henteu hoyong nganggo kustomize atanapi skaffold, anjeun tiasa ningali kana manifests di generated-manifest.yaml sareng adaptasi kana alur kerja anu anjeun pikahoyong.

Log na metrics

Prometheus parantos janten standar pikeun ngumpulkeun métrik dina Kubernetes. Éta ngeusian Ecological anu sami sareng AWS Cloudwatch Metrics, Cloudwatch Alerts, Stackdriver Metrics, StatsD, Datadog, Nagios, vSphere Metrics sareng anu sanésna. Éta open source sareng gaduh basa query anu kuat. Kami bakal ngandelkeun visualisasi ka Grafana - éta hadir kalayan sajumlah dasbor anu sayogi di luar kotak. Aranjeunna disambungkeun ka silih tur relatif gampang masang prometheus-operator.

Sacara standar, Prometheus ngagunakeun modél ékstraksi <service>/metrics, sarta nambahkeun peti sidecar pikeun ieu ilahar. Hanjakalna, métrik JMX paling saé dilebetkeun kana JVM, janten wadah sidecar henteu éfisién. Hayu urang sambungkeun jmx_exporter open source ti Prometheus ka JVM ku nambahkeun kana gambar wadahna nu bakal nyadiakeun jalur /metrics dina port béda.

Tambahkeun Prometheus jmx_exporter kana wadahna

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

Muhun, éta gampang. Éksportir bakal ngawas tomcat sareng nunjukkeun métrikna dina format Prometheus di <svc>:9404/metrics

Setélan ékspor

Nu maca attentive meureun heran ti mana asalna prometheus-jmx.yaml? Aya loba hal béda anu bisa dijalankeun dina JVM, sarta Tomcat téh ngan salah sahijina, jadi eksportir perlu sababaraha konfigurasi tambahan. Konfigurasi standar pikeun tomcat, wildfly, kafka sareng saterasna sayogi di dieu. Urang bakal nambahan Tomcat salaku ConfigMap dina Kubernetes lajeng dipasang salaku volume.

Kahiji, urang tambahkeun file konfigurasi eksportir kana platform kami / config / diréktori

platform/config
└── prometheus-jmx.yaml

Teras we nambahkeun ConfigMapGenerator в kustomization.yaml.tmpl:

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

Ieu bakal nambahan unggal unsur files[] salaku unsur konfigurasi ConfigMap. ConfigMapGenerators anu hébat sabab Hash data konfigurasi tur maksakeun pod balikan deui lamun robah. Éta ogé ngirangan jumlah konfigurasi dina Deployment sabab anjeun tiasa masang "folder" file konfigurasi dina hiji VolumeMount.

Tungtungna, urang kedah pasang ConfigMap salaku volume ka 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
[...]

Endah. Upami Prometheus henteu dikonpigurasikeun pikeun ngabersihkeun pinuh, anjeun kedah nyarioskeun pikeun ngabersihan pods. Pamaké Prometheus Operator tiasa nganggo service-monitor.yaml pikeun ngamimitian. Ngajalajah Service-monitor.yaml, desain operator и ServiceMonitorSpec sateuacan Anjeun ngamimitian.

Ngalegaan pola ieu ka kasus pamakéan séjén

Sadaya file anu kami tambahkeun ka ConfigMapGenerator bakal sayogi dina diréktori énggal /etc/config. Anjeun tiasa ngalegaan template ieu pikeun masang file konfigurasi anu sanés anu anjeun peryogikeun. Anjeun malah tiasa masang skrip ngamimitian énggal. Anjeun tiasa make subPath pikeun masang file individu. Pikeun ngapdet file xml, mertimbangkeun ngagunakeun xmlstarlet tinimbang sed. Eta geus kaasup kana gambar.

Majalah

warta hébat! Log aplikasi geus sadia on stdout, contona kalawan kubectl logs. Fluentd (dipasang sacara standar dina GKE) bakal neraskeun log anjeun ka Elasticsearch, Loki, atanapi platform logging perusahaan anjeun. Upami anjeun hoyong nganggo jsonify pikeun log maka anjeun tiasa nuturkeun témplat di luhur pikeun dipasang balik deui.

Basis data

Sacara standar, gambar bakal gaduh database H2. Ieu teu cocog pikeun urang, sarta kami bakal ngagunakeun Google Cloud SQL kalawan Cloud SQL Proxy - ieu bakal diperlukeun engké pikeun ngajawab masalah internal. Ieu mangrupikeun pilihan anu saderhana sareng dipercaya upami anjeun henteu gaduh karesep anjeun sorangan dina nyetél pangkalan data. AWS RDS nyayogikeun jasa anu sami.

Henteu paduli pangkalan data anu anjeun pilih, kecuali éta H2, anjeun kedah nyetél variabel lingkungan anu pas dina platform/deploy.yaml. Sigana mah kieu:

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

nyarios: Anjeun tiasa nganggo Kustomize pikeun nyebarkeun ka lingkungan anu béda nganggo overlay: conto.

nyarios: pamakéan valueFrom: secretKeyRef. Mangga, anggo fitur Kubernetes ieu malah salila ngembangkeun tetep Rahasia anjeun aman.

Sigana mah anjeun geus boga sistem pikaresep pikeun ngatur Rahasia Kubernetes. Upami henteu, ieu sababaraha pilihan: Énkripsi nganggo KMS panyadia awan anjeun teras nyuntikkeun kana K8S salaku rusiah via jalur pipa CD − Mozilla SOPS - bakal dianggo kacida alusna dina kombinasi kalayan Rahasia Kustomize. Aya alat anu sanés, sapertos dotGPG, anu ngalaksanakeun fungsi anu sami: Kolong HashiCorp, Sesuaikeun Rahasia Niley plugins.

Ingress

Kacuali anjeun milih ngagunakeun port diteruskeun lokal, anjeun peryogi Ingress Controller anu dikonpigurasi. Upami anjeun henteu nganggo asup-nginx (Bagan helm) mangka anjeun paling dipikaresep geus nyaho yén anjeun kudu masang annotations diperlukeun dina ingress-patch.yaml.tmpl atawa platform/ingress.yaml. Upami anjeun nganggo ingress-nginx sareng ningali kelas ingress nginx kalayan penyeimbang beban anu nunjuk ka dinya sareng éntri DNS éksternal atanapi wildcard DNS, anjeun badé angkat. Upami teu kitu, ngonpigurasikeun Ingress Controller sareng DNS, atanapi skip léngkah ieu sareng jaga sambungan langsung ka pod.

TLS

Upami anjeun nganggo ménéjer-ménéjer atawa kube-lego na letsencrypt - sertipikat pikeun login anyar bakal diala otomatis. Upami teu kitu, buka ingress-patch.yaml.tmpl jeung ngaropéa pikeun nyocogkeun ka kabutuhan Anjeun.

peluncuran!

Upami anjeun nuturkeun sadayana anu ditulis di luhur, teras paréntahna make skaffold HOSTNAME=<you.example.com> kedah ngajalankeun hiji conto sadia di <hostname>/camunda

Upami anjeun henteu acan nyetél login anjeun ka URL umum, anjeun tiasa alihan nganggo localhost: kubectl port-forward -n camunda-bpm-demo svc/camunda-bpm 8080:8080 dina localhost:8080/camunda

Antosan sababaraha menit dugi tomcat tos rengse siap. Cert-manajer bakal nyandak sababaraha waktu pikeun pariksa ngaran domain. Anjeun teras tiasa ngawas log nganggo alat anu sayogi sapertos alat sapertos kubetail, atanapi ngan ukur nganggo kubectl:

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

Léngkah-léngkah salajengna

mieun kuwasa

Ieu langkung relevan pikeun ngonpigurasikeun Camunda BPM tibatan Kubernetes, tapi penting pikeun dicatet yén sacara standar, auténtikasi ditumpurkeun dina REST API. Anjeun tiasa ngaktipkeun auténtikasi dasar atawa ngagunakeun métode séjén kawas J.W.T.. Anjeun tiasa make configmaps na jilid ka beban xml, atanapi xmlstarlet (tingali luhureun) pikeun ngédit file aya dina gambar, sarta boh ngagunakeun wget atanapi beban aranjeunna ngagunakeun wadah init sarta volume dibagikeun.

Manajemén sési

Sapertos seueur aplikasi anu sanés, Camunda BPM ngadamel sesi dina JVM, janten upami anjeun hoyong ngajalankeun sababaraha réplika, anjeun tiasa ngaktipkeun sési caket (contona pikeun ingress-nginx), anu bakal aya dugi ka réplika ngaleungit, atanapi nyetél atribut Max-Age pikeun cookies. Pikeun solusi anu langkung mantap, anjeun tiasa nyebarkeun Session Manager di Tomcat. Lars boga pos misah dina topik ieu, tapi sapertos kieu:

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

nyarios: anjeun tiasa nganggo xmlstarlet tinimbang sed

Urang dipaké twemproxy di hareup Google Cloud Memorystore, jeung memcached-sesi-manajer (ngadukung Redis) pikeun ngajalankeun éta.

Skala

Upami anjeun parantos ngartos sési, maka watesan anu munggaran (sareng sering terakhir) pikeun skala Camunda BPM tiasa janten sambungan kana pangkalan data. Kustomisasi parsial parantos sayogi "tina kotak" Hayu urang ogé nganonaktipkeun intialSize dina file settings.xml. Tambihan Horizontal Pod Autoscaler (HPA) tur anjeun bisa kalayan gampang otomatis skala jumlah pods.

Requests jeung larangan

В platform/deployment.yaml Anjeun bakal ningali yén kami geus hard-kode widang sumberdaya. Ieu jalan ogé kalawan HPA, tapi bisa merlukeun konfigurasi tambahan. Patch customize cocog pikeun ieu. Cm. ingress-patch.yaml.tmpl и ./kustomization.yaml.tmpl

kacindekan

Janten kami masang Camunda BPM dina Kubernetes sareng métrik Prometheus, log, database H2, TLS sareng Ingress. Kami nambihan file jar sareng file konfigurasi nganggo ConfigMaps sareng Dockerfile. Urang ngobrol ngeunaan tukeur data kana volume sareng langsung kana variabel lingkungan tina rahasia. Salaku tambahan, kami nyayogikeun tinjauan ngeunaan nyetél Camunda pikeun sababaraha réplika sareng API anu dioténtikasi.

rujukan

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, tarjamahan tulisan Alastair Firth, Lars Lange

sumber: www.habr.com

Tambahkeun komentar