Një nisje e Camunda BPM në Kubernetes

Një nisje e Camunda BPM në Kubernetes

Përdorni Kubernetes? Jeni gati të transferoni instancat tuaja të Camunda BPM nga makinave virtuale, ose ndoshta thjesht të provoni t'i lanconi ato në Kubernetes? Le të shqyrtojmë disa konfigurime të zakonshme dhe elemente të veçanta që mund të përshtaten sipas nevojave tuaja të veçanta.

Supozoni se keni përdorur Kubernetes më parë. Nëse jo, pse të mos shikoni në manual dhe të lançoni klastrin tuaj të parë?

Autoret

  • Alastair Firth është inxhinier i lartë i besueshmërisë së faqes (Site Reliability Engineer) në ekipin e Camunda Cloud;
  • Lars Lange është inxhinier DevOps në Camunda.

Nëse e shprehim shkurtimisht,

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

Epo, ndoshta nuk funksionoi, pasi nuk keni instaluar skaffold dhe kustomize. Pra, vazhdoni të lexoni!

Çfarë është Camunda BPM

Camunda BPM është një platformë me kod të hapur për menaxhimin e proceseve të biznesit dhe automatizimin e vendimmarrjeve, që bashkon përdoruesit e biznesit dhe zhvilluesit e softuerit. Ajo është ideale për koordinimin dhe bashkimin e njerëzve, shërbimeve (mikro) ose madje edhe robotëve! Më shumë për raste të ndryshme përdorimi mund të lexoni në linkun.

Pse të përdorim Kubernetes

Kubernetes është bërë standardi de-facto për drejtorimin e aplikacioneve moderne në Linux. Falë përdorimit të thirrjeve sistemike në vend të simulimit të nivelit të harduerit dhe aftësive të bërthamës për të menaxhuar kujtesën dhe kalimin e detyrave, koha e ngarkimit dhe koha e aktivizimit minimizohen. Sidoqoftë, përparësia më e madhe mund të merret nga API standard që Kubernetes ofron për konfigurimin e infrastrukturës së nevojshme për të gjitha aplikacionet: ruajtje, rrjet dhe monitorim. Në qershor 2020, ai mbushi 6 vjet, dhe është ndoshta projekti i dytë më i madh me kod të hapur (pas Linux). Kohët e fundit, ai po stabilizon aktivet e tij pas një iteracioni të shpejtë gjatë viteve të fundit, pasi kjo bëhet kritikisht e rëndësishme për ngarkesat prodhuese në mbarë botën.

Camunda BPM Engine mund të lidhet lehtësisht me aplikacione të tjera që funksionojnë në të njëjtin klasër, dhe Kubernetes ofron shkallëzim të shkëlqyer, duke lejuar rritjen e shpenzimeve për infrastrukturën vetëm kur kjo është me të vërtetë e nevojshme (dhe lehtë të zvogëlohet sipas nevojës).

Cilësia e monitorimit përmirësohet gjithashtu ndjeshëm me ndihmën e mjeteve si Prometheus, Grafana, Loki, Fluentd dhe Elasticsearch, që lejojnë shikimin qendror të të gjitha ngarkesave të klasterit. Sot do të shqyrtojmë se si të implementojmë eksportuesin Prometheus në një makinë virtuale Java (JVM).

Qëllimet

Le të shqyrtojmë disa fusha ku mund të konfigurojmë imazhin Docker të Camunda BPM (github), në mënyrë që të funksionojë mirë me Kubernetes.

  1. Dëshmitë dhe metrikat;
  2. Lidhjet me bazën e të dhënave;
  3. Autentifikimi;
  4. Menaxhimi i sesioneve.

Ne do të shqyrtojmë disa mënyra për të realizuar këto qëllime dhe do ta ilustrojmë të gjithë procesin.

Shënim: Po përdorni versionin Enterprise? Shikoni këtu dhe përditësoni lidhjet me imazhet nëse është e nevojshme.

Zhvillimi i procesit të punës

Në këtë demonstratë, ne do të përdorim Skaffold për të krijuar imazhe Docker me ndihmën e Google Cloud Build. Ai ka mbështetje të mirë për mjete të ndryshme (si Kustomize dhe Helm), CI dhe mjete ndërtimi, si dhe ofrues të infrastrukturës. Skedari skaffold.yaml.tmpl përfshin cilësime për Google Cloud Build dhe GKE, duke ofruar një mënyrë shumë të thjeshtë për të nisur infrastrukturën e nivelit industrial.

