Mlaku Camunda BPM ing Kubernetes

Mlaku Camunda BPM ing Kubernetes

Apa sampeyan nggunakake Kubernetes? Siap mindhah conto Camunda BPM saka mesin virtual, utawa mung nyoba mbukak ing Kubernetes? Ayo goleki sawetara konfigurasi umum lan item individu sing bisa dicocogake karo kabutuhan tartamtu.

Sampeyan nganggep yen sampeyan wis nggunakake Kubernetes sadurunge. Yen ora, apa ora njupuk dipikir ing nuntun lan ora miwiti kluster pisanan?

penulis

  • Alastair Firth (Alastair Firth) - Senior Site Reliability Engineer ing tim Camunda Cloud;
  • Lars Lange (Lars Lange) - insinyur DevOps ing Camunda.

Ing cendhak, banjur:

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

Oke, mbokmenawa ora bisa amarga sampeyan ora duwe skaffold lan kustomize diinstal. Inggih banjur maca ing!

Apa Camunda BPM

Camunda BPM minangka manajemen proses bisnis open source lan platform otomatisasi keputusan sing nyambungake pangguna bisnis lan pangembang piranti lunak. Iku becik kanggo koordinasi lan nyambungake wong, layanan (mikro) utawa malah bot! Sampeyan bisa maca liyane babagan kasus panggunaan sing beda ing link.

Apa nggunakake Kubernetes

Kubernetes wis dadi standar de facto kanggo mbukak aplikasi modern ing Linux. Kanthi nggunakake panggilan sistem tinimbang emulasi hardware lan kemampuan kernel kanggo ngatur memori lan ngoper tugas, wektu boot lan wektu wiwitan tetep minimal. Nanging, entuk manfaat paling gedhe bisa uga saka API standar sing diwenehake Kubernetes kanggo ngatur infrastruktur sing dibutuhake kabeh aplikasi: panyimpenan, jaringan, lan pemantauan. Umure 2020 taun ing wulan Juni 6 lan bisa uga dadi proyek sumber terbuka nomer loro (sawise Linux). Saiki wis aktif nyetabilake fungsine sawise pengulangan kanthi cepet sajrone sawetara taun kepungkur amarga dadi kritis kanggo beban kerja produksi ing saindenging jagad.

Camunda BPM Engine bisa gampang nyambung menyang aplikasi liyane sing mlaku ing kluster padha, lan Kubernetes menehi kaukur banget, ngijini sampeyan kanggo nambah biaya infrastruktur mung nalika pancene needed (lan gampang nyuda minangka needed).

Kualitas ngawasi uga apik banget karo alat kayata Prometheus, Grafana, Loki, Fluentd lan Elasticsearch, ngidini sampeyan ndeleng kabeh beban kerja ing kluster kanthi pusat. Dina iki kita bakal ndeleng carane ngleksanakake eksportir Prometheus menyang Java Virtual Machine (JVM).

Tujuane

Ayo goleki sawetara wilayah sing bisa ngatur gambar Camunda BPM Docker (GitHub) supaya bisa sesambungan karo Kubernetes.

  1. Log lan metrik;
  2. koneksi database;
  3. Authentication;
  4. Manajemen sesi.

Kita bakal ndeleng sawetara cara kanggo nggayuh tujuan kasebut lan nuduhake kabeh proses kanthi jelas.

komentar: Apa sampeyan nggunakake versi Enterprise? Delengen kene lan nganyari pranala gambar yen perlu.

Pangembangan alur kerja

Ing demo iki, kita bakal nggunakake Skaffold kanggo mbangun gambar Docker nggunakake Google Cloud Build. Nduwe dhukungan sing apik kanggo macem-macem alat (kayata Kustomize lan Helm), alat CI lan mbangun, lan panyedhiya infrastruktur. File skaffold.yaml.tmpl kalebu setelan kanggo Google Cloud Build lan GKE, nyedhiyakake cara sing gampang banget kanggo mbukak infrastruktur kelas produksi.

make skaffold bakal mbukak konteks Dockerfile menyang Cloud Build, mbangun gambar lan nyimpen ing GCR, banjur aplikasi manifests menyang kluster sampeyan. Iki sing ditindakake make skaffold, nanging Skaffold nduweni akeh fitur liyane.

Kanggo cithakan yaml ing Kubernetes, kita nggunakake kustomize kanggo ngatur overlay yaml tanpa ngrusak kabeh manifest, ngidini sampeyan nggunakake git pull --rebase kanggo dandan luwih. Saiki ana ing kubectl lan bisa digunakake kanthi apik kanggo perkara kasebut.

Kita uga nggunakake envsubst kanggo populate jeneng host lan ID project GCP ing file *.yaml.tmpl. Sampeyan bisa ndeleng cara kerjane ing makefile utawa mung nerusake luwih.

Kahanan sing diperlokake

  • Kluster kerja Kubernetes
  • Ngatur
  • Skaffold - kanggo nggawe gambar docker dhewe lan gampang penyebaran menyang GKE
  • Salinan kode iki
  • Envsubst

Alur kerja nggunakake manifes

