Camunda BPM-i käivitamine Kuberneteses

Camunda BPM-i käivitamine Kuberneteses

Kas kasutate Kubernetes? Kas olete valmis viima oma Camunda BPM eksemplarid virtuaalsetelt masinatelt üle või proovima neid lihtsalt Kuberneteses käivitada? Vaatame mõningaid levinumaid konfiguratsioone ja eraldi komponente, mida saab kohandada teie konkreetsete vajaduste järgi.

Eeldatakse, et olete Kuberneteset juba varem kasutanud. Kui ei, siis miks mitte uurida juhend ja käivitada oma esimene klaster?

Autorid

  • Alastair Firth on Camunda Cloudi saidi töökindluse insener (Site Reliability Engineer);
  • Lars Lange on Camundas DevOps insener.

Lühidalt öeldes:

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

Noh, tõenäoliselt see ei toiminud, kuna teil ei ole installitud skaffoldi ja kustomize'i. Nii et lugege edasi!

Mis on Camunda BPM

Camunda BPM on avatud lähtekoodiga platvorm äriprocesside haldamiseks ja otsuste automatiseerimiseks, mis ühendab äritarbijad ja tarkvaraarendajad. See sobib ideaalselt inimeste, (mikro)teenuste või isegi robotite koordineerimiseks ja ühendamiseks! Erinevate kasutusvõimaluste kohta saate rohkem lugeda lingil.

Miks kasutada Kuberneteset

Kubernetes on saanud de-facto standardiks kaasaegsete rakenduste käitamiseks Linuxis. Tänu süsteemikõnede kasutamisele riistvaratasandi emulatsioonide asemel ja tuumade võimele hallata mälu ja ülesandeid, on laadimis- ja käivitamisajad minimaalsetes piirides. Kuid kõige suurem eelis on standardne API liides, mida Kubernetes pakub kõigi rakenduste vajaliku infrastruktuuri seadistamiseks: salvestus, võrk ja jälgimine. Juunis 2020 tähistab see oma 6. sünnipäeva ja võib-olla on see suuruselt teine avatud lähtekoodiga projekt (pärast Linuxi). Viimasel ajal stabiliseerib see aktiivselt oma funktsioone pärast kiiret iteratsiooni viimastel aastatel, kuna see on muutunud kriitiliselt oluliseks tootmiskoormuste jaoks üle kogu maailma.

Camunda BPM mootor suudab kergesti ühenduda teiste rakendustega, mis töötavad samas klastris, ja Kubernetes tagab suurepärase skaleeritavuse, võimaldades suurendada infrastruktuuri kulusid vaid siis, kui see on tõeliselt vajalik (ja kergesti vähendada neid vajaduse korral).

Jälgimise kvaliteet paraneb samuti märgatavalt selliste tööriistade nagu Prometheus, Grafana, Loki, Fluentd ja Elasticsearch abil, mis võimaldavad keskelt vaatlemine kõiki klastrite koormusi. Täna vaatame, kuidas rakendada Prometheuse eksportijat Java virtuaalmasinas (JVM).

Eesmärgid

Vaatame mitmeid valdkondi, kus saame kohandada Camunda BPM Docker-img (github), et see hästi koostööd teeks Kubernetesega.

  1. Logid ja mõõdikud;
  2. Andmebaasiühendused;
  3. Autentimine;
  4. Seansside haldamine.

Uurime mitmeid viise nende eesmärkide saavutamiseks ja demonstreerime kogu protsessi visuaalselt.

Märkus: Kas kasutate Enterprise versiooni? Vaata siin ja uuenda linke piltidele vajadusel.

Töövoo arendamine

Selles demonstratsioonis kasutame Skaffoldi Docker-piltide loomiseks Google Cloud Buildiga. Sellel on hea tugi mitmekesistele tööriistadele (nt Kustomize ja Helm), CI ja kogumisinstrumentidele ning infrastruktuuri pakkujatele. Fail skaffold.yaml.tmpl sisaldab seadistusi Google Cloud Buildi ja GKE jaoks, mis tagab väga lihtsa viisi tööstusklassiga infrastruktuuri käivitamiseks.

