
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 ja käivitada oma esimene klaster?
Autorid
- on Camunda Cloudi saidi töökindluse insener (Site Reliability Engineer);
- 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 .
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 (), et see hästi koostööd teeks Kubernetesega.
- Logid ja mõõdikud;
- Andmebaasiühendused;
- Autentimine;
- Seansside haldamine.
Uurime mitmeid viise nende eesmärkide saavutamiseks ja demonstreerime kogu protsessi visuaalselt.
Märkus: Kas kasutate Enterprise versiooni? Vaata 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
- — 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. .
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 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 и так далее доступны . Lisame tomcat'i kui Kuberneteses ja seejärel monteerime selle mahutina.
Esiteks lisame eksportija konfiguratsiooni faili meie katalooge platform/config/
platvormi/config
└── prometheus-jmx.yaml
Seejärel lisame 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, ja 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 üksikute failide montaažimiseks. XML-failide uuendamiseks kaaluge 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 .
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: .
Märkus: kasutamine valueFrom: secretKeyRef. Palun kasutage 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 — töötab väga hästi koos Kustomize'i saladustega. On ka teisi tööriistu, nagu dotGPG — need täidavad sarnaseid funktsioone: , .
Ingress
Kui te ei otsusta kasutada kohaliku pordi edastamist, peate seadistama Ingress Controlleri. Kui te ei kasuta () 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 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 või kasutada mõnda muud meetodit, näiteks . 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 (), mis eksisteerivad, kuni koopia kaob, või seadistada küpsiste jaoks Max-Age atribuut. Usaldusväärse lahendusena saate juurutada Sessiooni Halduse Tomcatis. Larsi on 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 enne Google Cloud Memorystore'i, koos (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 "". Samuti lülitame settings.xml failis välja initialSize. Lisage 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 Alastair Firth, Lars Lange
Allikas: habr.com