Yen sampeyan ora pengin nggunakake kustomize utawa skaffold, sampeyan bisa ngrujuk menyang manifests ing generated-manifest.yaml lan adaptasi karo alur kerja sing sampeyan pilih.

Log lan metrik

Prometheus wis dadi standar kanggo ngumpulake metrik ing Kubernetes. Iku manggoni ceruk sing padha karo AWS Cloudwatch Metrics, Cloudwatch Alerts, Stackdriver Metrics, StatsD, Datadog, Nagios, vSphere Metrics lan liya-liyane. Iki minangka sumber terbuka lan nduweni basa pitakon sing kuat. Kita bakal ngandelake visualisasi kasebut menyang Grafana - dilengkapi akeh papan dashboard sing kasedhiya saka kothak. Padha disambungake kanggo saben liyane lan relatif gampang kanggo nginstal prometheus-operator.

Kanthi gawan, Prometheus nggunakake model ekstraksi <service>/metrics, lan nambah wadhah sidecar kanggo iki umum. Sayange, metrik JMX paling apik dicathet ing JVM, dadi wadah sidecar ora efisien. Ayo nyambung jmx_exporter mbukak sumber saka Prometheus menyang JVM kanthi nambahake menyang gambar wadhah sing bakal menehi dalan /metrics ing port beda.

Tambah Prometheus jmx_exporter menyang wadhah

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

Inggih, iku gampang. Eksportir bakal ngawasi tomcat lan nampilake metrik ing format Prometheus ing <svc>:9404/metrics

Persiyapan eksportir

Sing maca sing ati-ati bisa uga mikir saka ngendi asale prometheus-jmx.yaml? Ana akeh macem-macem sing bisa mbukak ing JVM, lan Tomcat mung salah siji saka wong-wong mau, supaya eksportir perlu sawetara konfigurasi tambahan. Konfigurasi standar kanggo tomcat, wildfly, kafka lan liya-liyane kasedhiya kene. Kita bakal nambah Tomcat minangka ConfigMap ing Kubernetes banjur pasang minangka volume.

Kaping pisanan, kita nambah file konfigurasi eksportir menyang direktori platform/config/

platform/config
└── prometheus-jmx.yaml

Banjur kita nambah ConfigMapGenerator в kustomization.yaml.tmpl:

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

Iki bakal nambah saben unsur files[] minangka unsur konfigurasi ConfigMap. ConfigMapGenerators apik amarga padha hash data konfigurasi lan meksa pod restart yen diganti. Dheweke uga nyuda jumlah konfigurasi ing Deployment amarga sampeyan bisa masang kabeh "folder" file konfigurasi ing siji VolumeMount.

Pungkasan, kita kudu masang ConfigMap minangka volume menyang 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
[...]

Apik banget. Yen Prometheus ora dikonfigurasi kanggo nindakake reresik lengkap, sampeyan bisa uga kudu marang kanggo ngresiki munggah pods. Pangguna Operator Prometheus bisa digunakake service-monitor.yaml kanggo miwiti. Jelajahi Service-monitor.yaml, desain operator и ServiceMonitorSpec sadurunge sampeyan miwiti.

Ngluwihi pola iki kanggo kasus panggunaan liyane

Kabeh file sing ditambahake menyang ConfigMapGenerator bakal kasedhiya ing direktori anyar /etc/config. Sampeyan bisa ngluwihi cithakan iki kanggo masang file konfigurasi liyane sing dibutuhake. Sampeyan bisa malah masang skrip wiwitan anyar. Sampeyan bisa nggunakake subPath kanggo masang file individu. Kanggo nganyari file xml, coba gunakake xmlstarlet tinimbang sed. Iku wis klebu ing gambar.

Majalah

Kabar apik! Log aplikasi wis kasedhiya ing stdout, contone karo kubectl logs. Fluentd (diinstal kanthi standar ing GKE) bakal nerusake log menyang Elasticsearch, Loki, utawa platform logging perusahaan sampeyan. Yen sampeyan pengin nggunakake jsonify kanggo log, sampeyan bisa ngetutake template ing ndhuwur kanggo nginstal mlebu maneh.

Database

Kanthi gawan, gambar bakal duwe database H2. Iki ora cocok kanggo kita, lan kita bakal nggunakake Google Cloud SQL karo Cloud SQL Proxy - iki bakal dibutuhake mengko kanggo ngatasi masalah internal. Iki minangka pilihan sing gampang lan dipercaya yen sampeyan ora duwe pilihan dhewe kanggo nyetel database. AWS RDS nyedhiyakake layanan sing padha.

Preduli saka database sing sampeyan pilih, kajaba H2, sampeyan kudu nyetel variabel lingkungan sing cocog ing platform/deploy.yaml. Iku katon kaya iki:

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

komentar: Sampeyan bisa nggunakake Kustomize kanggo nyebarake menyang lingkungan sing beda nggunakake overlay: conto.

komentar: panganggone valueFrom: secretKeyRef. Mangga, gunakake fitur Kubernetes iki malah sak pembangunan kanggo njaga rahasia aman.

