
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 lan ora miwiti kluster pisanan?
penulis
- (Alastair Firth) - Senior Site Reliability Engineer ing tim Camunda Cloud;
- (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 .
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 () supaya bisa sesambungan karo Kubernetes.
- Log lan metrik;
- koneksi database;
- Authentication;
- Manajemen sesi.
Kita bakal ndeleng sawetara cara kanggo nggayuh tujuan kasebut lan nuduhake kabeh proses kanthi jelas.
komentar: Apa sampeyan nggunakake versi Enterprise? Delengen 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
- - 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 .
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 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
## Tambah eksportir prometheus
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 minangka port prometheus-jmx sing dilindhungi undhang-undhang
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 . Kita bakal nambah Tomcat minangka 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 в 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, и 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 kanggo masang file individu. Kanggo nganyari file xml, coba gunakake 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 .
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: .
komentar: panganggone valueFrom: secretKeyRef. Mangga, gunakake 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 − - bakal bisa uga banget ing kombinasi karo Rahasia Kustomize. Ana alat liyane, kayata dotGPG, sing nindakake fungsi sing padha: , .
Ingress
Yen sampeyan ora milih nggunakake port forwarding lokal, sampeyan butuh Ingress Controller sing wis dikonfigurasi. Yen sampeyan ora nggunakake () 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 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 utawa nggunakake cara liyane kaya . 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 (), 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 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 '/^ /i
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="redis://redis-proxy.db:22121"
lengket = "palsu"
sessionBackupAsync = "salah"
storageKeyPrefix="konteks"
LockingMode = "otomatis"
/>' conf/context.xml
komentar: sampeyan bisa nggunakake xmlstarlet tinimbang sed
Kita digunakake ing ngarepe Google Cloud Memorystore, karo (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 "" Ayo uga mateni intialSize ing file settings.xml. Tambah 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 Alastair Firth, Lars Lange
Source: www.habr.com
