Menjalankan Camunda BPM di Kubernetes

Menjalankan Camunda BPM di Kubernetes

Apakah Anda menggunakan Kubernetes? Siap untuk memindahkan instance Camunda BPM Anda dari mesin virtual, atau mungkin mencoba menjalankannya di Kubernetes? Mari kita lihat beberapa konfigurasi umum dan item individual yang dapat disesuaikan dengan kebutuhan spesifik Anda.

Diasumsikan bahwa Anda pernah menggunakan Kubernetes sebelumnya. Jika tidak, mengapa tidak kita lihat panduan dan tidak memulai cluster pertama Anda?

Penulis

  • Alastair Firth (Alastair Firth) - Insinyur Keandalan Situs Senior di tim Camunda Cloud;
  • Lars Lange (Lars Lange) - Insinyur DevOps di Camunda.

Singkatnya, lalu:

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

Oke, itu mungkin tidak berhasil karena Anda belum menginstal skaffold dan kustomize. Kalau begitu baca terus!

Apa itu BPM Camunda

Camunda BPM adalah platform manajemen proses bisnis dan otomatisasi keputusan sumber terbuka yang menghubungkan pengguna bisnis dan pengembang perangkat lunak. Ini ideal untuk mengoordinasikan dan menghubungkan orang, layanan (mikro), atau bahkan bot! Anda dapat membaca lebih lanjut tentang berbagai kasus penggunaan di link.

Mengapa menggunakan Kubernetes

Kubernetes telah menjadi standar de facto untuk menjalankan aplikasi modern di Linux. Dengan menggunakan panggilan sistem alih-alih emulasi perangkat keras dan kemampuan kernel untuk mengelola memori dan peralihan tugas, waktu booting dan waktu startup dijaga agar tetap minimum. Namun, manfaat terbesar mungkin datang dari API standar yang disediakan Kubernetes untuk mengonfigurasi infrastruktur yang diperlukan oleh semua aplikasi: penyimpanan, jaringan, dan pemantauan. Proyek ini berusia 2020 tahun pada bulan Juni 6 dan mungkin merupakan proyek open source terbesar kedua (setelah Linux). Baru-baru ini ia secara aktif menstabilkan fungsinya setelah melakukan iterasi cepat selama beberapa tahun terakhir karena fungsinya menjadi penting untuk beban kerja produksi di seluruh dunia.

Camunda BPM Engine dapat dengan mudah terhubung ke aplikasi lain yang berjalan di cluster yang sama, dan Kubernetes memberikan skalabilitas yang sangat baik, memungkinkan Anda meningkatkan biaya infrastruktur hanya ketika benar-benar diperlukan (dan dengan mudah menguranginya sesuai kebutuhan).

Kualitas pemantauan juga ditingkatkan secara signifikan dengan alat seperti Prometheus, Grafana, Loki, Fluentd, dan Elasticsearch, yang memungkinkan Anda melihat semua beban kerja dalam sebuah cluster secara terpusat. Hari ini kita akan melihat cara mengimplementasikan eksportir Prometheus ke dalam Java Virtual Machine (JVM).

Tujuan

Mari kita lihat beberapa area di mana kita dapat menyesuaikan image Camunda BPM Docker (github) sehingga berinteraksi dengan baik dengan Kubernetes.

  1. Log dan metrik;
  2. Koneksi basis data;
  3. Autentikasi;
  4. Manajemen sesi.

Kami akan melihat beberapa cara untuk mencapai tujuan ini dan menunjukkan dengan jelas keseluruhan prosesnya.

Catatan: Apakah Anda menggunakan versi Enterprise? Lihat di sini dan perbarui tautan gambar sesuai kebutuhan.

Pengembangan alur kerja

Dalam demo ini, kita akan menggunakan Skaffold untuk membuat image Docker menggunakan Google Cloud Build. Ini memiliki dukungan yang baik untuk berbagai alat (seperti Kustomize dan Helm), CI dan alat pembangunan, serta penyedia infrastruktur. Mengajukan skaffold.yaml.tmpl mencakup setelan untuk Google Cloud Build dan GKE, yang menyediakan cara yang sangat sederhana untuk menjalankan infrastruktur tingkat produksi.

make skaffold akan memuat konteks Dockerfile ke Cloud Build, membuat image dan menyimpannya di GCR, lalu menerapkan manifes ke cluster Anda. Inilah yang dilakukannya make skaffold, tetapi Skaffold memiliki banyak fitur lainnya.

Untuk template yaml di Kubernetes, kami menggunakan kustomize untuk mengelola overlay yaml tanpa membagi seluruh manifes, sehingga Anda dapat menggunakannya git pull --rebase untuk perbaikan lebih lanjut. Sekarang ada di kubectl dan berfungsi dengan baik untuk hal-hal seperti itu.

Kami juga menggunakan envsubst untuk mengisi nama host dan ID project GCP di file *.yaml.tmpl. Anda dapat melihat cara kerjanya makefile atau lanjutkan lebih jauh.

Prasyarat

  • Klaster kerja Kubernetes
  • Sesuaikan
  • Perancah - untuk membuat image buruh pelabuhan Anda sendiri dan penerapan yang mudah ke GKE
  • Salinan kode ini
  • Envsubst

