کیا آپ Kubernetes استعمال کر رہے ہیں؟ اپنے Camunda BPM مثالوں کو ورچوئل مشینوں سے باہر منتقل کرنے کے لیے تیار ہیں، یا شاید انہیں Kubernetes پر چلانے کی کوشش کریں؟ آئیے کچھ عام کنفیگریشنز اور انفرادی آئٹمز کو دیکھتے ہیں جو آپ کی مخصوص ضروریات کے مطابق بنائی جا سکتی ہیں۔
یہ فرض کرتا ہے کہ آپ نے پہلے Kubernetes استعمال کیا ہے۔ اگر نہیں تو کیوں نہ ایک نظر ڈالیں۔ رہنما اور اپنا پہلا کلسٹر شروع نہیں کرتے؟
لارس لینج (لارس لینج) - کیمونڈا میں ڈی او اوپس انجینئر۔
مختصرا:
git clone https://github.com/camunda-cloud/camunda-examples.git
cd camunda-examples/camunda-bpm-demo
make skaffold
ٹھیک ہے، اس نے شاید کام نہیں کیا کیونکہ آپ کے پاس اسکافولڈ اور کسٹمائز انسٹال نہیں ہے۔ اچھا پھر پڑھو!
Camunda BPM کیا ہے؟
Camunda BPM ایک اوپن سورس بزنس پروسیس مینجمنٹ اور فیصلہ آٹومیشن پلیٹ فارم ہے جو کاروباری صارفین اور سافٹ ویئر ڈویلپرز کو جوڑتا ہے۔ یہ لوگوں، (مائیکرو) خدمات یا یہاں تک کہ بوٹس کو مربوط کرنے اور جوڑنے کے لیے مثالی ہے! آپ مختلف استعمال کے معاملات کے بارے میں مزید پڑھ سکتے ہیں۔ لنک.
کبرنیٹس کیوں استعمال کریں۔
لینکس پر جدید ایپلی کیشنز چلانے کے لیے Kubernetes ڈی فیکٹو معیار بن گیا ہے۔ ہارڈ ویئر ایمولیشن کے بجائے سسٹم کالز کا استعمال کرتے ہوئے اور میموری اور ٹاسک سوئچنگ کا انتظام کرنے کی دانا کی صلاحیت، بوٹ ٹائم اور اسٹارٹ اپ ٹائم کو کم سے کم رکھا جاتا ہے۔ تاہم، سب سے بڑا فائدہ اس معیاری API سے ہو سکتا ہے جو Kubernetes تمام ایپلیکیشنز کے لیے درکار بنیادی ڈھانچے کو ترتیب دینے کے لیے فراہم کرتا ہے: اسٹوریج، نیٹ ورکنگ، اور مانیٹرنگ۔ یہ جون 2020 میں 6 سال کا ہو گیا ہے اور یہ شاید دوسرا سب سے بڑا اوپن سورس پروجیکٹ ہے (لینکس کے بعد)۔ یہ حال ہی میں پچھلے کچھ سالوں میں تیزی سے تکرار کے بعد اپنی فعالیت کو فعال طور پر مستحکم کر رہا ہے کیونکہ یہ دنیا بھر میں پیداواری کام کے بوجھ کے لیے اہم ہو گیا ہے۔
Camunda BPM Engine آسانی سے اسی کلسٹر پر چلنے والی دیگر ایپلی کیشنز سے منسلک ہو سکتا ہے، اور Kubernetes بہترین اسکیل ایبلٹی فراہم کرتا ہے، جس سے آپ کو بنیادی ڈھانچے کی لاگت میں صرف اس وقت اضافہ کرنے کی اجازت ملتی ہے جب واقعی ضرورت ہو (اور آسانی سے انہیں ضرورت کے مطابق کم کر دیں)۔
پرومیتھیس، گرافانا، لوکی، فلوئنٹ اور ایلاسٹک سرچ جیسے ٹولز کے ساتھ مانیٹرنگ کا معیار بھی بہت بہتر ہوا ہے، جس سے آپ کلسٹر میں تمام کام کے بوجھ کو مرکزی طور پر دیکھ سکتے ہیں۔ آج ہم دیکھیں گے کہ جاوا ورچوئل مشین (JVM) میں Prometheus برآمد کنندہ کو کیسے نافذ کیا جائے۔
اہداف
آئیے چند ایسے علاقوں کو دیکھتے ہیں جہاں ہم کیمونڈا بی پی ایم ڈوکر امیج کو اپنی مرضی کے مطابق بنا سکتے ہیں (گاٹہوب) تاکہ یہ Kubernetes کے ساتھ اچھی طرح سے تعامل کرے۔
لاگ اور میٹرکس؛
ڈیٹا بیس کنکشن؛
تصدیق؛
سیشن کا انتظام۔
ہم ان اہداف کو حاصل کرنے کے کئی طریقے دیکھیں گے اور پورے عمل کو واضح طور پر دکھائیں گے۔
نوٹ: کیا آپ انٹرپرائز ورژن استعمال کر رہے ہیں؟ دیکھو یہاں اور ضرورت کے مطابق تصویری لنکس کو اپ ڈیٹ کریں۔
ورک فلو کی ترقی
اس ڈیمو میں، ہم اسکافولڈ کو گوگل کلاؤڈ بلڈ کا استعمال کرتے ہوئے ڈوکر امیجز بنانے کے لیے استعمال کریں گے۔ اس میں مختلف ٹولز (جیسے Kustomize اور Helm)، CI اور بلڈ ٹولز، اور انفراسٹرکچر فراہم کرنے والوں کے لیے اچھی مدد حاصل ہے۔ فائل skaffold.yaml.tmpl Google Cloud Build اور GKE کی ترتیبات پر مشتمل ہے، جو پروڈکشن گریڈ کے بنیادی ڈھانچے کو چلانے کا ایک بہت آسان طریقہ فراہم کرتی ہے۔
make skaffold Dockerfile سیاق و سباق کو Cloud Build میں لوڈ کرے گا، امیج بنائے گا اور اسے GCR میں اسٹور کرے گا، اور پھر مینی فیسٹس کو آپ کے کلسٹر پر لاگو کرے گا۔ یہ وہی کرتا ہے make skaffold، لیکن اسکافولڈ میں بہت سی دوسری خصوصیات ہیں۔
Kubernetes میں yaml ٹیمپلیٹس کے لیے، ہم پورے مینی فیسٹ کو کانٹے لگائے بغیر یامل اوورلیز کو منظم کرنے کے لیے کسٹمائز کا استعمال کرتے ہیں، جو آپ کو استعمال کرنے کی اجازت دیتا ہے۔ git pull --rebase مزید بہتری کے لیے۔ اب یہ kubectl میں ہے اور یہ ایسی چیزوں کے لیے کافی اچھا کام کرتا ہے۔
ہم میزبان نام اور GCP پروجیکٹ ID کو *.yaml.tmpl فائلوں میں بھرنے کے لیے envsubst کا بھی استعمال کرتے ہیں۔ آپ دیکھ سکتے ہیں کہ یہ کیسے کام کرتا ہے۔ makefile یا صرف مزید جاری رکھیں.
سکافولڈ - اپنی ڈوکر امیجز بنانے اور GKE میں آسان تعیناتی کے لیے
اس کوڈ کی کاپی
Envsubst
مینی فیسٹ کا استعمال کرتے ہوئے ورک فلو
اگر آپ کسٹمائز یا اسکافولڈ استعمال نہیں کرنا چاہتے ہیں، تو آپ مینی فیسٹ کا حوالہ دے سکتے ہیں generated-manifest.yaml اور انہیں اپنی پسند کے ورک فلو کے مطابق ڈھالیں۔
لاگ اور میٹرکس
Prometheus Kubernetes میں میٹرکس جمع کرنے کا معیار بن گیا ہے۔ یہ AWS Cloudwatch Metrics، Cloudwatch Alerts، Stackdriver Metrics، StatsD، Datadog، Nagios، vSphere Metrics اور دیگر کے طور پر وہی مقام رکھتا ہے۔ یہ اوپن سورس ہے اور اس میں استفسار کی ایک طاقتور زبان ہے۔ ہم گرافانا کو ویژولائزیشن سونپیں گے - یہ باکس کے باہر دستیاب ڈیش بورڈز کی ایک بڑی تعداد کے ساتھ آتا ہے۔ وہ ایک دوسرے سے جڑے ہوئے ہیں اور ان کے ساتھ انسٹال کرنا نسبتاً آسان ہے۔ prometheus-آپریٹر.
پہلے سے طے شدہ طور پر، Prometheus نکالنے کا ماڈل استعمال کرتا ہے۔ <service>/metricsاور اس کے لیے سائیڈ کار کنٹینرز شامل کرنا عام بات ہے۔ بدقسمتی سے، JMX میٹرکس JVM میں بہترین لاگ ان ہوتے ہیں، اس لیے سائڈ کار کنٹینرز اتنے موثر نہیں ہوتے۔ آئیے جڑتے ہیں۔ jmx_exporter Prometheus سے 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 ان میں سے صرف ایک ہے، لہذا برآمد کنندہ کو کچھ اضافی ترتیب کی ضرورت ہے۔ ٹامکیٹ، وائلڈ فلائی، کافکا اور اسی طرح کی معیاری ترتیبیں دستیاب ہیں۔ یہاں. ہم ٹامکیٹ کو بطور شامل کریں گے۔ کنفیگ میپ Kubernetes میں اور پھر اسے حجم کے طور پر ماؤنٹ کریں۔
سب سے پہلے، ہم برآمد کنندہ کنفیگریشن فائل کو اپنے پلیٹ فارم/config/ ڈائریکٹری میں شامل کرتے ہیں۔
platform/config
└── prometheus-jmx.yaml
پھر ہم شامل کرتے ہیں۔ کنفیگ میپ جنریٹر в kustomization.yaml.tmpl:
یہ ہر ایک عنصر کو شامل کرے گا۔ files[] ConfigMap کنفیگریشن عنصر کے طور پر۔ ConfigMapGenerators بہت اچھے ہیں کیونکہ وہ کنفیگریشن ڈیٹا کو ہیش کرتے ہیں اور اگر یہ تبدیل ہوتا ہے تو پوڈ کو دوبارہ شروع کرنے پر مجبور کرتے ہیں۔ وہ تعیناتی میں کنفیگریشن کی مقدار کو بھی کم کرتے ہیں کیونکہ آپ ایک والیوم ماؤنٹ میں کنفیگریشن فائلوں کے پورے "فولڈر" کو ماؤنٹ کر سکتے ہیں۔
آخر میں، ہمیں ConfigMap کو پوڈ پر حجم کے طور پر ماؤنٹ کرنے کی ضرورت ہے:
کمال ہے۔ اگر Prometheus کو مکمل صفائی کرنے کے لیے ترتیب نہیں دیا گیا ہے، تو آپ کو اسے پوڈز کو صاف کرنے کے لیے بتانا پڑ سکتا ہے۔ Prometheus آپریٹر استعمال کرنے والے استعمال کر سکتے ہیں۔ service-monitor.yaml شروع کرنے کے لیے دریافت کریں۔ Service-monitor.yaml, آپریٹر ڈیزائن и سروس مانیٹر اسپیک آپ شروع کرنے سے پہلے.
اس پیٹرن کو دوسرے استعمال کے معاملات تک بڑھانا
تمام فائلیں جو ہم ConfigMapGenerator میں شامل کرتے ہیں وہ نئی ڈائریکٹری میں دستیاب ہوں گی۔ /etc/config. آپ اس ٹیمپلیٹ کو کسی بھی دوسری کنفیگریشن فائلوں کو ماؤنٹ کرنے کے لیے بڑھا سکتے ہیں جن کی آپ کو ضرورت ہے۔ یہاں تک کہ آپ ایک نیا اسٹارٹ اپ اسکرپٹ بھی لگا سکتے ہیں۔ آپ استعمال کر سکتے ہیں ذیلی راستہ انفرادی فائلوں کو ماؤنٹ کرنے کے لیے۔ xml فائلوں کو اپ ڈیٹ کرنے کے لیے، استعمال کرنے پر غور کریں۔ xmlstarlet sed کے بجائے. یہ پہلے ہی تصویر میں شامل ہے۔
.ы
بہت اچھی خبر! ایپلیکیشن لاگز پہلے سے ہی stdout پر دستیاب ہیں، مثال کے طور پر کے ساتھ kubectl logs. Fluentd (GKE میں بطور ڈیفالٹ انسٹال) آپ کے لاگز کو Elasticsearch، Loki، یا آپ کے انٹرپرائز لاگنگ پلیٹ فارم پر بھیجے گا۔ اگر آپ لاگز کے لیے jsonify استعمال کرنا چاہتے ہیں تو آپ انسٹال کرنے کے لیے اوپر دیے گئے سانچے کو فالو کر سکتے ہیں۔ لاگ بیک.
ڈیٹا بیس۔
پہلے سے طے شدہ طور پر، تصویر میں H2 ڈیٹا بیس ہوگا۔ یہ ہمارے لیے موزوں نہیں ہے، اور ہم Cloud SQL Proxy کے ساتھ Google Cloud SQL استعمال کریں گے - اندرونی مسائل کو حل کرنے کے لیے بعد میں اس کی ضرورت ہوگی۔ یہ ایک آسان اور قابل اعتماد آپشن ہے اگر آپ کے پاس ڈیٹا بیس ترتیب دینے میں اپنی ترجیحات نہیں ہیں۔ AWS RDS اسی طرح کی خدمت فراہم کرتا ہے۔
اس سے قطع نظر کہ آپ جس ڈیٹا بیس کا انتخاب کرتے ہیں، جب تک کہ یہ H2 نہ ہو، آپ کو مناسب ماحول کے متغیرات کو ترتیب دینے کی ضرورت ہوگی۔ platform/deploy.yaml. یہ کچھ اس طرح لگتا ہے:
جب تک آپ مقامی پورٹ فارورڈنگ استعمال کرنے کا انتخاب نہیں کرتے، آپ کو کنفیگرڈ انگریس کنٹرولر کی ضرورت ہوگی۔ اگر آپ استعمال نہیں کرتے ہیں۔ ingress-nginx (ہیلم چارٹ) تب آپ کو غالباً پہلے ہی معلوم ہو گیا ہو گا کہ آپ کو ضروری تشریحات انسٹال کرنے کی ضرورت ہے۔ ingress-patch.yaml.tmpl یا platform/ingress.yaml. اگر آپ ingress-nginx استعمال کر رہے ہیں اور ایک nginx انگریس کلاس دیکھتے ہیں جس میں لوڈ بیلنسر اس کی طرف اشارہ کر رہا ہے اور ایک بیرونی DNS یا وائلڈ کارڈ DNS اندراج ہے، تو آپ جانا اچھا ہے۔ بصورت دیگر، Ingress Controller اور DNS کو کنفیگر کریں، یا ان مراحل کو چھوڑیں اور پوڈ سے براہ راست کنکشن رکھیں۔
TLS
اگر آپ استعمال کررہے ہیں سند مینیجر یا kube-lego اور letsencrypt - نئے لاگ ان کے لیے سرٹیفکیٹ خود بخود حاصل کیے جائیں گے۔ بصورت دیگر، کھولیں۔ ingress-patch.yaml.tmpl اور اپنی ضروریات کے مطابق اسے اپنی مرضی کے مطابق بنائیں۔
لانچ!
اگر آپ اوپر لکھی ہوئی ہر چیز کی پیروی کرتے ہیں، تو کمانڈ make skaffold HOSTNAME=<you.example.com> میں ایک دستیاب مثال کا آغاز کرنا چاہئے۔ <hostname>/camunda
اگر آپ نے اپنا لاگ ان عوامی URL پر سیٹ نہیں کیا ہے، تو آپ اسے اس کے ساتھ ری ڈائریکٹ کر سکتے ہیں۔ localhost: kubectl port-forward -n camunda-bpm-demo svc/camunda-bpm 8080:8080 پر localhost:8080/camunda
ٹامکیٹ مکمل طور پر تیار ہونے تک چند منٹ انتظار کریں۔ سرٹ مینیجر کو ڈومین نام کی تصدیق کرنے میں کچھ وقت لگے گا۔ اس کے بعد آپ دستیاب ٹولز جیسے کہ kubetail جیسے ٹول، یا صرف kubectl کا استعمال کرتے ہوئے لاگز کی نگرانی کر سکتے ہیں:
یہ Kubernetes کے مقابلے Camunda BPM کو ترتیب دینے کے لیے زیادہ متعلقہ ہے، لیکن یہ نوٹ کرنا ضروری ہے کہ ڈیفالٹ کے طور پر، REST API میں تصدیق کو غیر فعال کر دیا گیا ہے۔ آپ کر سکتے ہیں۔ بنیادی تصدیق کو فعال کریں۔ یا کوئی اور طریقہ استعمال کریں۔ جے ڈبلیو ٹی. آپ تصویر میں موجود فائلوں میں ترمیم کرنے کے لیے xml، یا xmlstarlet (اوپر دیکھیں) کو لوڈ کرنے کے لیے configmaps اور والیوم استعمال کر سکتے ہیں، اور یا تو wget استعمال کر سکتے ہیں یا init کنٹینر اور مشترکہ والیوم کا استعمال کر کے انھیں لوڈ کر سکتے ہیں۔
سیشن کا انتظام
بہت سی دوسری ایپلی کیشنز کی طرح، Camunda BPM JVM میں سیشنز کو ہینڈل کرتا ہے، لہذا اگر آپ ایک سے زیادہ نقلیں چلانا چاہتے ہیں، تو آپ سٹکی سیشنز کو فعال کر سکتے ہیں (مثال کے طور پر ingress-nginx کے لیے)، جو اس وقت تک موجود رہے گا جب تک کہ نقل غائب نہ ہو جائے، یا کوکیز کے لیے Max-Age وصف متعین کریں۔ مزید مضبوط حل کے لیے، آپ Tomcat میں سیشن مینیجر تعینات کر سکتے ہیں۔ لارس نے علیحدہ پوسٹ اس موضوع پر، لیکن کچھ اس طرح:
نوٹ: آپ sed کے بجائے xmlstarlet استعمال کرسکتے ہیں۔
ہم نے استعمال کیا twemproxy گوگل کلاؤڈ میموری اسٹور کے سامنے، کے ساتھ memcached-session-manager (ریڈیس کی حمایت کرتا ہے) اسے چلانے کے لیے۔
اسکیلنگ
اگر آپ سیشنز کو پہلے ہی سمجھتے ہیں، تو Camunda BPM کو اسکیل کرنے کی پہلی (اور اکثر آخری) حد ڈیٹا بیس سے کنکشن ہو سکتی ہے۔ جزوی حسب ضرورت پہلے ہی دستیاب ہے"ڈھبے سے" آئیے settings.xml فائل میں intialSize کو بھی غیر فعال کریں۔ شامل کریں۔ Horizontal Pod Autoscaler (HPA) اور آپ آسانی سے پھلیوں کی تعداد کو آسانی سے پیمانہ کرسکتے ہیں۔
درخواستیں اور پابندیاں
В platform/deployment.yaml آپ دیکھیں گے کہ ہم نے وسائل کی فیلڈ کو سختی سے کوڈ کیا ہے۔ یہ HPA کے ساتھ اچھی طرح کام کرتا ہے، لیکن اس کے لیے اضافی کنفیگریشن کی ضرورت پڑ سکتی ہے۔ کسٹمائز پیچ اس کے لیے موزوں ہے۔ سینٹی میٹر. ingress-patch.yaml.tmpl и ./kustomization.yaml.tmpl
آؤٹ پٹ
لہذا ہم نے کیمونڈا بی پی ایم کوبرنیٹس پر پرومیتھیس میٹرکس، لاگز، H2 ڈیٹا بیس، TLS اور Ingress کے ساتھ انسٹال کیا۔ ہم نے ConfigMaps اور Dockerfile کا استعمال کرتے ہوئے جار فائلیں اور کنفیگریشن فائلیں شامل کیں۔ ہم نے ڈیٹا کو حجم میں تبدیل کرنے اور رازوں سے براہ راست ماحولیاتی متغیرات کے بارے میں بات کی۔ اس کے علاوہ، ہم نے ایک سے زیادہ نقلوں اور ایک مستند API کے لیے Camunda کو ترتیب دینے کا ایک جائزہ فراہم کیا۔