Nisja e Camunda BPM në Kubernetes

Nisja e Camunda BPM në Kubernetes

A përdorni Kubernetes? A jeni gati të transferoni instancat tuaja të Camunda BPM nga makina virtuale, apo ndoshta thjesht të provoni t'i запуска ili në Kubernetes? Le të shqyrtojmë disa konfiguracione të zakonshme dhe elemente të veçanta që mund të përshtaten sipas nevojave tuaja specifike.

Supozohen se keni përdorur më parë Kubernetes. Nëse jo, pse të mos shikoni në një udhëzues dhe të filloni klasterin tuaj të parë?

Autorët

  • Alastair Firth — inxhinier i lartë për besueshmërinë e faqes në ekipin e Camunda Cloud;
  • Lars Lange — inxhinier DevOps në Camunda.

Në përmbledhje, është:

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

Mirë, ndoshta nuk ka funksionuar, pasi nuk keni instaluar skaffold dhe kustomize. Atëherë vazhdoni të lexoni!

Çfarë është Camunda BPM

Camunda BPM është një platformë me burim të hapur për menaxhimin e proceseve të biznesit dhe automatizimin e vendimeve, që bashkon përdoruesit e biznesit dhe zhvilluesit e softuerit. Ajo është ideale për koordinimin dhe bashkimin e njerëzve, (mikro) shërbimeve ose madje edhe robotëve! Lexoni më shumë rreth mundësive të ndryshme të përdorimit në lidhjes.

Pse të përdorni Kubernetes

Kubernetes është bërë standardi de facto për ekzekutimin e aplikacioneve moderne në Linux. Duke përdorur thirrje sistemore në vend të emulimit të nivelit harduerik dhe kapacitetet e bërthamës për menaxhimin e memories dhe përndrrimit të detyrave, koha e ngarkesës dhe koha e ekzekutimit minimizohen. Megjithatë, përfitimi më i madh mund të vijë nga API standard që Kubernetes ofron për konfigurimin e infrastrukturës që nevojitet për të gjitha aplikacionet: ruajtje, rrjet dhe monitorim. Në qershor 2020, ai festoi 6 vjetorin e tij, dhe ndoshta është projekti më i madh me burim të hapur (pas Linux). Kohët e fundit, ai është duke stabilizuar funksionalitetin e tij pas një itere të shpejtë të disa viteve, pasi kjo bëhet jetësore për ngarkesat prodhuese në të gjithë botën.

Camunda BPM Engine mund të lidhet lehtësisht me aplikacione të tjera që funksionojnë në të njëjtin klaster, dhe Kubernetes ofron shkallëzueshmëri të shkëlqyer, duke lejuar rritjen e kostove të infrastrukturës vetëm kur është vërtet e nevojshme (dhe lehtë reduktimin e tyre sipas nevojës).

Cilësia e monitorimit gjithashtu përmirësohet ndjeshëm me mjete të tilla si Prometheus, Grafana, Loki, Fluentd dhe Elasticsearch, duke lejuar shikimin e centralizuar të të gjitha ngarkesave të punës në klaster. Sot do të shqyrtojmë se si të implementojmë eksportuesin Prometheus në makinat Java (JVM).

Qëllimet

Le të shqyrtojmë disa fusha ku mund të përshtatim imazhin Docker të Camunda BPM (github), në mënyrë që ai të bashkëpunojë mirë me Kubernetes.

  1. Dëgjimet dhe metrikat;
  2. Lidhjet me bazën e të dhënave;
  3. Autentikimi;
  4. Menaxhimi i seancave.

Do të shqyrtojmë disa mënyra për të arritur këto qëllime dhe do të ilustrojmë të gjithë procesin.

Shënim: A po përdorni versionin Enterprise? Shikoni këtu dhe azhurnoni lidhjet me imazhet sipas nevojës.

Zhvillimi i punës