Alur kerja menggunakan manifes

Jika Anda tidak ingin menggunakan kustomize atau skaffold, Anda dapat merujuk ke manifes di generated-manifest.yaml dan sesuaikan dengan alur kerja pilihan Anda.

Log dan metrik

Prometheus telah menjadi standar untuk mengumpulkan metrik di Kubernetes. Ini menempati ceruk yang sama dengan AWS Cloudwatch Metrics, Cloudwatch Alerts, Stackdriver Metrics, StatsD, Datadog, Nagios, vSphere Metrics, dan lainnya. Ini adalah open source dan memiliki bahasa query yang kuat. Kami akan mempercayakan visualisasinya kepada Grafana - ia hadir dengan sejumlah besar dasbor yang tersedia langsung dari kotaknya. Mereka terhubung satu sama lain dan relatif mudah dipasang prometheus-operator.

Secara default, Prometheus menggunakan model ekstraksi <service>/metrics, dan menambahkan wadah sespan untuk ini adalah hal biasa. Sayangnya, metrik JMX paling baik dicatat dalam JVM, sehingga container sespan tidak seefisien itu. Mari terhubung jmx_eksportir open source dari Prometheus ke JVM dengan menambahkannya ke gambar container yang akan menyediakan jalurnya /metrics pada port yang berbeda.

Tambahkan Prometheus jmx_exporter ke wadah

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

Ya, itu mudah. Eksportir akan memantau kucing jantan dan menampilkan metriknya dalam format Prometheus di <svc>:9404/metrics

Pengaturan eksportir

Pembaca yang penuh perhatian mungkin bertanya-tanya dari mana asalnya prometheus-jmx.yaml? Ada banyak hal berbeda yang dapat dijalankan di JVM, dan Tomcat hanyalah salah satunya, sehingga eksportir memerlukan beberapa konfigurasi tambahan. Tersedia konfigurasi standar untuk Tomcat, Wildfly, Kafka, dan sebagainya di sini. Kami akan menambahkan Tomcat sebagai Peta Konfigurasi di Kubernetes lalu pasang sebagai volume.

Pertama, kami menambahkan file konfigurasi eksportir ke direktori platform/config/ kami

platform/config
└── prometheus-jmx.yaml

Lalu kami menambahkan ConfigMapGenerator в kustomization.yaml.tmpl:

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

Ini akan menambahkan setiap elemen files[] sebagai elemen konfigurasi ConfigMap. ConfigMapGenerators sangat bagus karena mereka meng-hash data konfigurasi dan memaksa restart pod jika ada perubahan. Mereka juga mengurangi jumlah konfigurasi di Deployment karena Anda dapat memasang seluruh "folder" file konfigurasi dalam satu VolumeMount.

Terakhir, kita perlu memasang ConfigMap sebagai volume ke 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
[...]

Luar biasa. Jika Prometheus tidak dikonfigurasi untuk melakukan pembersihan menyeluruh, Anda mungkin harus memerintahkannya untuk membersihkan pod. Pengguna Operator Prometheus dapat menggunakan service-monitor.yaml untuk memulai. Mengeksplorasi Service-monitor.yaml, desain operator и Spesifikasi Monitor Layanan sebelum kamu memulai.

Memperluas pola ini ke kasus penggunaan lainnya

Semua file yang kita tambahkan ke ConfigMapGenerator akan tersedia di direktori baru /etc/config. Anda dapat memperluas templat ini untuk memasang file konfigurasi lain yang Anda perlukan. Anda bahkan dapat memasang skrip startup baru. Anda dapat gunakan subJalur untuk memasang file individual. Untuk memperbarui file xml, pertimbangkan untuk menggunakan xmlstarlet bukannya sed. Sudah disertakan dalam gambar.

Majalah

Kabar baik! Log aplikasi sudah tersedia di stdout, misalnya dengan kubectl logs. Fluentd (diinstal secara default di GKE) akan meneruskan log Anda ke Elasticsearch, Loki, atau platform logging perusahaan Anda. Jika Anda ingin menggunakan jsonify untuk log maka Anda dapat mengikuti template di atas untuk menginstal masuk kembali.

Basis data

Secara default, gambar akan memiliki database H2. Ini tidak cocok untuk kami, dan kami akan menggunakan Google Cloud SQL dengan Cloud SQL Proxy - ini nantinya akan diperlukan untuk menyelesaikan masalah internal. Ini adalah opsi sederhana dan andal jika Anda tidak memiliki preferensi sendiri dalam menyiapkan database. AWS RDS menyediakan layanan serupa.

Terlepas dari database yang Anda pilih, kecuali H2, Anda harus mengatur variabel lingkungan yang sesuai platform/deploy.yaml. Ini terlihat seperti ini:

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

Catatan: Anda dapat menggunakan Kustomize untuk menerapkan ke lingkungan yang berbeda menggunakan overlay: contoh.

Catatan: penggunaan valueFrom: secretKeyRef. Mohon gunakan fitur Kubernetes ini bahkan selama pengembangan untuk menjaga rahasia Anda tetap aman.

Kemungkinan Anda sudah memiliki sistem pilihan untuk mengelola rahasia Kubernetes. Jika tidak, berikut beberapa opsinya: Mengenkripsinya dengan KMS penyedia cloud Anda dan kemudian memasukkannya ke K8S sebagai rahasia melalui pipa CD - SOP Mozilla - akan bekerja sangat baik jika dikombinasikan dengan rahasia Kustomize. Ada alat lain, seperti dotGPG, yang menjalankan fungsi serupa: Vault HashiCorp, Sesuaikan Plugin Nilai Rahasia.

Jalan masuk

Kecuali Anda memilih untuk menggunakan penerusan port lokal, Anda memerlukan Pengontrol Ingress yang dikonfigurasi. Jika Anda tidak menggunakan masuknya-nginx (Bagan helm) maka kemungkinan besar Anda sudah tahu bahwa Anda perlu memasang anotasi yang diperlukan ingress-patch.yaml.tmpl или platform/ingress.yaml. Jika Anda menggunakan ingress-nginx dan melihat kelas ingress nginx dengan penyeimbang beban yang mengarah ke sana dan entri DNS eksternal atau wildcard DNS, Anda siap melakukannya. Jika tidak, konfigurasikan Ingress Controller dan DNS, atau lewati langkah-langkah ini dan pertahankan koneksi langsung ke pod.

TLS

Jika Anda menggunakan manajer sertifikat atau kube-lego dan letsencrypt - sertifikat untuk login baru akan diperoleh secara otomatis. Jika tidak, buka ingress-patch.yaml.tmpl dan sesuaikan dengan kebutuhan Anda.

Meluncurkan!

Jika Anda mengikuti semua yang tertulis di atas, maka perintahnya make skaffold HOSTNAME=<you.example.com> harus meluncurkan instance yang tersedia di <hostname>/camunda

Jika Anda belum menyetel login Anda ke URL publik, Anda dapat mengalihkannya dengan localhost: kubectl port-forward -n camunda-bpm-demo svc/camunda-bpm 8080:8080 pada localhost:8080/camunda

Tunggu beberapa menit hingga tomcat benar-benar siap. Manajer sertifikat akan memerlukan waktu untuk memverifikasi nama domain. Anda kemudian dapat memantau log menggunakan alat yang tersedia seperti kubetail, atau cukup menggunakan kubectl:

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

Langkah selanjutnya

Otorisasi

Ini lebih relevan untuk mengonfigurasi Camunda BPM daripada Kubernetes, namun penting untuk dicatat bahwa secara default, otentikasi dinonaktifkan di REST API. Kamu bisa aktifkan otentikasi dasar atau gunakan metode lain seperti JWT. Anda dapat menggunakan configmaps dan volumes untuk memuat xml, atau xmlstarlet (lihat di atas) untuk mengedit file yang ada di gambar, dan menggunakan wget atau memuatnya menggunakan wadah init dan volume bersama.

Manajemen sesi

Seperti banyak aplikasi lainnya, Camunda BPM menangani sesi di JVM, jadi jika Anda ingin menjalankan banyak replika, Anda dapat mengaktifkan sesi tempel (misalnya untuk ingress-nginx), yang akan tetap ada hingga replikanya hilang, atau atur atribut Max-Age untuk cookie. Untuk solusi yang lebih kuat, Anda dapat menerapkan Session Manager di Tomcat. Lars punya pos terpisah tentang topik ini, tetapi sesuatu seperti:

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

Catatan: Anda dapat menggunakan xmlstarlet alih-alih sed

Kami menggunakan com.twemproxy di depan Google Cloud Memorystore, dengan memcached-sesi-manajer (mendukung Redis) untuk menjalankannya.

penskalaan

Jika Anda sudah memahami sesi, maka batasan pertama (dan seringkali yang terakhir) untuk menskalakan BPM Camunda mungkin adalah koneksi ke database. Kustomisasi sebagian sudah tersedia"dari kotak" Mari kita nonaktifkan juga initialSize di file settings.xml. Menambahkan Penskala Pod Horizontal (HPA) dan Anda dapat dengan mudah menskalakan jumlah pod secara otomatis.

Permintaan dan pembatasan

В platform/deployment.yaml Anda akan melihat bahwa kami telah melakukan hardcode pada bidang sumber daya. Ini berfungsi baik dengan HPA, namun mungkin memerlukan konfigurasi tambahan. Patch kustomize cocok untuk ini. Cm. ingress-patch.yaml.tmpl и ./kustomization.yaml.tmpl

Keluaran

Jadi kami menginstal Camunda BPM di Kubernetes dengan metrik Prometheus, log, database H2, TLS, dan Ingress. Kami menambahkan file jar dan file konfigurasi menggunakan ConfigMaps dan Dockerfile. Kami berbicara tentang pertukaran data ke volume dan langsung ke variabel lingkungan dari rahasia. Selain itu, kami memberikan gambaran umum tentang menyiapkan Camunda untuk beberapa replika dan API yang diautentikasi.

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

Sumber: www.habr.com

Tambah komentar