make skaffold do të ngarkojë kontekstin e Dockerfile në Cloud Build, do të krijojë imazhin dhe do ta ruajë atë në GCR, e më pas do të aplikojë manifestet në klasterin tuaj. Kjo është ajo që bën make skaffold, por Skaffold ka shumë mundësi të tjera.

Për shabllonet yaml në Kubernetes, ne përdorim kustomize për të menaxhuar përjashtimet yaml pa qenë nevoja të shpërbëjmë të gjithë manifestin, duke ju lejuar të përdorni git pull --rebase për përmirësime të mëtejshme. Tani është në kubectl dhe funksionon mjaft mirë për gjëra të tilla.

Po ashtu, ne përdorim envsubst për të plotësuar emrin e hostit dhe identifikuesin e projektit GCP në skedarët * .yaml.tmpl. Ju mund ta shihni si funksionon në makefile ose thjesht të vazhdoni përpara.

Kushtet e nevojshme

  • Kluster i punës Kubernetes
  • Kustomize
  • Skaffold për krijimin e imazheve docker të personalizuara dhe për një implementim të lehtë në GKE
  • Një kopje e këtij kodi
  • Envsubst

Procesi i punës me manifestet

Nëse nuk dëshironi të përdorni kustomize ose skaffold, mund të referoheni te manifestet në generated-manifest.yaml dhe t'i përshtatni ato në procesin e punës sipas zgjedhjes suaj.

Dëshmitë dhe metrikat

Prometheus është standardi për mbledhjen e metrikeve në Kubernetes. Ai zë të njëjtin pozicion si AWS Cloudwatch Metrics, Cloudwatch Alerts, Stackdriver Metrics, StatsD, Datadog, Nagios, vSphere Metrics dhe të tjerë. Ka një kod burimi të hapur dhe një gjuhë të fuqishme kërkimesh. Vizualizimin do ta besojmë tek Grafana — ajo vjen me një numër të madh panelesh monitorimi, të disponueshme nga kutia. Ato janë të lidhura me njëra-tjetrën dhe relativisht të lehta për t'u instaluar me prometheus-operator.

Sipas parazgjedhjes, Prometheus përdor modelin e nxjerrjes /metrics, dhe shtimi i konteinerëve sidecar për këtë është një praktikë e zakonshme. Fatkeqësisht, metrike JMX regjistrohen më mirë brenda JVM, prandaj konteinerët sidecar nuk janë aq efikasë. Le ta lidhim jmx_exporter me kod burimi të hapur nga Prometheus në JVM, duke e shtuar atë në imazhin e konteinerit që do të sigurojë një rrugë /metrics në një port tjetër.

Shtoni Prometheus jmx_exporter në konteiner

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

Eh, kjo ishte e lehtë. Eksportuesi do të monitorojë tomcat dhe do ta shfaqë metriken e tij në formatin Prometheus në adresën :9404/metrics

Konfigurimi i eksportuesit

Lexuesi i kujdesshëm mund të pyesë, nga e erdhi prometheus-jmx.yaml? Существует много разных вещей, которые могут работать в JVM, и tomcat — это только одна из них, поэтому экспортер нуждается в некоторой дополнительной настройке. Стандартные конфигурации для tomcat, wildfly, kafka и так далее доступны këtu. Ne do të shtojmë tomcat si ConfigMap në Kubernetes, dhe më pas do ta montojmë atë si një volum.

E para, ne shtojmë skedarin e konfigurimit të eksportuesit në drejtori platform/config/

platformë/config
└── prometheus-jmx.yaml

Më pas ne shtojmë ConfigMapGenerator në kustomization.yaml.tmpl:

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

Kjo do të shtojë çdo element files[] si një element konfigurimi në ConfigMap. ConfigMapGenerators janë të mira sepse hash-në të dhënat në konfigurim dhe iniciatojnë rindërtimin e podit nëse ka ndonjë ndryshim. Ato gjithashtu reduktojnë vëllimin e konfigurimit në Deployment, pasi mund të montoni të gjithë "dosjen" e skedarëve të konfigurimit në një VolumeMount.

Së fundi, na nevojitet të montojmë ConfigMap si një volum në pod:

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

Shkëlqyeshëm. Nëse Prometheus nuk është konfigurues për pastrimin e plotë, mund t'ju duhet të i thoni atij të pastroni podet. Përdoruesit e Prometheus Operator mund të përdorin service-monitor.yaml për të filluar. Shqyrtoni Service-monitor.yaml, operator design dhe ServiceMonitorSpec para se të nisni.

Shpërndarja e këtij modeli në përdorime të tjera