make skaffold laeb Dockerfile'i konteksti Cloud Buildi, loob pildi ja salvestab selle GCR-i, seejärel rakendab manifeste teie klastrisse. Just seda teeb make skaffold, kuid Skaffoldil on palju muid võimalusi.

Kuberneteses yaml-malli jaoks kasutame kustomize'i yaml-ülevõtete haldamiseks ilma kogu manifesti jaotamata, mis võimaldab teil kasutada git pull --rebase edasiarendamiseks. Praegu on see kubectl-is ja see töötab selliste asjade jaoks üsna hästi.

Samuti kasutame envsubst, et täita hosti nimi ja GCP projekti ID failides * .yaml.tmpl. Saate vaadata, kuidas see töötab failis makefile või lihtsalt edasi liikuda.

Nõuded

  • Töökeskkond Kubernetes
  • Kustomize
  • Skaffold — et luua kohandatud Docker-pilte ja hõlpsaks juurutamiseks GKE-s
  • Koopia sellest koodist
  • Envsubst

Töövoog koos manifestidega

Kui te ei soovi kasutada kustomize'i või skaffoldi, saate viidata manifestele failis generated-manifest.yaml ja kohandada neid enda valitud tööprotsessile.

Logid ja mõõdikud

Prometheus on muutunud Kubernetes'i mõõdikute kogumise standardiks. See katab sama nišši kui AWS CloudWatch Metrics, CloudWatch Alerts, Stackdriver Metrics, StatsD, Datadog, Nagios, vSphere Metrics ja teised. Tal on avatud lähtekood ja võimas päringute keel. Visualiseerimise usaldame Grafana'le — see tuleb koos suure hulga valmis juurdepääsu paneelidega. Need on omavahel seotud ja suhteliselt lihtsad installida. prometheus-operator.

Vaikimisi kasutab Prometheus tõmbemudelit. /metrics, ja sidecar-konteinerite lisamine on tavaline praktika. Kahjuks registreeritakse JMX mõõdikud kõige paremini JVM-is, seega pole sidecar-konteinerid nii tõhusad. Ühendame jmx_exporter avaldatud koodi Prometheusest JVM-iga, lisades selle konteineri pildile, mis pakub teed /metrics teisel pordil.

Lisage Prometheus jmx_exporter konteinerisse.

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

Noh, see oli lihtne. Eksportija jälgib tomcat'i ja kuvab selle mõõdikud Prometheuse formaadis aadressil :9404/metrics

Eksportija seadistamine

Karm lugeja võib küsida, kust tuli prometheus-jmx.yaml? Существует много разных вещей, которые могут работать в JVM, и tomcat — это только одна из них, поэтому экспортер нуждается в некоторой дополнительной настройке. Стандартные конфигурации для tomcat, wildfly, kafka и так далее доступны siin. Lisame tomcat'i kui ConfigMap Kuberneteses ja seejärel monteerime selle mahutina.

Esiteks lisame eksportija konfiguratsiooni faili meie katalooge platform/config/

platvormi/config
└── prometheus-jmx.yaml

Seejärel lisame ConfigMapGenerator ja kustomization.yaml.tmpl:

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

See lisab iga elemendi files[] ConfigMap konfiguratsiooni elemendina. ConfigMapGenerators on head, kuna need räsivad konfidentsiaalsed andmed ja käivitavad podi taaskäivitamise, kui see muutub. Need aitavad vähendada seadistust Deployment’is, kuna saate monteerida kogu konfiguratsiooni failide "kausta" ühes VolumeMount’is.

Lõpuks peame configurMap'i monteerima pod'ile:

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

Suurepärane. Kui Prometheus ei ole seadistatud täielikuks puhastamiseks, peate võib-olla talle ütlema, et ta puhastaks pod'id. Prometheus Operatori kasutajad võivad kasutada service-monitor.yaml alustamiseks. Uurige Service-monitor.yaml, operaatori disain ja ServiceMonitorSpec enne jätkamist.

Selle malliga laienemine teiste kasutusjuhtumite jaoks

