Koristite li Kubernetes? Jeste li spremni premjestiti svoje Camunda BPM instance s virtualnih strojeva ili ih možda samo pokušati pokrenuti na Kubernetesu? Pogledajmo neke uobičajene konfiguracije i pojedinačne stavke koje se mogu prilagoditi vašim specifičnim potrebama.
Pretpostavlja se da ste prije koristili Kubernetes. Ako ne, zašto ne pogledati rukovodstvo a ne pokrenete svoj prvi klaster?
Autori
Alastair Firth (Alastair Firth) - viši inženjer pouzdanosti lokacije u timu Camunda Cloud;
Lars Lange (Lars Lange) - DevOps inženjer u Camundi.
Ukratko:
git clone https://github.com/camunda-cloud/camunda-examples.git
cd camunda-examples/camunda-bpm-demo
make skaffold
U redu, vjerojatno nije uspjelo jer nemate instalirane skele i kustomize. Pa onda čitajte!
Što je Camunda BPM
Camunda BPM je platforma otvorenog koda za upravljanje poslovnim procesima i automatizaciju odlučivanja koja povezuje poslovne korisnike i programere softvera. Idealan je za koordinaciju i povezivanje ljudi, (mikro) servisa ili čak botova! Više o različitim slučajevima upotrebe možete pročitati na link.
Zašto koristiti Kubernetes
Kubernetes je postao de facto standard za pokretanje modernih aplikacija na Linuxu. Korištenjem sistemskih poziva umjesto hardverske emulacije i mogućnosti kernela da upravlja memorijom i prebacivanjem zadataka, vrijeme podizanja i pokretanja svedeno je na minimum. Međutim, najveća korist može doći od standardnog API-ja koji Kubernetes pruža za konfiguriranje infrastrukture potrebne za sve aplikacije: pohranu, umrežavanje i nadzor. U lipnju 2020. napunio je 6 godina i možda je drugi najveći projekt otvorenog koda (nakon Linuxa). Nedavno je aktivno stabilizirao svoju funkcionalnost nakon brze iteracije u proteklih nekoliko godina jer postaje kritičan za radna opterećenja proizvodnje diljem svijeta.
Camunda BPM Engine može se lako povezati s drugim aplikacijama koje se izvode na istom klasteru, a Kubernetes pruža izvrsnu skalabilnost, omogućujući vam da povećate troškove infrastrukture samo kada je stvarno potrebno (i lako ih smanjite po potrebi).
Kvaliteta praćenja također je uvelike poboljšana s alatima kao što su Prometheus, Grafana, Loki, Fluentd i Elasticsearch, koji vam omogućuju centralni pregled svih radnih opterećenja u klasteru. Danas ćemo pogledati kako implementirati Prometheus exporter u Java Virtual Machine (JVM).
ciljevi
Pogledajmo nekoliko područja na kojima možemo prilagoditi sliku Camunda BPM Dockera (Github) tako da dobro komunicira s Kubernetesom.
Dnevnici i metrika;
Veze s bazom podataka;
Ovjera;
Upravljanje sesijom.
Pogledat ćemo nekoliko načina za postizanje ovih ciljeva i jasno prikazati cijeli proces.
Primijetiti: Koristite li Enterprise verziju? Izgled здесь i po potrebi ažurirajte poveznice slika.
Razvoj tijeka rada
U ovoj demonstraciji koristit ćemo Skaffold za izradu Docker slika pomoću Google Cloud Build-a. Ima dobru podršku za razne alate (kao što su Kustomize i Helm), CI i alate za izgradnju te pružatelje infrastrukture. Datoteka skaffold.yaml.tmpl uključuje postavke za Google Cloud Build i GKE, pružajući vrlo jednostavan način za pokretanje infrastrukture proizvodne razine.
make skaffold će učitati Dockerfile kontekst u Cloud Build, izgraditi sliku i pohraniti je u GCR, a zatim primijeniti manifeste na vaš klaster. To je ono što radi make skaffold, ali Skaffold ima mnoge druge značajke.
Za yaml predloške u Kubernetesu koristimo kustomize za upravljanje yaml slojevima bez račvanja cijelog manifesta, što vam omogućuje korištenje git pull --rebase za daljnja poboljšanja. Sada je u kubectlu i prilično dobro radi za takve stvari.
Također koristimo envsubst za popunjavanje naziva hosta i GCP ID projekta u *.yaml.tmpl datotekama. Možete vidjeti kako radi u makefile ili samo nastaviti dalje.
skela - za stvaranje vlastitih docker slika i jednostavnu implementaciju u GKE
Kopija ovog koda
Envsubst
Tijek rada pomoću manifesta
Ako ne želite koristiti kustomize ili skaffold, možete pogledati manifeste u generated-manifest.yaml i prilagodite ih tijeku rada po vašem izboru.
Dnevnici i metrika
Prometheus je postao standard za prikupljanje metrike u Kubernetesu. Zauzima istu nišu kao AWS Cloudwatch Metrics, Cloudwatch Alerts, Stackdriver Metrics, StatsD, Datadog, Nagios, vSphere Metrics i drugi. Otvorenog je koda i ima moćan upitni jezik. Vizualizaciju ćemo povjeriti Grafanu - dolazi s velikim brojem nadzornih ploča dostupnih odmah po izlasku. Međusobno su povezani i s njima se relativno lako postavlja prometej-operator.
Prema zadanim postavkama, Prometheus koristi model ekstrakcije <service>/metrics, a dodavanje bočnih kontejnera za to je uobičajeno. Nažalost, JMX metrika se najbolje bilježi unutar JVM-a, tako da kontejneri s prikolicom nisu tako učinkoviti. Povežimo se jmx_izvoznik otvorenog koda iz Prometheusa u JVM dodavanjem u sliku spremnika koja će osigurati put /metrics na drugom priključku.
Dodajte Prometheus jmx_exporter u spremnik
-- 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
Pa, to je bilo lako. Izvoznik će nadzirati tomcat i prikazati njegovu metriku u Prometheus formatu na <svc>:9404/metrics
Postavljanje izvoznika
Pažljivi čitatelj može se zapitati odakle je to došlo prometheus-jmx.yaml? Postoji mnogo različitih stvari koje se mogu izvoditi u JVM-u, a tomcat je samo jedna od njih, tako da program za izvoz treba dodatnu konfiguraciju. Dostupne su standardne konfiguracije za tomcat, wildfly, kafka i tako dalje здесь. Tomcat ćemo dodati kao ConfigMap u Kubernetesu i zatim ga montirajte kao volumen.
Prvo dodajemo konfiguracijsku datoteku izvoznika u direktorij platform/config/
Ovo će dodati svaki element files[] kao konfiguracijski element ConfigMap. ConfigMapGenerators su izvrsni jer hashiraju podatke o konfiguraciji i prisiljavaju na ponovno pokretanje modula ako se promijeni. Oni također smanjuju količinu konfiguracije u Deploymentu budući da možete montirati cijelu "mapu" konfiguracijskih datoteka u jednom VolumeMount-u.
Na kraju, moramo montirati ConfigMap kao volumen na pod:
Predivno. Ako Prometheus nije konfiguriran za potpuno čišćenje, možda ćete mu morati reći da očisti kapsule. Prometheus Operator korisnici mogu koristiti service-monitor.yaml započeti. Istražiti Service-monitor.yaml, dizajn operatera и ServiceMonitorSpec prije nego počnete.
Proširenje ovog uzorka na druge slučajeve upotrebe
Sve datoteke koje dodamo u ConfigMapGenerator bit će dostupne u novom direktoriju /etc/config. Možete proširiti ovaj predložak za montiranje bilo koje druge konfiguracijske datoteke koje trebate. Možete čak montirati novu skriptu za pokretanje. Možeš koristiti podput za montiranje pojedinačnih datoteka. Da biste ažurirali xml datoteke, razmislite o korištenju xmlstarlet umjesto sed. Već je uključeno u sliku.
Časopisi
Super vijest! Dnevnici aplikacija već su dostupni na stdout-u, na primjer s kubectl logs. Fluentd (instaliran prema zadanim postavkama u GKE-u) proslijedit će vaše zapise na Elasticsearch, Loki ili platformu za evidentiranje vašeg poduzeća. Ako želite koristiti jsonify za zapisnike, možete slijediti gornji predložak za instalaciju povratna prijava.
Baza podataka
Prema zadanim postavkama, slika će imati H2 bazu podataka. Ovo nam ne odgovara i koristit ćemo Google Cloud SQL s Cloud SQL proxyjem - to će biti potrebno kasnije za rješavanje internih problema. Ovo je jednostavna i pouzdana opcija ako nemate vlastite preferencije u postavljanju baze podataka. AWS RDS pruža sličnu uslugu.
Bez obzira na bazu podataka koju odaberete, osim ako nije H2, morat ćete postaviti odgovarajuće varijable okruženja u platform/deploy.yaml. Izgleda otprilike ovako:
Primijetiti: Možete koristiti Kustomize za implementaciju u različitim okruženjima pomoću sloja: primjer.
Primijetiti: korištenje valueFrom: secretKeyRef. Molimo, koristite ova Kubernetes značajka čak i tijekom razvoja kako bi vaše tajne bile sigurne.
Vjerojatno već imate preferirani sustav za upravljanje Kubernetes tajnama. Ako ne, evo nekoliko opcija: Šifriranje pomoću KMS-a vašeg pružatelja usluga oblaka i njihovo ubacivanje u K8S kao tajne putem CD cjevovoda − Mozilla SOPS - radit će vrlo dobro u kombinaciji s Kustomize tajnama. Postoje i drugi alati, kao što je dotGPG, koji obavljaju slične funkcije: HashiCorp trezor, Prilagodite dodatke Secret Value.
Ulaz
Osim ako ne odaberete prosljeđivanje lokalnog porta, trebat će vam konfigurirani ulazni kontroler. Ako ne koristite ingress-nginx (Shema kormila) onda vjerojatno već znate da morate instalirati potrebne bilješke ingress-patch.yaml.tmpl ili platform/ingress.yaml. Ako koristite ingress-nginx i vidite nginx ulaznu klasu s balanserom opterećenja koji pokazuje na nju i vanjski DNS ili DNS unos sa zamjenskim znakom, spremni ste. U suprotnom, konfigurirajte Ingress Controller i DNS ili preskočite ove korake i zadržite izravnu vezu s modulom.
TLS
Ako koristite cert-menadžer ili kube-lego i letsencrypt - automatski će se dobiti certifikati za novu prijavu. U protivnom otvorite ingress-patch.yaml.tmpl i prilagodite ga svojim potrebama.
Pokreni!
Ako ste slijedili sve gore napisano, onda naredba make skaffold HOSTNAME=<you.example.com> treba pokrenuti dostupnu instancu u <hostname>/camunda
Ako niste postavili svoju prijavu na javni URL, možete je preusmjeriti pomoću localhost: kubectl port-forward -n camunda-bpm-demo svc/camunda-bpm 8080:8080 na localhost:8080/camunda
Pričekajte nekoliko minuta dok tomcat ne bude potpuno spreman. Cert-manager-u će trebati neko vrijeme da potvrdi naziv domene. Zatim možete nadzirati zapisnike pomoću dostupnih alata kao što je alat poput kubetaila ili jednostavno koristeći kubectl:
Ovo je relevantnije za konfiguriranje Camunda BPM-a nego Kubernetesa, ali važno je napomenuti da je prema zadanim postavkama provjera autentičnosti onemogućena u REST API-ju. Možeš omogućiti osnovnu autentifikaciju ili upotrijebite drugu metodu poput J.W.T.. Možete koristiti configmape i volumene za učitavanje xml-a ili xmlstarlet (vidi gore) za uređivanje postojećih datoteka na slici, i koristiti wget ili ih učitati pomoću init spremnika i zajedničkog volumena.
Upravljanje sesijom
Kao i mnoge druge aplikacije, Camunda BPM upravlja sesijama u JVM-u, pa ako želite pokrenuti više replika, možete omogućiti ljepljive sesije (na primjer za ingress-nginx), koji će postojati dok replika ne nestane, ili postaviti atribut Max-Age za kolačiće. Za robusnije rješenje, možete implementirati Session Manager u Tomcat. Lars ima zaseban post na ovu temu, ali nešto poput:
Ako već razumijete sesije, tada prvo (a često i posljednje) ograničenje za skaliranje Camunda BPM-a može biti veza s bazom podataka. Djelomična prilagodba je već dostupna "iz kutije" Također onemogućimo intialSize u datoteci settings.xml. Dodati Horizontalni pod Autoscaler (HPA) i možete jednostavno automatski skalirati broj mahuna.
Zahtjevi i ograničenja
В platform/deployment.yaml Vidjet ćete da smo teško kodirali polje resursa. Ovo dobro radi s HPA, ali može zahtijevati dodatnu konfiguraciju. Za to je prikladan kustomize patch. Cm. ingress-patch.yaml.tmpl и ./kustomization.yaml.tmpl
Izlaz
Tako smo instalirali Camunda BPM na Kubernetes s Prometheus metrikom, zapisnicima, H2 bazom podataka, TLS-om i Ingressom. Dodali smo jar datoteke i konfiguracijske datoteke koristeći ConfigMaps i Dockerfile. Razgovarali smo o razmjeni podataka u volumene i izravno u varijable okoline iz tajni. Osim toga, dali smo pregled postavljanja Camunde za višestruke replike i autentificirani API.