Të gjitha skedarët që shtojmë në ConfigMapGenerator, do të jenë të disponueshëm në një dosje të re /etc/config. Ju mund ta zgjatni këtë shabllon për të montuar çdo skedar konfiguruese tjetër që ju nevojitet. Madje mund të montoni një skenar të ri fillimi. Mund të përdorni subPath për montimin e skedarëve të veçantë. Për të përditësuar skedarët xml, shqyrtoni përdorimin e xmlstarlet në vend të sed. Ai është tashmë i përfshirë në imazh.

Të dhënat

Lajm i shkëlqyer! Të dhënat e aplikacionit janë tashmë të disponueshme në stdout, për shembull, me anë të tani mund të. Fluentd (ai është instaluar si parazgjedhje në GKE) do të redirektojë të dhënat tuaja në Elasticsearch, Loki ose në platformën tuaj të brendshme të të dhënave. Nëse dëshironi të përdorni jsonify për të dhënat, atëherë mund të ndiqni shabllonin e mësipërm për instalim logback.

Baza e të dhënave

Si parazgjedhje, imazhi do të ketë një bazë të dhënash H2. Kjo nuk na përshtatet, dhe ne do të përdorim Google Cloud SQL me Cloud SQL Proxy — kjo do të nevojitet më vonë për zgjidhjen e detyrave të brendshme. Kjo është një opsion i thjeshtë dhe i besueshëm, nëse nuk keni preferenca të tjera për konfigurimin e bazës së të dhënave. AWS RDS ofron një shërbim të ngjashëm.

Pavarësisht nga baza e të dhënave që zgjidhni, nëse kjo nuk është H2, do t'ju nevojitet të vendosni variablat e duhura të mjedisit në platform/deploy.yaml. Kjo duket pak a shumë kështu:

-- platform/deployment.yaml
apiVersion: apps/v1
kind: Deployment
[...]
spec:
template:
spec:
[...]
containers:
- name: camunda-bpm
mjed:
- emri: DB_DRIVER
vlera: org.postgresql.Driver
- emri: DB_URL
vlera: jdbc:postgresql://postgres-proxy.db:5432/process-engine
- emri: DB_USERNAME
vleraNga:
referencëÇelësit:
emri: cambpm-db-credentials
çelësi: db_username
- emri: DB_PASSWORD
vleraNga:
referencëÇelësit:
emri: cambpm-db-credentials
çelësi: db_password
[...]

Shënim: Mund të përdorni Kustomize për të implementuar në mjedise të ndryshme duke përdorur overlay: është.

Shënim: përdorimi valueFrom: secretKeyRef. Ju lutemi, përdorni këtë funksion Kubernetes edhe gjatë zhvillimit për të mbajtur sekretet tuaja në siguri.

Është shumë e mundshme që ju tashmë keni një sistem të preferuar për menaxhimin e sekretëve Kubernetes. Nëse jo, ja disa opsione: t'i enkriptoj ato me KMS të ofruesit tuaj të cloud dhe pastaj t'i integroj ato në K8S si sekrete përmes një kontejneri CD — MozillaSOPS do të punojë shumë mirë me sekretet Kustomize. Ka edhe mjete të tjera, si dotGPG — ato kryejnë funksione të ngjashme: HashiCorp Vault, Kustomize Secret Value Plugins.

Ingress

Nëse vetëm nuk vendosni të përdorni redirektimin e portit lokal, do t'ju nevojitet një Ingress Controller i konfiguruar. Nëse nuk po përdorni ingress-nginx (Helm chart) atëherë, me siguri tashmë e dini se duhet të vendosni anotimet e nevojshme në ingress-patch.yaml.tmpl ose platform/ingress.yaml. Nëse po përdorni ingress-nginx dhe shihni klasën nginx ingress me një balancues ngarkese që i referohet asaj dhe DNS të jashtëm ose një shënim DNS të zëvendësimit, gjithçka është gati. Përndryshe, konfiguroni Ingress Controller dhe DNS, ose kaloni këto hapa dhe lëreni lidhjen direkte me pod-in.

TLS

Nëse po përdorni cert-manager ose kube-lego dhe letsencrypt — certifikat e reja do të merren automatikisht. Në të kundërt, hapni ingress-patch.yaml.tmpl dhe konfiguroni sipas nevojës tuaj.

Çelësi!

Nëse keni ndjekur gjithçka të shkruar më sipër, ekipi make skaffold HOSTNAME= duhet të niset një instancë të disponueshme në /camunda

Nëse nuk keni kërkuar hyrje përmes një URL-je publike, atëherë mund ta përcillni nga localhost: kubectl port-forward -n camunda-bpm-demo svc/camunda-bpm 8080:8080 në localhost:8080/camunda

