په Kubernetes کې د کامونډا BPM چلول

په Kubernetes کې د کامونډا BPM چلول

ایا تاسو Kubernetes کاروئ؟ د خپل کامونډا BPM مثالونه له مجازی ماشینونو څخه لرې کولو ته چمتو یاست ، یا شاید یوازې په کوبرنیټس کې یې د چلولو هڅه وکړئ؟ راځئ چې ځینې عام ترتیبونه او انفرادي توکي وګورو چې ستاسو د ځانګړو اړتیاو سره سم تنظیم کیدی شي.

داسې انګیرل کیږي چې تاسو مخکې Kubernetes کارولي دي. که نه، نو ولې یو نظر نه اخلئ رهبري او خپل لومړی کلستر نه پیل کوئ؟

لیکوالان

  • الیسټر فیرت (الیسټر فیرت) - د کامونډا کلاوډ ټیم کې د سایټ لوړ باوري انجینر؛
  • لارس لانج (لارس لینګ) - په کامونډا کې د DevOps انجینر.

په لنډه کښی:

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

سمه ده، دا شاید کار ونه کړي ځکه چې تاسو سکافولډ او کسټمیز نصب نلرئ. ښه نو بیا یې ولولئ!

Camunda BPM څه شی دی؟

Camunda BPM د خلاصې سرچینې سوداګرۍ پروسې مدیریت او د پریکړې اتومات کولو پلیټ فارم دی چې د سوداګرۍ کاروونکو او سافټویر پراختیا کونکي سره وصل کوي. دا د خلکو د همغږۍ او وصل کولو لپاره مثالی دی، (مائیکرو) خدمتونه یا حتی بوټونه! تاسو کولی شئ د مختلف کارولو قضیو په اړه نور ولولئ دلته مخونه.

ولې Kubernetes وکاروئ

Kubernetes په لینکس کې د عصري غوښتنلیکونو چلولو لپاره د حقیقت معیار ګرځیدلی. د هارډویر ایمولیشن پرځای د سیسټم کالونو په کارولو سره او د حافظې او کاري سویچنګ اداره کولو لپاره د کرنل وړتیا ، د بوټ وخت او د پیل وخت لږترلږه ساتل کیږي. په هرصورت، ترټولو لویه ګټه ممکن د معیاري API څخه راشي چې Kubernetes د ټولو غوښتنلیکونو لخوا اړین زیربنا تنظیم کولو لپاره چمتو کوي: ذخیره کول، شبکه کول، او څارنه. دا د جون په 2020 کې 6 کلن شو او شاید د خلاصې سرچینې دوهمه لویه پروژه وي (له لینکس وروسته). دا پدې وروستیو کې په تیرو څو کلونو کې د ګړندي تکرار وروسته په فعاله توګه خپل فعالیت ثبات کوي ځکه چې دا په ټوله نړۍ کې د تولید کاري بارونو لپاره مهم کیږي.

د کیمونډا BPM انجن کولی شي په اسانۍ سره په ورته کلستر کې روان نورو غوښتنلیکونو سره وصل شي، او کوبرنیټس خورا ښه پیمانه چمتو کوي، تاسو ته اجازه درکوي چې د زیربنا لګښتونه یوازې هغه وخت زیات کړئ کله چې واقعیا اړتیا وي (او په اسانۍ سره د اړتیا سره سم یې کم کړئ).

د نظارت کیفیت د وسیلو لکه پرومیټیوس ، ګرافانا ، لوکي ، فلینټ او ایلسټیسټیرک سره هم خورا ښه شوی ، تاسو ته اجازه درکوي په مرکز کې ټول کاري بارونه په کلستر کې وګورئ. نن ورځ موږ به وګورو چې څنګه د جاوا مجازی ماشین (JVM) کې د پرومیتیس صادرونکي پلي کول.

موخې

راځئ چې یو څو ساحې وګورو چیرې چې موږ کولی شو د کیمونډا BPM ډاکر عکس تنظیم کړو (github) نو دا د کوبرنیټس سره ښه اړیکه لري.

  1. ثبتونه او میټریکونه؛
  2. د ډیټابیس اړیکې؛
  3. مستند;
  4. د غونډې مدیریت.