Kõik failid, mille me lisame ConfigMapGeneratorisse, on saadaval uues kataloogis. /etc/config. Saate seda mallia laiendada, et montaažida ükskõik milliseid muid vajalikke konfiguratsioonifaile. Saate isegi montaažida uue käivitusskripti. Saate kasutada , said edasiarendust — uue välja üksikute failide montaažimiseks. XML-failide uuendamiseks kaaluge xmlstarlet asetamiseks sed. See on juba pildis kaasas.

Logid

Suurepärane uudis! Rakenduse logid on juba saadaval stdout-is, näiteks lipud. Fluentd (see on GKE-s vaikimisi installitud) suunab teie logid Elasticsearchi, Lokisse või teie ettevõtte logimisplatvormile. Kui soovite kasutada jsonify logide jaoks, siis võite järgida ülaltoodud mallile paigaldamiseks logback.

Andmebaas

Vaikimisi on pildil H2 andmebaas. See ei sobi meile, ja me kasutame Google Cloud SQL koos Cloud SQL Proxyga — see on hiljem vajalik sisemiste ülesannete lahendamiseks. See on lihtne ja usaldusväärne valik, kui teil ei ole oma andmebaasi seadistamise eelistusi. AWS RDS pakub samalaadset teenust.

Sõltumata valitud andmebaasist, välja arvatud H2, peate seadma vastavad keskkonnamuutujad platform/deploy.yaml. See näeb välja umbes nii:

-- platform/deployment.yaml
apiVersion: apps/v1
kind: Deployment
[...]
spec:
template:
spec:
[...]
containers:
- name: camunda-bpm
keskkond:
- nimi: DB_DRIVER
väärtus: org.postgresql.Driver
- nimi: DB_URL
väärtus: jdbc:postgresql://postgres-proxy.db:5432/process-engine
- nimi: DB_USERNAME
väärtusAllika:
salajaseVõtmeViide:
nimi: cambpm-db-credentials
võti: db_username
- nimi: DB_PASSWORD
väärtusAllika:
salajaseVõtmeViide:
nimi: cambpm-db-credentials
võti: db_password
[...]

Märkus: Saate kasutada Kustomize'i erinevates keskkondades juurdepääsul baseeruva ülekattega: näide.

Märkus: kasutamine valueFrom: secretKeyRef. Palun kasutage seda Kubernetes'i funktsiooni isegi arenduse ajal, et hoida oma saladused turvalisena.

On väga tõenäoline, et teil on juba eelistatud Kubernetes'i saladuste haldamise süsteem. Kui ei, siis on siin mõned valikud: nende krüpteerimine teie pilveteenuse pakkuja KMS-i abil ja seejärel nende paigaldamine K8S-is saladustena läbi CD-torustiku — MozillaSOPS töötab väga hästi koos Kustomize'i saladustega. On ka teisi tööriistu, nagu dotGPG — need täidavad sarnaseid funktsioone: HashiCorp Vault'i., Kustomize'i Saladuse Väärtuste Pluginid.

Ingress

Kui te ei otsusta kasutada kohaliku pordi edastamist, peate seadistama Ingress Controlleri. Kui te ei kasuta ingress-nginx (Helm chart) siis ilmselt juba teate, et peate vajalikud annotatsioonid seadistama ingress-patch.yaml.tmpl või platform/ingress.yaml. Kui kasutate ingress-nginx ja näete nginx ingress klassi koormustasakaalustajaga, mis sellele osutab ja väliste DNS või asendus-DNS kirjet – siis on kõik valmis. Vastasel juhul seadistage Ingress Controller ja DNS või jätke need sammud vahele ja jätke otsene ühendus pod'iga.

TLS

Kui kasutate cert-manager või kube-lego ja letsencrypt – sertifikaadid uue sisenemise jaoks hangitakse automaatselt. Vastasel juhul avage ingress-patch.yaml.tmpl ja seadistage see oma vajadustele vastavaks.

Käivita!

Kui olete järginud kõike ülaltoodut, siis käsk make skaffold HOSTNAME= peaks käivitama juurdepääsetava instantsi aadressil /camunda

Kui te ei ole sisenemist avaliku URL-i kaudu seadistanud, siis saate suunata selle aadressilt localhost: kubectl port-forward -n camunda-bpm-demo svc/camunda-bpm 8080:8080 . Tundub, et localhost:8080/camunda