Në këtë demonstrim do të përdorim Skaffold për të ndërtuar imazhe Docker duke përdorur Google Cloud Build. Ai ka mbështetje të shkëlqyer 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 konfigurimet për Google Cloud Build dhe GKE, që siguron një mënyrë shumë të thjeshtë për të nisur infrastrukturën në nivel industrial.

make skaffold do të ngarkojë kontekstin Dockerfile në Cloud Build, do të krijojë një imazh dhe do ta ruajë atë në GCR, dhe pastaj 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 shabllonat yaml në Kubernetes ne përdorim kustomize për të menaxhuar mbivendosjet yaml pa treguar të gjithë manifestin, duke ju lejuar të përdorni git pull --rebase për përmirësime të tjera. Aktualisht, është në kubectl dhe kjo funksionon mirë për këto gjëra.

Gjithashtu përdorim envsubst për të mbushur emrin e hostit dhe identifikuesin e projektit GCP në skedarët * .yaml.tmpl. Mund të shikoni se si funksionon në makefile ose thjesht vazhdoni përpara.

Kërkesat e nevojshme

  • Një klaster funksional Kubernetes
  • Kustomize
  • Skaffold — për të krijuar imazhe docker dhe për të lehtësuar shpërndarjen në GKE
  • Një kopje e këtij kodi
  • Envsubst

Puna me manifestet

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

Dëgjimet dhe metrikat

Prometheus është bërë standart për grumbullimin e metrikeve në Kubernetes. Ai zë të njëjtën nişë si AWS Cloudwatch Metrics, Cloudwatch Alerts, Stackdriver Metrics, StatsD, Datadog, Nagios, vSphere Metrics dhe të tjera. Ai ka kod të hapur dhe një gjuhë kërkese të fuqishme. Vizualizimin do ta marrë Grafana — ajo vjen me një numër të madh panelesh monitorimi të disponueshme jashtë kutisë. Ato janë të lidhura me njëra-tjetrën dhe janë relativisht të lehta për t'u instaluar me prometheus-operator.

Në mënyrë të parazgjedhur, Prometheus përdor modelin e tërheqjes /metrics, dhe shtimi i kontejnerëve sidecar për këtë është një praktikë e zakonshme. Fatkeqësisht, metrike JMX regjistrohen më së miri brenda JVM, prandaj kontejnerët sidecar nuk janë aq efektivë. Le të lidhemi jmx_exporter me kod të hapur nga Prometheus me JVM, duke e shtuar atë në imazhin e kontejnerit, i cili do të ofrojë një rrugë /metrics në një port tjetër.

Shto Prometheus jmx_exporter në kontejner

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

Mirë, kjo ishte e lehtë. Eksportuesi do të monitorojë tomcat-in dhe do të shfaqë metrike të tij në formatin Prometheus në adresën :9404/metrics

Konfigurimi i eksportuesit

Lexuesi i kujdesshëm mund të pyesë, nga ku 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.

Së pari, ne shtojmë skedarin e konfigurimit të eksportuesit në direktorinë tonë platform/config/

platform/config
└── prometheus-jmx.yaml

Më pas, ne shtojmë ConfigMapGeneratorkustomization.yaml.tmpl:

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

Kjo do të shtojë çdo element files[] si një element të ConfigMap. ConfigMapGenerators janë të mira sepse ato hash-ojnë të dhënat në konfigurim dhe nisin rinisjen e pod-it nëse ato ndryshojnë. Ato gjithashtu reduktojnë volumin e konfigurimit në Deployment, sepse mund të montoni të gjithë "folderin" e skedarëve të konfigurimit në një VolumeMount.

Në fund, na nevojitet të montojmë ConfigMap si një volum në pod-in:

-- 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ë i konfiguruar për pastrimin e plotë, mund t'ju duhet të i thoni që të pastroni pod-ët. Përdoruesit e Prometheus Operator mund të përdorin service-monitor.yaml për të filluar. Hidhni një sy Service-monitor.yaml, dizajni operator dhe ServiceMonitorSpec para se të filloni.