Prisni disa minuta derisa tomcat të jetë plotësisht gati. Cert-manager do të marrë disa kohë për të verifikuar emrin e domain-it. Pas kësaj, mund të ndiqni log-et me mjete të disponueshme — për shembull, një mjet të tillë si kubetail, ose thjesht me kubectl:

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

Hapat e ardhshëm

Autorizimi

Kjo ka të bëjë më shumë me konfigurimin e Camunda BPM se sa me Kubernetes, por është e rëndësishme të theksohet se, sipas parazgjedhjes, autentikimi në REST API është i çaktivizuar. Mund ta aktivizoni autentikimin e bazuar në ose përdorni një metodë tjetër, siç është JWT. Mund të përdorni configmaps dhe volume për të ngarkuar xml, ose xmlstarlet (shih më lart) për të redaktuar skedarët ekzistues në imazh, si dhe ose përdorni wget, ose ngarkoni ato me një enë init dhe një vëllim të përbashkët.

Menaxhimi i sesioneve

Si shumë aplikacione të tjera, Camunda BPM menaxhon sesionet në JVM, kështu që, nëse dëshironi të nidhni disa replika, mund të aktivizoni sesione ngjitëse (p.sh., për ingress-nginx), të cilat do të ekzistojnë për sa kohë që replika të mos zhduket, ose të vendosni atributin Max-Age për cookie-t. Si një zgjidhje më të besueshme, mund të implementoni Menaxherin e Sesioneve në Tomcat. Lars ka një postim të veçantë në këtë temë, por diçka si:

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

Shënim: mund të përdoret xmlstarlet në vend të sed

Kemi përdorur twemproxy para Google Cloud Memorystore, me memcached-session-manager (mbështet Redis) për ta drejtuar atë.

Zgjerimi

Nëse tashmë keni kuptuar se si funksionojnë seancat, atëherë pengesa e parë (dhe shpesh e fundit) për të zgjeruar Camunda BPM mund të jetë lidhja me bazën e të dhënave. Konfigurimi i pjesshëm është i disponueshëm "nga paketa". Gjithashtu do të çaktivizojmë intialSize në skedarin settings.xml. Shtoni HorizontalPodAutoscaler (HPA) dhe do të jeni në gjendje të shkallëzoni lehtësisht numrin e pod-ëve.

Kërkesat dhe kufizimet

Në platform/deployment.yaml do të shihni se ne e kemi koduar ngushtë fushën e burimeve. Kjo funksionon mirë me HPA, por mund të kërkojë konfigurim shtesë. Për këtë, një patch kustomizimi do të ishte i përshtatshëm. Shihni ingress-patch.yaml.tmpl dhe ./kustomization.yaml.tmpl

Përfundimi

Kështu, kemi instaluar Camunda BPM në Kubernetes me metrike Prometheus, regjistra, bazën e të dhënave H2, TLS dhe Ingress. Ne kemi shtuar skedarët jar dhe skedarët e konfigurimit duke përdorur ConfigMaps dhe Dockerfile. Diskutuam mbi shkëmbimin e të dhënave me volumin dhe direkt në variablat ambientale nga sekretet. Për më tepër, ofruam një përmbledhje të konfigurimit të Camunda për disa kopje dhe një API të autentikuar.

Linket

github.com/camunda-cloud/camunda-examples/camunda-bpm-kubernetes
│
├── generated-manifest.yaml <- manifest për përdorim pa kustomize
├── images
│ └── camunda-bpm
│ └── Dockerfile <- imazhi overlay docker
├── ingress-patch.yaml.tmpl <- konfigurimi specifik i ingress-it
├── kustomization.yaml.tmpl <- Kustomization kryesore
├── Makefile <- objektivat e prodhimit
├── namespace.yaml
├── platform
│ ├── config
│ │ └── prometheus-jmx.yaml <- skedari i konfigurimit të exporter-it prometheus
│ ├── deployment.yaml <- përhapja kryesore
│ ├── ingress.yaml
│ ├── kustomization.yaml <- "baza" e kustomizimit
│ ├── service-monitor.yaml <- konfigurimi shembull për prometheus-operator
│ └── service.yaml
└── skaffold.yaml.tmpl <- direktivat skaffold

05.08.2020, përkthim artikulli Alastair Firth, Lars Lange

Burimi: habr.com

Blini hosting të besueshëm për faqe interneti me mbrojtje nga DDoS, serverë VPS VDS 🔥 Blini hosting të besueshëm për faqe interneti me mbrojtje nga DDoS, serverë VPS VDS | ProHoster