Camunda BPM palaiÅ”anas Kubernetes vidē

Camunda BPM palaiÅ”anas Kubernetes vidē

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 rokasgrāmatu un nepalaist savu pirmo klasteri?

Autori

  • Alastair Firth (Alastair Firth) – vecākais vietnes pieejamÄ«bas inženieris (Site Reliability Engineer) Camunda Cloud komandā;
  • Lars Lange (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 saiÅ”u.

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 (github), so that it works well with Kubernetes.

  1. Logs and metrics;
  2. Database connections;
  3. Authentication;
  4. 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 Ŕeit 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 Kubernetes
  • Kustomize
  • Skaffold — 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 prometheus-operator.

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 jmx_exporter 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 Šø так Галее Š“Š¾ŃŃ‚ŃƒŠæŠ½Ń‹ Å”eit. Mēs pievienosim tomcat kā ConfigMap 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 ConfigMapGenerator 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, operator design un ServiceMonitorSpec 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 subPath atseviŔķu failu montēŔanai. XML failu atjaunināŔanai ieteicams izmantot xmlstarlet 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 logback.

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: piemērs.

PiezÄ«me: izmantoÅ”ana valueFrom: secretKeyRef. LÅ«dzu, izmantojiet Å”o Kubernetes funkciju 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 — MozillaSOPS — lieliski darbosies kopā ar Kustomize noslēpumiem. Ir arÄ« citi rÄ«ki, piemēram, dotGPG — tie veic lÄ«dzÄ«gas funkcijas: HashiCorp Vault, Kustomize Secret Value Plugins.

Egress

Ja vien jÅ«s nolemjat neizmantot lokālā porta pāradresēŔanu, jums bÅ«s nepiecieÅ”ams konfigurēts Ingress kontrolieris. Ja nelietojat ingress-nginx (Helm chart) 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 cert-manager 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 ieslēgt pamata autentifikāciju vai izmantot citu metodi, piemēram, JWT. 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 (piemēram, ieceļot ingress-nginx), 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 atseviŔķs ieraksts 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 twemproxy pirms Google Cloud Memorystore, ar memcached-session-manager (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 Ā«no kastesĀ». ArÄ« atspējosim intialSize failā settings.xml. Pievienojiet HorizontalPodAutoscaler (HPA) 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 raksti Alastair Firth, Lars Lange

Avots: habr.com

Iegādājieties uzticamu tÄ«mekļa hostingu ar DDoS aizsardzÄ«bu, VPS VDS serveriem šŸ”„ Iegādājieties uzticamu tÄ«mekļa hostingu ar DDoS aizsardzÄ«bu, VPS VDS serveriem | ProHoster