موږ به د دې اهدافو ترلاسه کولو لپاره څو لارې وګورو او ټوله پروسه به په روښانه توګه وښیو.

تبصره: ایا تاسو د شرکت نسخه کاروئ؟ وګوره دلته او د اړتیا سره سم د عکس لینکونه تازه کړئ.

د کاري جریان پراختیا

پدې ډیمو کې ، موږ به د ګوګل کلاوډ جوړونې په کارولو سره د ډاکر عکسونو جوړولو لپاره سکافولډ وکاروو. دا د مختلفو وسیلو لپاره ښه ملاتړ لري (لکه Kustomize او Helm)، CI او جوړونکي اوزار، او زیربنا چمتو کونکي. دوتنه skaffold.yaml.tmpl د ګوګل کلاوډ جوړونې او GKE لپاره تنظیمات شامل دي، د تولید درجې زیربنا چلولو لپاره خورا ساده لاره چمتو کوي.

make skaffold د ډاکرفایل شرایط به په کلاوډ جوړ کې بار کړي ، عکس به رامینځته کړي او په GCR کې به یې زیرمه کړي ، او بیا به خپل کلستر ته څرګندونه پلي کړي. دا هغه څه دي چې دا یې کوي make skaffold، مګر سکافولډ ډیری نورې ځانګړتیاوې لري.

په کوبرنیټس کې د یامل ټیمپلیټونو لپاره ، موږ د بشپړ مینیفیسټ له مینځه وړلو پرته د یامل پوښونو اداره کولو لپاره kustomize کاروو ، تاسو ته اجازه درکوي چې وکاروئ git pull --rebase د نورو پرمختګونو لپاره. اوس دا په kubectl کې دی او دا د داسې شیانو لپاره خورا ښه کار کوي.

موږ د *.yaml.tmpl فایلونو کې د کوربه نوم او GCP پروژې ID ډکولو لپاره envsubst هم کاروو. تاسو کولی شئ وګورئ چې دا څنګه کار کوي makefile یا یوازې نور دوام ورکړئ.

اړین شرایط

  • د کار کلستر کوبنیټس
  • دودیز کړئ
  • سکافولډ - د خپل ډاکر عکسونو رامینځته کولو او GKE ته اسانه ځای په ځای کولو لپاره
  • د دې کوډ کاپي
  • Envsubst

د منشور په کارولو سره کاري جریان

که تاسو نه غواړئ kustomize یا skaffold وکاروئ، تاسو کولی شئ په دې کې د منشورونو ته مراجعه وکړئ generated-manifest.yaml او دوی د خپلې خوښې کاري فلو سره تطابق کړئ.

لوګو او میټریکونه

Prometheus په Kubernetes کې د میټریکونو راټولولو معیار ګرځیدلی. دا د AWS کلاوډ واچ میټریکونو ، کلاوډ واچ خبرتیاوې ، سټیک ډرایور میټریکس ، سټیټسD ، ډیټاډګ ، ناګیوس ، vSphere میټریکونو او نورو په څیر ورته ځای نیسي. دا خلاص سرچینه ده او د پوښتنې ځواکمنه ژبه لري. موږ به لید ګرافانا ته وسپارو - دا د بکس څخه بهر د ډیری ډشبورډونو سره راځي. دوی یو له بل سره وصل دي او نصب کول نسبتا اسانه دي prometheus-آپریټر.

په ډیفالټ ډول، پرومیتیوس د استخراج ماډل کاروي <service>/metrics، او د دې لپاره د سایډ کار کانټینر اضافه کول عام دي. له بده مرغه، د JMX میتریکونه په JVM کې خورا ښه ننوتل شوي، نو د سایډ کار کانټینرونه دومره اغیزمن ندي. راځئ چې وصل کړو jmx_exporter خلاص سرچینه له پرومیټیوس څخه JVM ته د کانټینر عکس کې اضافه کولو سره چې لاره چمتو کوي /metrics په بل بندر کې.

کانټینر ته Prometheus jmx_exporter اضافه کړئ

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

ښه، دا اسانه وه. صادرونکی به د ټامکاټ څارنه وکړي او خپل میټریکونه به په پرومیتیس فارمیټ کې ښکاره کړي <svc>:9404/metrics