Sampeyan bisa uga duwe sistem pilihan kanggo ngatur rahasia Kubernetes. Yen ora, ana sawetara opsi: Enkripsi nganggo KMS panyedhiya maya banjur nyuntikake menyang K8S minangka rahasia liwat pipa CD − Mozilla SOPS - bakal bisa uga banget ing kombinasi karo Rahasia Kustomize. Ana alat liyane, kayata dotGPG, sing nindakake fungsi sing padha: Kolong HashiCorp, Ngatur Plugins Nilai Rahasia.

Ingress

Yen sampeyan ora milih nggunakake port forwarding lokal, sampeyan butuh Ingress Controller sing wis dikonfigurasi. Yen sampeyan ora nggunakake mlebu-nginx (Bagan helm) banjur sampeyan bisa uga wis ngerti yen sampeyan kudu nginstal anotasi sing dibutuhake ing ingress-patch.yaml.tmpl utawa platform/ingress.yaml. Yen sampeyan nggunakake ingress-nginx lan ndeleng kelas ingress nginx kanthi load balancer nuding menyang lan entri DNS eksternal utawa wildcard DNS, sampeyan wis siap. Yen ora, ngatur Ingress Controller lan DNS, utawa skip langkah iki lan tetep sambungan langsung menyang pod.

TLS

Yen sampeyan nggunakake manager sertifikat utawa kube-lego lan letsencrypt - sertifikat kanggo login anyar bakal dipikolehi kanthi otomatis. Yen ora, mbukak ingress-patch.yaml.tmpl lan ngatur kanggo cocog karo kabutuhan.

Bukak!

Yen sampeyan tindakake kabeh ditulis ing ndhuwur, banjur printah make skaffold HOSTNAME=<you.example.com> kudu miwiti conto sing kasedhiya ing <hostname>/camunda

Yen sampeyan durung nyetel login menyang URL umum, sampeyan bisa pangalihan nganggo localhost: kubectl port-forward -n camunda-bpm-demo svc/camunda-bpm 8080:8080 ing localhost:8080/camunda

Enteni sawetara menit nganti tomcat rampung siap. Cert-manager bakal njupuk sawetara wektu kanggo verifikasi jeneng domain. Sampeyan banjur bisa ngawasi log nggunakake alat sing kasedhiya kayata alat kaya kubetail, utawa mung nggunakake kubectl:

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

Sabanjure langkah

Wewenang

Iki luwih cocog kanggo konfigurasi Camunda BPM tinimbang Kubernetes, nanging penting kanggo dicathet yen kanthi standar, otentikasi dipateni ing REST API. Sampeyan bisa ngaktifake otentikasi dhasar utawa nggunakake cara liyane kaya J.W.T.. Sampeyan bisa nggunakake configmaps lan volume kanggo mbukak xml, utawa xmlstarlet (ndeleng ndhuwur) kanggo ngowahi file ana ing gambar, lan salah siji nggunakake wget utawa mbukak nggunakake wadhah init lan volume sambungan.

Manajemen sesi

Kaya akeh aplikasi liyane, Camunda BPM nangani sesi ing JVM, dadi yen sampeyan pengin mbukak pirang-pirang replika, sampeyan bisa ngaktifake sesi lengket (contone kanggo ingress-nginx), sing bakal ana nganti replika ilang, utawa nyetel atribut Max-Age kanggo cookie. Kanggo solusi sing luwih mantep, sampeyan bisa masang Session Manager ing Tomcat. Lars wis kiriman kapisah babagan topik iki, nanging kaya:

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

komentar: sampeyan bisa nggunakake xmlstarlet tinimbang sed

Kita digunakake twemproxy ing ngarepe Google Cloud Memorystore, karo memcached-session-manager (ndukung Redis) kanggo mbukak.

Scaling

Yen sampeyan wis ngerti sesi, banjur watesan pisanan (lan asring pungkasan) kanggo skala Camunda BPM bisa dadi sambungan menyang database. Kustomisasi parsial wis kasedhiya "saka kothak" Ayo uga mateni intialSize ing file settings.xml. Tambah Horizontal Pod Autoscaler (HPA) lan sampeyan bisa kanthi otomatis ngukur jumlah pods.

Panjaluk lan watesan

В platform/deployment.yaml Sampeyan bakal weruh yen kita wis hard-kode kolom sumber daya. Iki bisa dianggo kanthi apik karo HPA, nanging mbutuhake konfigurasi tambahan. Patch kustomize cocok kanggo iki. Cm. ingress-patch.yaml.tmpl и ./kustomization.yaml.tmpl

kesimpulan

Dadi, kita nginstal Camunda BPM ing Kubernetes kanthi metrik Prometheus, log, database H2, TLS lan Ingress. Kita nambah file jar lan file konfigurasi nggunakake ConfigMaps lan Dockerfile. Kita ngomong babagan ijol-ijolan data menyang volume lan langsung menyang variabel lingkungan saka rahasia. Kajaba iku, kita nyedhiyakake ringkesan babagan nyiyapake Camunda kanggo macem-macem replika lan API sing wis dikonfirmasi.

referensi

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, terjemahan artikel Alastair Firth, Lars Lange

Source: www.habr.com

Add a comment