
Vai izmantojat Kubernetes? Vai esat gatavi pÄrvietot savus Camunda BPM instance no virtuÄlajÄm maŔīnÄm, vai arÄ« vienkÄrÅ”i izmÄÄ£inÄt tÄs palaist Kubernetes? ApskatÄ«sim dažas izplatÄ«tas konfigurÄcijas un atseviŔķus elementus, kurus var pielÄgot jÅ«su specifiskajÄm vajadzÄ«bÄm.
Tiek pieÅemts, ka jums jau ir pieredze ar Kubernetes. Ja nÄ, kÄpÄc gan neapmeklÄt un nepalaist savu pirmo klasteri?
Autori
- (Alastair Firth) ā vecÄkais vietnes pieejamÄ«bas inženieris (Site Reliability Engineer) Camunda Cloud komandÄ;
- (Lars Lange) ā DevOps inženieris Camunda.
ÄŖsumÄ, tas ir:
git clone https://github.com/camunda-cloud/camunda-examples.git
cd camunda-examples/camunda-bpm-demo
make skaffold
Labi, visdrÄ«zÄk tas nedarbosies, jo jums nav instalÄts skaffold un kustomize. Nu tad turpiniet lasÄ«t!
Kas ir Camunda BPM
Camunda BPM ir atvÄrtÄ koda platforma biznesa procesu pÄrvaldÄ«bai un lÄmumu automatizÄÅ”anai, kas apvieno biznesa lietotÄjus un programmatÅ«ras izstrÄdÄtÄjus. TÄ ir ideÄli piemÄrota cilvÄku, (mikro) pakalpojumu vai pat robotu koordinÄÅ”anai un apvienoÅ”anai! VairÄk par dažÄdÄm lietoÅ”anas iespÄjÄm varat izlasÄ«t .
KÄpÄc izmantot Kubernetes
Kubernetes ir kļuvis par de facto standartu modernu lietotÅu palaiÅ”anai Linux vidÄ. Pateicoties sistÄmisko izsaukumu izmantoÅ”anai, nevis aparatÅ«ras lÄ«meÅa emulÄcijai, kÄ arÄ« kodola iespÄjÄm pÄrvaldÄ«t atmiÅu un uzdevumu maiÅu, ielÄdes un palaiÅ”anas laiks tiek samazinÄts lÄ«dz minimumam. TomÄr vislielÄkais ieguvums ir standarta API saskarne, ko Kubernetes nodroÅ”ina infrastruktÅ«ras konfigurÄÅ”anai, kas nepiecieÅ”ama visÄm lietojumprogrammÄm: uzglabÄÅ”anai, tÄ«klam un monitorÄÅ”anai. 2020. gada jÅ«nijÄ tÄ svinÄja savu 6. jubileju, un tÄ ir, iespÄjams, otra lielÄkÄ atvÄrtÄ koda projekta vieta (pÄc Linux). PÄdÄjÄ laikÄ tÄ aktÄ«vi stabilizÄ savu funkcionalitÄti pÄc ÄtrÄm iterÄcijÄm pÄdÄjo gadu laikÄ, jo tas kļūst kritiski svarÄ«gi ražoÅ”anas slodzÄm visÄ pasaulÄ.
Camunda BPM dzinÄjs var viegli savienoties ar citÄm lietojumprogrammÄm, kas darbojas tajÄ paÅ”Ä klasterÄ«, un Kubernetes nodroÅ”ina izcilu mÄrogojamÄ«bu, ļaujot palielinÄt infrastruktÅ«ras izdevumus tikai tad, kad tas ir patieÅ”Äm nepiecieÅ”ams (un viegli tos samazinÄt pÄc vajadzÄ«bas).
Monitoring quality is also significantly enhanced by tools such as Prometheus, Grafana, Loki, Fluentd, and Elasticsearch, which allow centralized monitoring of all cluster workloads. Today, we will discuss how to integrate the Prometheus exporter into a Java Virtual Machine (JVM).
Es neteikÅ”u, ka Å”is raksts var beznosacÄ«juma saukt par āmÄcÄ«bu rokasgrÄmatuā. Tas ir drÄ«zÄk dokuments, kurÄ es stÄstu par to, ko esmu uzzinÄjusi, un aprakstu procesu, kas man ir piemÄrots koda testÄÅ”anai un izvietoÅ”anai produkcijÄ, kas tiek veikta vienÄ automatizÄtÄ apgÄjienÄ.
Let's explore some areas where we can configure the Camunda BPM Docker image (), so that it works well with Kubernetes.
- Logs and metrics;
- Database connections;
- Authentication;
- Session management.
We will explore several ways to achieve these goals and showcase the entire process visually.
Piezīme: Are you using the Enterprise version? Check out and update image references as needed.
Workflow development
In this demonstration, we will use Skaffold to build Docker images with Google Cloud Build. It has robust support for various tools (such as Kustomize and Helm), CI and build tools, as well as infrastructure providers. The file skaffold.yaml.tmpl includes settings for Google Cloud Build and GKE, providing a very simple way to launch production-grade infrastructure.
make skaffold will upload the Dockerfile context to Cloud Build, create the image, and save it to GCR, then apply the manifests to your cluster. This is what make skaffold, but Skaffold has many other capabilities.
For yaml templates in Kubernetes, we use kustomize to manage yaml overlays without branching the entire manifest, allowing you to use git pull --rebase for further enhancements. It is currently in kubectl and works reasonably well for such tasks.
We also use envsubst to populate the hostname and GCP project ID in * .yaml.tmpl files. You can see how this works in makefile or just move on.
Prerequisites
- Working cluster
- ā for building custom docker images and easy deployment to GKE
- A copy of this code
- Envsubst
Workflow using manifests
If you do not want to use kustomize or skaffold, you can refer to the manifests in generated-manifest.yaml and adapt them to your workflow of choice.
Logs and metrics
Prometheus ir kļuvis par standartu metrikas vÄkÅ”anai Kubernetes. Tas ieÅem to paÅ”u niÅ”u kÄ AWS Cloudwatch Metrics, Cloudwatch Alerts, Stackdriver Metrics, StatsD, Datadog, Nagios, vSphere Metrics un citi. Tam ir atvÄrts kods un jaudÄ«ga vaicÄjumu valoda. VizualizÄciju uzticÄsim Grafana ā tÄ piedÄvÄ lielu skaitu paneļu, kas pieejami no kastes. Tie ir saistÄ«ti savÄ starpÄ un salÄ«dzinoÅ”i viegli uzstÄdÄmi ar .
NoklusÄjumÄ Prometheus izmanto vilkÅ”anas modeli /metrics, un sidecar konteineru pievienoÅ”ana ir izplatÄ«ta prakse. DiemžÄl JMX metrikas vislabÄk tiek reÄ£istrÄtas iekÅ”pusÄ JVM, tÄpÄc sidecar konteineri nevar bÅ«t tik efektÄ«vi. Pievienosim ar atvÄrtu kodu no Prometheus uz JVM, pievienojot to konteineru attÄlam, kurÅ” nodroÅ”inÄs ceļu /metrics uz citÄ portÄ.
Pievienojiet Prometheus jmx_exporter konteineram
-- 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
Nu, tas bija viegli. EksportÄtÄjs uzraudzÄ«s tomcat un rÄdÄ«s tÄ metrikas Prometheus formÄtÄ adresÄ :9404/metrics
EksportÄtÄja konfigurÄcija
UzmanÄ«gs lasÄ«tÄjs varÄtu jautÄt, no kurienes nÄk prometheus-jmx.yaml? Š”ŃŃŠµŃŃŠ²ŃŠµŃ Š¼Š½Š¾Š³Š¾ ŃŠ°Š·Š½ŃŃ
Š²ŠµŃŠµŠ¹, ŠŗŠ¾ŃŠ¾ŃŃŠµ могŃŃ ŃŠ°Š±Š¾ŃаŃŃ Š² JVM, Šø tomcat ā ŃŃŠ¾ ŃŠ¾Š»Ńко оГна ŠøŠ· ниŃ
, поŃŃŠ¾Š¼Ń ŃŠŗŃпоŃŃŠµŃ Š½ŃŠ¶Š“аеŃŃŃ Š² Š½ŠµŠŗŠ¾ŃŠ¾Ńой Š“Š¾ŠæŠ¾Š»Š½ŠøŃŠµŠ»Ńной наŃŃŃŠ¾Š¹ŠŗŠµ. Š”ŃŠ°Š½Š“аŃŃŠ½Ńе ŠŗŠ¾Š½ŃигŃŃŠ°ŃŠøŠø Š“Š»Ń tomcat, wildfly, kafka Šø ŃŠ°Šŗ Галее ГоŃŃŃŠæŠ½Ń . MÄs pievienosim tomcat kÄ Kubernetes un pÄc tam piestiprinÄsim to kÄ apjomu.
Vispirms mÄs pievienojam eksportÄtÄja konfigurÄcijas failu mÅ«su direktorijÄ platform/config/
platform/config
āāā prometheus-jmx.yaml
Tad mÄs pievienojam par kustomization.yaml.tmpl:
-- platform/kustomization.yaml.tmpl
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
[...]
configMapGenerator:
- name: config
files:
- config/prometheus-jmx.yaml
Tas pievienos katru elementu files[] kÄ konfigurÄcijas ConfigMap elementu. ConfigMapGenerators ir labas, jo tÄs hashÄ datus konfigurÄcijÄ un iniciÄ podus restartÄt, ja tie mainÄs. TÄs arÄ« samazina konfigurÄcijas apjomu Deployment, jo varat piestiprinÄt visu "mapi" konfigurÄcijas failu vienÄ VolumeMount.
Visbeidzot, mums ir nepiecieÅ”ams piestiprinÄt ConfigMap kÄ apjomu podam:
-- 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
[...]
Lieliski. Ja Prometheus nav konfigurÄts uz pilnÄ«gu tÄ«rīŔanu, iespÄjams, ka jums bÅ«s jÄnorÄda tam, lai iztÄ«rÄ«tu podus. Prometheus Operator lietotÄji var izmantot service-monitor.yaml lai uzsÄktu darbu. IzpÄtiet Service-monitor.yaml, un pirms sÄkt.
Šī Ŕablona izplatīŔana citiem lietojumiem
Visi faili, kurus mÄs pievienojam ConfigMapGenerator, bÅ«s pieejami jaunÄ direktorijÄ /etc/config. JÅ«s varat paplaÅ”inÄt Å”o veidni, lai montÄtu jebkurus citus nepiecieÅ”amos konfigurÄcijas failus. JÅ«s pat varat montÄt jaunu palaiÅ”anas skriptu. Varat izmantot atseviŔķu failu montÄÅ”anai. XML failu atjauninÄÅ”anai ieteicams izmantot vietÄ, lai izmantotu sed. Tas jau ir iekļauts attÄlÄ.
ŽurnÄli
Lieliskas ziÅas! Lietojumprogrammu žurnÄli jau ir pieejami stdout, piemÄram, izmantojot kubectl logs. Fluentd (tas pÄc noklusÄjuma ir instalÄts GKE) pÄradresÄs jÅ«su žurnÄlus Elasticsearch, Loki vai uz jÅ«su korporatÄ«vo žurnÄlu platformu. Ja vÄlaties izmantot jsonify žurnÄliem, varat sekot iepriekÅ” minÄtajai veidnei, lai instalÄtu .
Datu bÄze
NoklusÄjuma attÄlam bÅ«s H2 datubÄze. Tas mums neder, un mÄs izmantosim Google Cloud SQL ar Cloud SQL Proxy ā tas bÅ«s nepiecieÅ”ams vÄlÄk, lai risinÄtu iekÅ”ÄjÄs problÄmas. Tas ir vienkÄrÅ”s un uzticams risinÄjums, ja jums nav personÄ«gu priekÅ”roku datubÄzes iestatīŔanÄ. AWS RDS piedÄvÄ lÄ«dzÄ«gu pakalpojumu.
NeatkarÄ«gi no tÄ, kuru datubÄzi izvÄlÄjÄties, ja vien tÄ nav H2, jums bÅ«s jÄsagatavo atbilstoÅ”Äs vides mainÄ«gÄs vÄrtÄ«bas platform/deploy.yaml. Tas izskatÄs aptuveni Å”Ädi:
-- 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
[...]
PiezÄ«me: JÅ«s varat izmantot Kustomize, lai izvietotu dažÄdÄs vidÄs, izmantojot pÄrklÄjumu: .
PiezÄ«me: izmantoÅ”ana valueFrom: secretKeyRef. LÅ«dzu, izmantojiet pat izstrÄdes laikÄ, lai saglabÄtu savus noslÄpumus droŔībÄ.
Ir ļoti iespÄjams, ka jums jau ir izvÄlÄta Kubernetes noslÄpumu pÄrvaldÄ«bas sistÄma. Ja nÄ, Å”eit ir daži varianti: to Å”ifrÄÅ”ana, izmantojot sava mÄkoÅu pakalpojuma sniedzÄja KMS, un pÄc tam to ievieÅ”ana K8S kÄ noslÄpumiem caur CD cauruļvadu ā ā lieliski darbosies kopÄ ar Kustomize noslÄpumiem. Ir arÄ« citi rÄ«ki, piemÄram, dotGPG ā tie veic lÄ«dzÄ«gas funkcijas: , .
Egress
Ja vien jÅ«s nolemjat neizmantot lokÄlÄ porta pÄradresÄÅ”anu, jums bÅ«s nepiecieÅ”ams konfigurÄts Ingress kontrolieris. Ja nelietojat () tad, visticamÄk, jau zinÄt, ka jums jÄinstalÄ nepiecieÅ”amÄs anotÄcijas ingress-patch.yaml.tmpl vai platform/ingress.yaml. Ja jÅ«s izmantojat ingress-nginx un redzat nginx ingress klasi ar slodzes balansÄtÄju, kas uz to norÄda, un ÄrÄjo DNS vai vietas DNS ierakstu ā viss ir gatavs. CitÄdi iestatiet Ingress Controller un DNS vai izlaidiet Å”os soļus un atstÄjiet tieÅ”o savienojumu ar podu.
TLS
Ja jÅ«s izmantojat vai kube-lego un letsencrypt ā jaunajiem ienÄkoÅ”ajiem sertifikÄti tiek iegÅ«ti automÄtiski. CitÄdi atveriet ingress-patch.yaml.tmpl un pielÄgojiet to savÄm vajadzÄ«bÄm.
PalaiŔana!
Ja esat ievÄrojis visu iepriekÅ” minÄto, komanda make skaffold HOSTNAME= jÄuzsÄk pieejams instants /camunda
Ja neesat izveidojis ievadi caur publisko URL, varat to pÄradresÄt no localhost: kubectl port-forward -n camunda-bpm-demo svc/camunda-bpm 8080:8080 uz localhost:8080/camunda
Pagaidiet dažas minÅ«tes, kamÄr tomcat pilnÄ«bÄ ir gatavs. Cert-manageri vajadzÄs laiku, lai pÄrbaudÄ«tu domÄna vÄrdu. PÄc tam varat sekot žurnÄliem, izmantojot pieejamos rÄ«kus ā piemÄram, tÄdu rÄ«ku kÄ kubetail, vai vienkÄrÅ”i ar kubectl:
kubectl logs -n camunda-bpm-demo $(kubectl get pods -o=name -n camunda-bpm-demo) -f
NÄkamie soļi
AutorizÄcija
Tas vairÄk attiecas uz Camunda BPM konfigurÄciju nekÄ uz Kubernetes, bet svarÄ«gi atzÄ«mÄt, ka pÄc noklusÄjuma REST API autentifikÄcija ir atslÄgta. JÅ«s varat vai izmantot citu metodi, piemÄram, . JÅ«s varat izmantot configmaps un apjomus, lai augÅ”upielÄdÄtu xml, vai xmlstarlet (skatÄ«t iepriekÅ”) esoÅ”o failu rediÄ£ÄÅ”anai attÄlÄ, kÄ arÄ« izmantot wget vai augÅ”upielÄdÄt tos ar init konteineru un kopÄ«gu apjomu.
Sesiju pÄrvaldÄ«ba
KÄ daudzas citas lietojumprogrammas, Camunda BPM apstrÄdÄ sesijas JVM, tÄpÄc, ja vÄlaties palaist vairÄkas replikas, varat ieslÄgt sticky sessions (), kas pastÄvÄs lÄ«dz replikai izzudÄ«s, vai iestatÄ«t Max-Age atribÅ«tu sÄ«kdatnÄm. KÄ uzticamÄku risinÄjumu varat izvietot sesiju pÄrvaldnieku Tomcat. Larsam ir par Å”o tÄmu, bet kaut kas lÄ«dzÄ«gs:
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"
sticky="false"
sessionBackupAsync="false"
storageKeyPrefix="context"
lockingMode="auto"
/>' conf/context.xml
PiezÄ«me: var koristiti xmlstarlet vietÄ sed
MÄs izmantojÄm pirms Google Cloud Memorystore, ar (atbalsta Redis) tÄ darbÄ«bas nodroÅ”inÄÅ”anai.
MÄrogoÅ”ana
Ja jÅ«s jau sapratÄt sesijas, tad pirmais (un bieži arÄ« pÄdÄjais) ierobežojums Camunda BPM mÄrogoÅ”anÄ var bÅ«t savienojums ar datubÄzi. DaļÄja konfigurÄcija ir pieejama jau «». ArÄ« atspÄjosim intialSize failÄ settings.xml. Pievienojiet un jÅ«s varÄsiet viegli automÄtiski mÄrogot podu skaitu.
Pieprasījumi un ierobežojumi
No platform/deployment.yaml jÅ«s redzÄsiet, ka mÄs stingri esam ierakstÄ«juÅ”i resursu lauku. Tas labi darbojas ar HPA, taÄu var bÅ«t nepiecieÅ”ama papildu konfigurÄcija. Tam derÄs kustomize plÄksters. Sk. ingress-patch.yaml.tmpl un ./kustomization.yaml.tmpl
Izvade
LÅ«k, mÄs esam uzstÄdÄ«juÅ”i Camunda BPM Kubernetes ar Prometheus metriku, žurnÄliem, H2 datubÄzi, TLS un Ingress. MÄs pievienojÄm jar failus un konfigurÄcijas failus, izmantojot ConfigMaps un Dockerfile. MÄs runÄjÄm par datu apmaiÅu ar apjomiem un tieÅ”i vides mainÄ«gajos no slepenajiem datiem. TurklÄt sniedzÄm pÄrskatu par Camunda konfigurÄciju vairÄkÄm replikÄm un autentificÄtu API.
Saites
github.com/camunda-cloud/camunda-examples/camunda-bpm-kubernetes
ā
āāā generated-manifest.yaml <- manifests bez kustomize izmantoÅ”anas
āāā images
ā āāā camunda-bpm
ā āāā Dockerfile <- pÄrklÄjuma docker attÄls
āāā ingress-patch.yaml.tmpl <- vietÄji specifiska ingress konfigurÄcija
āāā kustomization.yaml.tmpl <- galvenÄ Kustomization
āāā Makefile <- izpildes mÄrÄ·i
āāā namespace.yaml
āāā platform
ā āāā config
ā ā āāā prometheus-jmx.yaml <- prometheus eksportÄtÄja konfigurÄcijas fails
ā āāā deployment.yaml <- galvenais izvietojums
ā āāā ingress.yaml
ā āāā kustomization.yaml <- "pamats" kustomization
ā āāā service-monitor.yaml <- piemÄrs prometheus-operator konfigurÄcijai
ā āāā service.yaml
āāā skaffold.yaml.tmpl <- skaffold direktÄ«vas
2020. gada 5. augusts, tulkojums Alastair Firth, Lars Lange
Avots: habr.com