Zgjerimi i këtij modeli në raste të tjera të përdorimit

Të gjitha skedarët që ne shtojmë në ConfigMapGenerator do të jenë të disponueshëm në katalogun e ri /etc/config. Ju mund ta shkëputni këtë model për të montuar çdo skedar tjetër konfigurimi që keni nevojë. Mund të montoni madje një skenar të ri nisjeje. Mund të përdorni subPath për të montuar skedarë të veçantë. Për azhurnimin e skedarëve xml, konsideroni përdorimin e xmlstarlet në vend të sed. Ai është tashmë i përfshirë në imazh.

Ditaret

Lajme të shkëlqyera! Ditaret e aplikacioneve janë tashmë të disponueshme në stdout, për shembull, me kubectl logs. Fluentd (ai është instaluar parazgjedhje në GKE) do të drejtojë ditaret tuaja në Elasticsearch, Loki ose në platformën tuaj të korporatës për ditarët. Nëse dëshironi të përdorni jsonify për ditaret, mund të ndiqni modelin e mësipërm për instalimin logback.

Baza e të dhënave

Në mënyrë të parazgjedhur, 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ë jetë e nevojshme më vonë për zgjidhjen e detyrave të brendshme. Kjo është një zgjidhje e thjeshtë dhe e besueshme, 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, përveç nëse ajo është H2, do t'ju duhet të vendosni variablat përkatëse të mjedisit në platform/deploy.yaml. Kjo duket rreth kësaj:

-- platform/deployment.yaml
apiVersion: apps/v1
kind: Deployment
[...]
spec:
template:
spec:
[...]
containers:
- name: camunda-bpm
env:
- 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ësiSecret:
emri: cambpm-db-credentials
çelësi: db_username
- emri: DB_PASSWORD
vleraNga:
referencëÇelësiSecret:
emri: cambpm-db-credentials
çelësi: db_password
[...]

Shënim: Mund të përdorni Kustomize për të vendosur në mjedise të ndryshme duke përdorur mbuluar: shembull.

Shënim: përdorimi valueFrom: secretKeyRef. Ju lutem, përdorni këtë funksion të Kubernetes edhe gjatë zhvillimit, për të ruajtur sekretet tuaja të sigurta.

Ka të ngjarë që ju tashmë keni një sistem preferencial të menaxhimit të sekretëve Kubernetes. Nëse jo, ja disa mundësi: enkriptimi i tyre me KMS nga ofruesi juaj i cloud-it, dhe më pas rreshtimi i tyre në K8S si sekrete përmes një pipeline CD — MozillaSOPS do të funksionojë shumë mirë me sekretet Kustomize. Ka edhe mjete të tjera, të tilla si dotGPG — ato kryejnë funksione të ngjashme: HashiCorp Vault, Kustomize Secret Value Plugins.

Ingress

Përveç nëse vendosni të përdorni përcjelljen lokale të portit, do të keni nevojë për një Ingress Controller të konfiguruar. Nëse nuk jeni duke përdorur ingress-nginx (Helm chart) atëherë, me siguri, tashmë e dini se duhet të vendosni anotacionet 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ë e tregon atë dhe DNS-in e jashtëm ose një regjistrim DNS të zëvendësimit, gjithçka është gati. Përndryshe, konfiguroni Ingress Controller dhe DNS-in 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 — certifikatat për hyrje të re do të merren automatikisht. Në rast të kundërt, hapni ingress-patch.yaml.tmpl dhe konfiguroni atë sipas nevojave tuaja.

Fillimi!

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

Nëse nuk keni ekspozuar hyrjen përmes një URL publike, mund ta ridrejtoni atë nga localhost: kubectl port-forward -n camunda-bpm-demo svc/camunda-bpm 8080:8080localhost:8080/camunda

Prisni disa minuta derisa tomcat të jetë plotësisht gati. Cert-manager do të ketë nevojë për disa kohë për të verifikuar emrin e domainit. Pas kësaj, mund të ndiqni logjet duke përdorur mjetet në dispozicion — 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 është më shumë e lidhur me konfigurimin e Camunda BPM sesa me Kubernetes, por është e rëndësishme të theksohet se, si haptazi, në REST API, autentifikimi është i çaktivizuar. Mund të aktivizoni autentifikimin bazik apo të përdorni një metodë tjetër, për shembull JWT. Mund të përdorni configmaps dhe volumet për të ngarkuar xml, ose xmlstarlet (shih më sipër) për të redaktuar skedarët ekzistues në imazh, dhe gjithashtu mund të përdorni wget, ose t'i ngarkoni ato me ndihmën e një kontejneri init dhe një volumi të përbashkët.

Menaxhimi i seancave

Ashtu si shumë aplikacione të tjera, Camunda BPM trajton seancat në JVM, prandaj, nëse dëshironi të nisni disa replika, mund të aktivizoni seancat ngjitëse (për shembull, për ingress-nginx), të cilat do të ekzistojnë derisa replica të zhduket, ose të vendosni atributin Max-Age për cookies. Si një zgjidhje më të besueshme, mund të vendosni Menaxherin e Seancave 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ërdorni xmlstarlet në vend të sed

Ne përdorëm twemproxy para Google Cloud Memorystore, me menaxherin e sesioneve me memcached (mbështet Redis) për ta operuar atë.

Shkallëzimi

Nëse keni arritur të menaxhoni seancat, atëherë kufiri i parë (dhe shpesh i fundit) për skalimin e Camunda BPM mund të jetë lidhja me databazën. Një konfigurim i pjesshëm është i disponueshëm "nga kutia". Gjithashtu, çaktivizoni intialSize në skedarin settings.xml. Shtoni HorizontalPodAutoscaler (HPA) dhe do të jeni në gjendje të shkalloni automatikisht numrin e pods.

Kërkesat dhe kufizimet

platform/deployment.yaml do të shihni se ne kemi koduar ngushtë fushën e burimeve. Kjo funksionon mirë me HPA, por mund të kërkohet konfigurim shtesë. Përdorni patch kustomize. Shih. ingress-patch.yaml.tmpl dhe ./kustomization.yaml.tmpl

Përfundim

Ja, ne e instaluam Camunda BPM në Kubernetes me metrika Prometheus, logje, databazë H2, TLS dhe Ingress. Shtuam skedarët jar dhe skedarët e konfigurimit duke përdorur ConfigMaps dhe Dockerfile. Diskutuam për shkëmbimin e të dhënave me volumet dhe drejtpërdrejt në variablat e ambientit nga sekretet. Krahas kësaj, ofruam një përmbledhje të konfigurimit të Camunda për disa replika dhe API të autentifikuar.

Linke

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

├── generated-manifest.yaml <- manifest për përdorim pa kustomize
├── images
│ └── camunda-bpm
│ └── Dockerfile <- imazhi i mbushjes së docker
├── ingress-patch.yaml.tmpl <- konfigurimi i hyrjes specifik për site
├── kustomization.yaml.tmpl <- Kustomizimi kryesor
├── Makefile <- targetet e bërjes
├── namespace.yaml
├── platform
│ ├── config
│ │ └── prometheus-jmx.yaml <- skedari i konfigurimit të eksportuesit prometheus
│ ├── deployment.yaml <- bërja kryesore
│ ├── ingress.yaml
│ ├── kustomization.yaml <- kustomizimi "bazë"
│ ├── service-monitor.yaml <- shembulli i konfigurimit të prometheus-operator
│ └── service.yaml
└── skaffold.yaml.tmpl <- direktivat e skafold

05.08.2020, përkthim artikullit Alastair Firth, Lars Lange

Burimi: habr.com

Bleni hostim të besueshëm për faqe me mbrojtje nga DDoS, serverë VPS VDS 🔥 Bleni hostim të besueshëm për faqe me mbrojtje nga DDoS, serverë VPS VDS | ProHoster