د صادرونکي تنظیم کول

پام لرونکی لوستونکی شاید حیران شي چې دا له کوم ځای څخه راغلی prometheus-jmx.yaml؟ ډیری بیلابیل شیان شتون لري چې په JVM کې پرمخ ځي، او ټامکاټ یوازې یو له دوی څخه دی، نو صادرونکی یو څه اضافي ترتیباتو ته اړتیا لري. د ټامکاټ، وحشي مچۍ، کافکا او داسې نورو لپاره معیاري تشکیلات شتون لري دلته. موږ به tomcat په توګه اضافه کړو ConfigMap په Kubernetes کې او بیا یې د حجم په توګه نصب کړئ.

لومړی، موږ زموږ پلیټ فارم/config/ لارښود ته د صادرونکي ترتیب فایل اضافه کوو

platform/config
└── prometheus-jmx.yaml

بیا موږ اضافه کوو ConfigMapGenerator в kustomization.yaml.tmpl:

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

دا به هر عنصر اضافه کړي files[] د ConfigMap ترتیب عنصر په توګه. ConfigMapGenerators خورا ښه دي ځکه چې دوی د ترتیب کولو ډاټا هش کوي او د پوډ بیا پیل کولو مجبوروي که دا بدل شي. دوی په پلي کولو کې د تشکیلاتو اندازه هم کموي ځکه چې تاسو کولی شئ په یو VolumeMount کې د تشکیلاتو فایلونو بشپړ "فولډر" نصب کړئ.

په نهایت کې ، موږ اړتیا لرو ConfigMap پوډ ته د حجم په توګه نصب کړو:

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

په زړه پورې. که Prometheus د بشپړ پاکولو لپاره تنظیم شوی نه وي، تاسو ممکن ورته ووایاست چې پوډونه پاک کړئ. د Prometheus Operator کاروونکي کولی شي وکاروي service-monitor.yaml د پیل کولو لپاره. سپړنه Service-monitor.yaml, آپریټر ډیزاین и ServiceMonitorSpec مخکې له دې چې تاسو پیل کړئ.

دا نمونه د نورو کارولو قضیو ته غزول

ټول هغه فایلونه چې موږ په ConfigMapGenerator کې اضافه کوو په نوي لارښود کې به موجود وي /etc/config. تاسو کولی شئ دا ټیمپلیټ وغځوئ ترڅو د نورو ترتیب کولو فایلونو نصبولو لپاره چې تاسو ورته اړتیا لرئ. تاسو حتی کولی شئ د نوي پیل سکریپټ نصب کړئ. تاسو کولی شئ کار واخلئ subPath د انفرادي فایلونو نصبولو لپاره. د xml فایلونو تازه کولو لپاره، کارولو ته پام وکړئ xmlstarlet د sed پرځای. دا لا دمخه په عکس کې شامل دی.

مجلې

ښه خبر! د غوښتنلیک لاګونه دمخه په stdout کې شتون لري ، د مثال په توګه kubectl logs. Fluentd (په GKE کې د ډیفالټ لخوا نصب شوی) به ستاسو لاګونه Elasticsearch، Loki، یا ستاسو د سوداګرۍ لاګنګ پلیټ فارم ته واستوي. که تاسو غواړئ د لاګونو لپاره jsonify وکاروئ نو تاسو کولی شئ د نصبولو لپاره پورته ټیمپلیټ تعقیب کړئ لاګ بیک.

ډیټابیس

په ډیفالټ کې، عکس به د H2 ډیټابیس ولري. دا زموږ لپاره مناسب نه دی، او موږ به د ګوګل کلاوډ SQL د کلاوډ SQL پراکسي سره کاروو - دا به وروسته د داخلي ستونزو د حل لپاره اړین وي. دا یو ساده او د باور وړ انتخاب دی که تاسو د ډیټابیس په ترتیب کولو کې خپل غوره توبونه نلرئ. AWS RDS ورته خدمت وړاندې کوي.

د هغه ډیټابیس په پام کې نیولو پرته چې تاسو یې غوره کوئ، پرته لدې چې دا H2 وي، تاسو اړتیا لرئ چې مناسب چاپیریال متغیرات تنظیم کړئ platform/deploy.yaml. دا یو څه داسې ښکاري:

-- platform/deployment.yaml
apiVersion: apps/v1
kind: Deployment
[...] spec:
template:
spec:
[...] containers:
- name: camunda-bpm
env:
- name: DB_DRIVER
value: org.postgresql.Driver
- name: DB_URL
value: jdbc:postgresql://postgres-proxy.db:5432/process-engine
- name: DB_USERNAME
valueFrom:
secretKeyRef:
name: cambpm-db-credentials
key: db_username
- name: DB_PASSWORD
valueFrom:
secretKeyRef:
name: cambpm-db-credentials
key: db_password
[...]

تبصره: تاسو کولی شئ د پوښښ په کارولو سره مختلف چاپیریالونو ته د ځای په ځای کولو لپاره Kustomize وکاروئ: مثال.

تبصره: استعمال valueFrom: secretKeyRef. مهرباني وکړئ وکاروئ د Kubernetes دا ځانګړتیا حتی د پراختیا پرمهال ستاسو رازونه خوندي وساتئ.

احتمال لري چې تاسو دمخه د Kubernetes رازونو اداره کولو لپاره غوره سیسټم لرئ. که نه، دلته ځینې اختیارونه دي: د خپل کلاوډ چمتو کونکي KMS سره یې کوډ کړئ او بیا یې د CD پایپ لاین له لارې د رازونو په توګه K8S ته داخل کړئ - موزیلا SOPS - د Kustomize رازونو سره په ترکیب کې به خورا ښه کار وکړي. نورې وسیلې شتون لري، لکه dotGPG، چې ورته دندې ترسره کوي: HashiCorp Vault, د پټ ارزښت پلگ انونه تنظیم کړئ.

برید

تر هغه چې تاسو د محلي پورټ فارورډینګ کارولو انتخاب نه کوئ، تاسو به یو ترتیب شوي انګریس کنټرولر ته اړتیا ولرئ. که تاسو ونه کاروئ ingress-nginx (د هیلم چارټ) بیا تاسو ډیری احتمال دمخه پوهیږئ چې تاسو اړتیا لرئ په کې اړین تشریحات نصب کړئ ingress-patch.yaml.tmpl او یا platform/ingress.yaml. که تاسو ingress-nginx کاروئ او د nginx ingress ټولګي وګورئ چې د بار بیلنسر سره ورته اشاره کوي او د بهرني DNS یا وائلډ کارډ DNS ننوتل ، تاسو ښه یاست چې لاړ شئ. که نه نو ، د انګریس کنټرولر او DNS تنظیم کړئ ، یا دا مرحلې پریږدئ او پوډ ته مستقیم اړیکه وساتئ.

ټي ایل ایس

که تاسو یې کاروئ سند - مدیر یا kube-lego او letsencrypt - د نوي ننوتلو سندونه به په اوتومات ډول ترلاسه شي. که نه نو، خلاص کړئ ingress-patch.yaml.tmpl او دا ستاسو د اړتیاو سره سم تنظیم کړئ.

لانچ!

که تاسو پورته لیکل شوي هرڅه تعقیب کړئ، نو بیا کمانډ make skaffold HOSTNAME=<you.example.com> باید یو موجود مثال په لاره واچوي <hostname>/camunda

که تاسو خپل ننوتل عامه یو آر ایل ته نه وي ټاکلي، تاسو کولی شئ د هغې سره بیرته راستانه کړئ localhost: kubectl port-forward -n camunda-bpm-demo svc/camunda-bpm 8080:8080 په localhost:8080/camunda

یو څو دقیقې انتظار وکړئ تر هغه چې ټامکټ په بشپړ ډول چمتو وي. د تصدیق مدیر به د ډومین نوم تصدیق کولو لپاره یو څه وخت ونیسي. بیا تاسو کولی شئ د موجود وسیلو په کارولو سره لاګونه وڅارئ لکه د کیوبیټیل په څیر وسیله، یا په ساده ډول د کیوبیټل په کارولو سره:

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

راتلونکی ګامونه

واکمنۍ

دا د Kubernetes په پرتله د Camunda BPM تنظیم کولو لپاره خورا اړونده ده، مګر دا مهمه ده چې په یاد ولرئ چې په ډیفالټ کې، تصدیق په REST API کې غیر فعال دی. تاسو یې کولای شئ بنسټیز تصدیق فعال کړئ یا بله طریقه وکاروئ لکه J.W.T.. تاسو کولی شئ په انځور کې د موجوده فایلونو د سمون لپاره د xml، یا xmlstarlet (پورته وګورئ) د پورته کولو لپاره configmaps او حجمونه وکاروئ، او یا د wget وکاروئ یا یې د init کانټینر او شریک حجم په کارولو سره پورته کړئ.

د ناستې مدیریت

د ډیری نورو غوښتنلیکونو په څیر، کیمونډا BPM په JVM کې ناستې اداره کوي، نو که تاسو غواړئ چې ډیری نقلونه پرمخ بوځي، تاسو کولی شئ چپچینې ناستې فعال کړئ (د مثال په توګه د ingress-nginx لپاره)، کوم چې به موجود وي تر هغه چې نقل ورک شي، یا د کوکیز لپاره د Max-Age خاصیت تنظیم کړي. د ډیر قوي حل لپاره ، تاسو کولی شئ په Tomcat کې د سیشن مدیر ځای په ځای کړئ. لارس لري جلا پوسټ په دې موضوع، مګر یو څه لکه:

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 '/^</Context>/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

تبصره: تاسو کولی شئ د sed پرځای xmlstarlet وکاروئ

موږ کارول twemproxy د ګوګل کلاوډ میموریسټور مخې ته ، سره memcached-session-manager (د ریډیس ملاتړ کوي) د دې چلولو لپاره.

اندازه کول

که تاسو دمخه ناستې پوهیږئ ، نو د کیمونډا BPM اندازه کولو لپاره لومړی (او ډیری وختونه وروستی) محدودیت ممکن ډیټابیس سره اړیکه وي. جزوی تخصیص لا دمخه شتون لري "له بکس څخه" راځئ چې په settings.xml فایل کې intialSize هم غیر فعال کړو. اضافه کړئ افقی پوډ آټوسکلر (HPA) او تاسو کولی شئ په اسانۍ سره د پوډونو شمیر اندازه کړئ.

غوښتنې او محدودیتونه

В platform/deployment.yaml تاسو به وګورئ چې موږ د سرچینو ساحه سخته کوډ کړې ده. دا د HPA سره ښه کار کوي، مګر ممکن اضافي ترتیباتو ته اړتیا ولري. د kustomize پیچ د دې لپاره مناسب دی. سانتي متر. ingress-patch.yaml.tmpl и ./kustomization.yaml.tmpl

پایلې

نو موږ د پرومیتیس میټریکونو ، لاګونو ، H2 ډیټابیس ، TLS او انګریس سره په کوبرنیټس کې د کامونډا BPM نصب کړ. موږ د ConfigMaps او Dockerfile په کارولو سره د جار فایلونه او د ترتیب کولو فایلونه اضافه کړل. موږ حجمونو ته د معلوماتو تبادلې او مستقیم له رازونو څخه د چاپیریال متغیرونو په اړه خبرې وکړې. برسېره پردې، موږ د ډیری نقلونو او یو مستند شوي API لپاره د کمونډا ترتیب کولو یوه عمومي کتنه وړاندې کړه.

مرجع

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

├── generated-manifest.yaml <- manifest for use without kustomize
├── images
│ └── camunda-bpm
│ └── Dockerfile <- overlay docker image
├── ingress-patch.yaml.tmpl <- site-specific ingress configuration
├── kustomization.yaml.tmpl <- main Kustomization
├── Makefile <- make targets
├── namespace.yaml
├── platform
│ ├── config
│ │ └── prometheus-jmx.yaml <- prometheus exporter config file
│ ├── deployment.yaml <- main deployment
│ ├── ingress.yaml
│ ├── kustomization.yaml <- "base" kustomization
│ ├── service-monitor.yaml <- example prometheus-operator config
│ └── service.yaml
└── skaffold.yaml.tmpl <- skaffold directives

05.08.2020/XNUMX/XNUMX، ژباړه مقالې الیسټر فیرت، لارس لانج

سرچینه: www.habr.com

Add a comment