Oodake paar minutit, kuni tomcat on täielikult valmis. Cert-manager vajab mõnda aega domeeninime kontrollimiseks. Pärast seda saate jälgida logisid saadaolevate tööriistade abil – näiteks sellise tööriista nagu kubetail või lihtsalt kubectl abil:

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

Järgmised sammud

Autoriseerimine

See puudutab rohkem Camunda BPM seadistamist kui Kubernetes, kuid oluline on märkida, et vaikimisi on REST API autentimine välja lülitatud. Saate lülitada sisse põhi autentimise või kasutada mõnda muud meetodit, näiteks JWT. Saate kasutada configmaps ja mahuteid xml-failide laadimiseks, või xmlstarlet (vt ülal) olemasolevate failide muutmiseks pildis, samuti kasutada kas wgeti või laadida need init konteineri ja ühise mahu abil.

Sessioonihaldus

Nagu paljud teised rakendused, käsitleb Camunda BPM sessioone JVM-is, seega, kui soovite käivitada mitu koopia, saate lubada sticky sessions (näiteks ingress-nginx), mis eksisteerivad, kuni koopia kaob, või seadistada küpsiste jaoks Max-Age atribuut. Usaldusväärse lahendusena saate juurutada Sessiooni Halduse Tomcatis. Larsi on eraldi postituse selle kohta postitus, kuid midagi sellist:

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

Märkus: saate kasutada xmlstarlet'i sed'i asemel

Kasutasime twemproxy enne Google Cloud Memorystore'i, koos memcached-session-manager (toetab Redis) selle käivitamiseks.

Mastaabis

Kui olete juba sessioonide osas selge, siis esimene (ja sageli ka viimane) piirang Camunda BPM-i skaleerimiseks võib olla andmebaasi ühendus. Osaline seadistus on juba "karbist väljas". Samuti lülitame settings.xml failis välja initialSize. Lisage HorizontalPodAutoscaler (HPA) ja saate hõlpsasti automaatselt skaleerida podide arvu.

Päringud ja piirangud

Uues platform/deployment.yaml näete, et oleme ressursside välja kõvasti kooditud. See toimib hästi HPA-ga, kuid võib olla vajalik täiendav seadistus. Sellega sobib kustomize patch. Vaadake ingress-patch.yaml.tmpl ja ./kustomization.yaml.tmpl

Kokkuvõte

Siin oleme paigaldanud Camunda BPM Kubernetesesse koos Prometheuse mõõdikute, logide, H2 andmebaasi, TLS-i ja Ingressiga. Oleme lisanud jar-failid ja seadistuse failid, kasutades ConfigMap'e ja Dockerfile'i. Oleme arutanud andmevahetust mahtude kaudu ja otse keskkonnamuutujatesse saladustest. Lisaks oleme andnud ülevaate Camunda seadistamisest mitme koopiate ja autentitud API jaoks.

Viidatud lingid

github.com/camunda-cloud/camunda-examples/camunda-bpm-kubernetes

├── generated-manifest.yaml <- manifest kasutamiseks ilma kustomizeta
├── pildid
│ └── camunda-bpm
│ └── Dockerfile <- overlay docker image
├── ingress-patch.yaml.tmpl <- saidispetsiifiline ingress konfiguratsioon
├── kustomization.yaml.tmpl <- peamine Kustomization
├── Makefile <- make sihtmärkide jaoks
├── namespace.yaml
├── platvorm
│ ├── konfiguratsioon
│ │ └── prometheus-jmx.yaml <- prometheuse eksportija konfiguratsioonifail
│ ├── deployment.yaml <- peamine juurutamine
│ ├── ingress.yaml
│ ├── kustomization.yaml <- "baasi" kustomization
│ ├── service-monitor.yaml <- näidis prometheus-operatori konfiguratsioon
│ └── service.yaml
└── skaffold.yaml.tmpl <- skaffold direktiivid

05.08.2020, tõlge artikleid Alastair Firth, Lars Lange

Allikas: habr.com

Osta usaldusväärne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster