
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 dan tidak memulai cluster pertama Anda?
Penulis
- (Alastair Firth) - Insinyur Keandalan Situs Senior di tim Camunda Cloud;
- (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 .
Mengapa menggunakan Kubernetes
Kubernetes telah menjadi standar de facto untuk menjalankan aplikasi modern di LinuxDengan menggunakan panggilan sistem alih-alih emulasi perangkat keras dan membiarkan kernel mengelola memori dan peralihan tugas, waktu booting dan startup diminimalkan. Namun, keuntungan terbesar mungkin berasal dari API standar yang disediakan Kubernetes untuk mengkonfigurasi infrastruktur yang dibutuhkan oleh semua aplikasi: penyimpanan, jaringan, dan pemantauan. Kubernetes merayakan ulang tahun keenamnya pada Juni 2020, menjadikannya mungkin proyek open source terbesar kedua (setelah...). Linux). Baru-baru ini, sistem ini secara aktif menstabilkan fungsinya setelah mengalami iterasi cepat selama beberapa tahun terakhir, karena menjadi sangat 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 () sehingga berinteraksi dengan baik dengan Kubernetes.
- Log dan metrik;
- Koneksi basis data;
- Autentikasi;
- Manajemen sesi.
Kami akan melihat beberapa cara untuk mencapai tujuan ini dan menunjukkan dengan jelas keseluruhan prosesnya.
Catatan: Apakah Anda menggunakan versi Enterprise? Lihat 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
- - 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 .
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 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
## Tambahkan pengekspor prometheus
JALANKAN 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 adalah port prometheus-jmx yang dicadangkan
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 . Kami akan menambahkan Tomcat sebagai 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 Π² 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, ΠΈ 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 untuk memasang file individual. Untuk memperbarui file xml, pertimbangkan untuk menggunakan 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 .
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: .
Catatan: penggunaan valueFrom: secretKeyRef. Mohon gunakan 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 - - akan bekerja sangat baik jika dikombinasikan dengan rahasia Kustomize. Ada alat lain, seperti dotGPG, yang menjalankan fungsi serupa: , .
Jalan masuk
Kecuali Anda memilih untuk menggunakan penerusan port lokal, Anda memerlukan Pengontrol Ingress yang dikonfigurasi. Jika Anda tidak menggunakan () 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 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 atau gunakan metode lain seperti . 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 (), 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 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 '/^ /Saya
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="redis://redis-proxy.db:22121"
lengket="salah"
sesiBackupAsync="salah"
penyimpananKeyPrefix="konteks"
modepenguncian="otomatis"
/>' conf/konteks.xml
Catatan: Anda dapat menggunakan xmlstarlet alih-alih sed
Kami menggunakan di depan Google Cloud Memorystore, dengan (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"" Mari kita nonaktifkan juga initialSize di file settings.xml. Menambahkan 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 Alastair Firth, Lars Lange
Sumber: www.habr.com
