په چیلیابینسک کې سویلي برج او په کوبرنیټس کې بټریکس

د سیسادمینکا سیسټم مدیر غونډې په چیلیابینسک کې ترسره کیږي، او په پای کې ما په کوبرنیټس کې په 1C-Bitrix کې د غوښتنلیکونو چلولو لپاره زموږ د حل په اړه راپور ورکړ.

Bitrix، Kubernetes، Ceph - یو ښه مخلوط؟

زه به تاسو ته ووایم چې څنګه موږ له دې ټولو څخه کاري حل یوځای کړو.

راځئ چې لاړ شه

په چیلیابینسک کې سویلي برج او په کوبرنیټس کې بټریکس

غونډه د اپریل په 18 په چیلیابینسک کې ترسره شوه. تاسو کولی شئ زموږ د غونډو په اړه ولولئ ټایم پیډ او وګورئ یوټیوب.

که تاسو غواړئ موږ ته د راپور سره یا د اوریدونکي په توګه راشئ - ښه راغلاست ، ولیکئ [ایمیل خوندي شوی] او په ټیلیګرام t.me/vadimisakanov.

زما راپور

په چیلیابینسک کې سویلي برج او په کوبرنیټس کې بټریکس

سلایډونه

حل "Bitrix in Kubernetes، نسخه Southbridge 1.0"

زه به زموږ د حل په اړه په "کوبرنیټس کې د ډميانو لپاره" ب formatه کې خبرې وکړم ، لکه څنګه چې په ناسته کې ترسره شوي. مګر زه فرض کوم چې تاسو لږترلږه د ویکیپیډیا د مقالو په کچه د Bitrix، Docker، Kubernetes، Ceph ټکي پیژنئ.

په Kubernetes کې د Bitrix په اړه څه چمتو شوي دي؟

په Kubernetes کې د Bitrix غوښتنلیکونو د عملیاتو په اړه په ټول انټرنیټ کې خورا لږ معلومات شتون لري.
ما یوازې دا مواد وموندل:

د Qsoft څخه د الکساندر سربول، 1C-Bitrix، او انتون توزلوکوف لخوا راپور:

زه یې د اوریدو وړاندیز کوم.

د کارونکي څخه خپل حل رامینځته کول serkyron په Habré کې.
نور وموندل داسې پریکړه.

په حقیقت کې، دا ټول دي.

زه تاسو ته خبرداری درکوم ، موږ په پورته لینکونو کې د حلونو کیفیت نه دی چیک کړی :)
په هرصورت، کله چې زموږ د حل چمتو کول، ما د الکساندر سربول سره خبرې وکړې، بیا د هغه راپور لا نه و څرګند شوی، نو زما په سلایډونو کې یو توکي شتون لري "بیټریکس کوبرنیټس نه کاروي."

مګر په ډاکر کې د بټریکس چلولو لپاره لا دمخه ډیری چمتو شوي ډاکر عکسونه شتون لري: https://hub.docker.com/search?q=bitrix&type=image

ایا دا کافي دي چې په کوبرنیټس کې د بټریکس لپاره بشپړ حل رامینځته کړي؟
نه. دلته یو شمیر ستونزې شتون لري چې باید حل شي.

په Kubernetes کې د Bitrix سره ستونزې څه دي؟

لومړی، د Dockerhub څخه چمتو شوي انځورونه د Kubernetes لپاره مناسب ندي

که موږ غواړو د مایکرو خدماتو جوړښت رامینځته کړو (او په کوبرنیټس کې چې موږ معمولا کوو) ، موږ اړتیا لرو خپل د کوبرنیټس غوښتنلیک په کانټینرونو کې جلا کړو او هر کانټینر باید یو کوچنی فعالیت ترسره کړي (او ښه یې ترسره کړي). ولې یوازې یو؟ په لنډه توګه، څومره چې ساده وي، د اعتبار وړ وي.
د ډیر مشخص کیدو لپاره ، دا مقاله او ویډیو وګورئ ، مهرباني وکړئ: https://habr.com/ru/company/southbridge/blog/426637/

په ډاکر هب کې د ډاکر عکسونه په عمده ډول د ټول په یو اصولو کې جوړ شوي ، نو موږ لاهم باید خپل بایسکل جوړ کړو او حتی له سکریچ څخه عکسونه جوړ کړو.

دوهم - د سایټ کوډ د اډمین پینل څخه ایډیټ شوی

موږ په سایټ کې یوه نوې برخه جوړه کړه - کوډ تازه شو (د نوې برخې نوم سره لارښود اضافه شو).

که تاسو د اډمین پینل څخه د یوې برخې ملکیتونه بدل کړل، کوډ بدل شو.

Kubernetes "د ډیفالټ په واسطه" نشي کولی د دې سره کار وکړي؛ کانټینرونه باید بې دولت وي.

دلیل: په کلستر کې هر کانټینر (پوډ) یوازې د ټرافیک یوه برخه پروسس کوي. که تاسو یوازې په یو کانټینر (پوډ) کې کوډ بدل کړئ، نو کوډ به په مختلف پوډونو کې توپیر ولري، سایټ به په مختلف ډول کار وکړي، او د سایټ مختلف نسخې به مختلف کاروونکو ته وښودل شي. تاسو داسې ژوند نشئ کولی.

دریم - تاسو اړتیا لرئ د ګمارنې سره مسله حل کړئ

که موږ یو واحد او یو "کلاسیک" سرور ولرو، هرڅه خورا ساده دي: موږ د نوي کوډ بیس ځای په ځای کوو، ډیټابیس مهاجرت کوو، ټرافيک د کوډ نوې نسخه ته واړوو. بدلول په فوري توګه پیښیږي.
که موږ په کوبرنیټس کې سایټ ولرو، په مایکرو خدماتو کې پرې کړئ، د کوډ سره ډیری کانټینرونه شتون لري - اوه. تاسو اړتیا لرئ د کوډ نوې نسخه سره کانټینرونه راټول کړئ، د زړو پر ځای یې راوباسئ، ډیټابیس په سمه توګه وګرځوئ، او په مثالي توګه دا د لیدونکو لخوا نه لیدل کیږي. خوشبختانه، Kubernetes موږ سره پدې کې مرسته کوي، د مختلفو ډولونو ګمارلو بشپړ ګروپ ملاتړ کوي.

څلورم - تاسو اړتیا لرئ د احصایې ذخیره کولو مسله حل کړئ

که ستاسو سایټ "یوازې" 10 ګیګابایټ وي او تاسو دا په بشپړ ډول په کانټینرونو کې ځای په ځای کړئ، تاسو به د 10 ګیګابایټ کانټینرونو سره پای ته ورسیږئ چې د تل لپاره ځای په ځای کوي.
تاسو اړتیا لرئ د سایټ "تر ټولو درنې" برخې د کانټینرونو څخه بهر ذخیره کړئ ، او پوښتنه راپورته کیږي چې دا څنګه په سمه توګه ترسره کړئ

زموږ د حل څخه څه ورک دي؟

د بټریکس ټول کوډ په مایکرو فنکشنونو / مایکرو خدماتو نه ویشل شوی (نو دا چې راجسټریشن جلا دی ، د آنلاین پلورنځي ماډل جلا دی ، او داسې نور). موږ ټول کوډ بیس په هر کانټینر کې ذخیره کوو.

موږ ډیټابیس په کوبرنیټس کې هم نه ذخیره کوو (ما لاهم د پراختیا چاپیریال لپاره په کوبرنیټس کې د ډیټابیس سره حلونه پلي کړي ، مګر د تولید لپاره نه).

دا به لاهم د سایټ مدیرانو ته د پام وړ وي چې سایټ په Kubernetes کې پرمخ ځي. د "سیسټم چیک" فنکشن سم کار نه کوي؛ د اډمین پینل څخه د سایټ کوډ ایډیټ کولو لپاره ، تاسو باید لومړی د "زه غواړم کوډ ترمیم کړم" تڼۍ کلیک وکړئ.

ستونزې پیژندل شوي، د مایکرو خدماتو پلي کولو اړتیا ټاکل شوې، هدف روښانه دی - په کوبرنیټس کې د بټریکس په اړه د غوښتنلیکونو چلولو لپاره کاري سیسټم ترلاسه کول، د بټریکس وړتیاوې او د کوبرنیټس ګټې دواړه ساتل. راځئ چې پلي کول پیل کړو.

معمارۍ

د ویب سرور (کارګرانو) سره ډیری "کاري" پوډونه شتون لري.
یو د کرون دندو سره لاندې (یوازې یو ته اړتیا ده).
د اډمین پینل څخه د سایټ کوډ ایډیټ کولو لپاره یو اپ گریڈ (هم یوازې یو ته اړتیا ده).

په چیلیابینسک کې سویلي برج او په کوبرنیټس کې بټریکس

موږ پوښتنې حل کوو:

  • چیرته د غونډو ذخیره کول؟
  • زیرمه چیرته ذخیره کړئ؟
  • د احصایې ذخیره کول چیرته دي، نه د ګیګابایټ سټیټیکس د کانټینرونو په ډله کې ځای پرځای کول؟
  • ډیټابیس به څنګه کار وکړي؟

د ډاکر انځور

موږ د ډاکر عکس په جوړولو سره پیل کوو.

غوره اختیار دا دی چې موږ یو نړیوال عکس لرو، د هغې پر بنسټ موږ د کارګر پوډونه، د کرونټاسک سره پوډونه، او پوډونه لوړوو.

موږ یوازې داسې یو انځور جوړ کړ.

پدې کې nginx، apache/php-fpm (د جوړیدو پرمهال غوره کیدی شي)، د میل لیږلو لپاره msmtp، او کرون شامل دي.

کله چې د عکس راټولول، د سایټ ټول کوډ اساس / ایپ ډایرکټر ته کاپي کیږي (د هغه برخو استثنا سره چې موږ به جلا شریک ذخیره ته لاړ شو).

کوچني خدمتونه، خدمتونه

د کارګر پوزې:

  • د nginx سره کانټینر + کانټینر apache/php-fpm + msmtp
  • دا کار نه دی کړی چې msmtp په جلا مایکرو سرویس کې حرکت وکړي ، بټریکس په غوسه کیدو پیل کوي چې دا نشي کولی مستقیم بریښنالیک واستوي
  • هر کانټینر یو بشپړ کوډبیس لري.
  • په کانتینرونو کې د کوډ بدلولو منع کول.

لاندې cron:

  • د اپاچي، پی ایچ پی، کرون سره کانټینر
  • بشپړ کوډ بیس شامل دی
  • په کانتینرونو کې د کوډ بدلولو بندیز

لاندې لوړول:

  • د nginx کانټینر + اپاچی/php-fpm کانټینر + msmtp
  • په کانتینرونو کې د کوډ بدلولو هیڅ ممانعت نشته

د ناستې ذخیره

د بټریکس کیچ ذخیره

بل مهم شی: موږ د هر څه سره وصل کولو لپاره پاسورډونه ذخیره کوو ، له ډیټابیس څخه تر میل پورې ، د کبرنیټس رازونو کې. موږ بونس ترلاسه کوو: پاسورډونه یوازې هغه چا ته لیدل کیږي چې موږ یې رازونو ته لاسرسی ورکوو، او هر هغه چا ته چې د پروژې کوډ بیس ته لاسرسی لري.

د احصایې لپاره ذخیره کول

تاسو کولی شئ هرڅه وکاروئ: ceph ، nfs (مګر موږ د تولید لپاره nfs نه وړاندیز کوو) ، د کلاوډ چمتو کونکو څخه د شبکې ذخیره کول ، او داسې نور.

ذخیره باید په کانټینرونو کې د سایټ /upload/ ډایرکټر او نورو لارښودونو سره د جامد مینځپانګې سره وصل شي.

ډیټابیس

د سادګۍ لپاره، موږ وړاندیز کوو چې ډیټابیس د کوبرنیټس څخه بهر حرکت وکړو. په Kubernetes کې اډه یو جلا پیچلی دنده ده؛ دا به سکیم د شدت ترتیب نور پیچلي کړي.

د سیشن ذخیره کول

موږ memcached کاروو :)

دا د سیشن ذخیره په ښه توګه اداره کوي، کلستر شوی، او په php کې د session.save_path په توګه "اصلي" ملاتړ کیږي. دا ډول سیسټم څو ځله په کلاسیک واحد معمارۍ کې ازمول شوی ، کله چې موږ د ډیری ویب سرورونو سره کلسترونه جوړ کړل. د ګمارنې لپاره موږ هیلم کاروو.

$ helm install stable/memcached --name session

php.ini - دلته په عکس کې په میمکیچ کې د غونډو ذخیره کولو لپاره تنظیمات شامل دي

موږ د چاپیریال متغیرونه د memcached سره د کوربه په اړه د معلوماتو لیږدولو لپاره کارولي https://kubernetes.io/docs/tasks/inject-data-application/define-environment-variable-container/.
دا تاسو ته اجازه درکوي چې ورته کوډ په dev، مرحلې، ټیسټ، پروډ چاپیریال کې وکاروئ (په دوی کې د کوربه کوربه نومونه به توپیر ولري، نو موږ اړتیا لرو چې هر چاپیریال ته د غونډو لپاره یو ځانګړی کوربه نوم انتقال کړو).
د Bitrix کیچ ذخیره

موږ د غلطۍ زغمونکي ذخیره ته اړتیا لرو چې ټول پوډونه یې لیکلی او لوستلی شي.

موږ memcached هم کاروو.
دا حل پخپله د Bitrix لخوا وړاندیز کیږي.

$ helm install stable/memcached --name cache

bitrix/.settings_extra.php - دلته په Bitrix کې دا مشخص شوی چې زیرمه چیرته ساتل کیږي

موږ د چاپیریال تغیرات هم کاروو.

Krontaski

په Kubernetes کې د کرونټاسکس چلولو لپاره مختلف طریقې شتون لري.

  • د کرونټاسک چلولو لپاره د پوډ سره جلا ځای پرځای کول
  • cronjob د کرونټاسکونو اجرا کولو لپاره (که دا یو ویب ایپ وي - د wget سره https://$host$cronjobname، یا kubectl exec د یو کارګر پوډ دننه ، او داسې نور)
  • او داسې نور

تاسو کولی شئ د خورا سم په اړه بحث وکړئ ، مګر پدې حالت کې موږ د "کرونټاسک لپاره د پوډونو سره جلا ځای پرځای کول" اختیار غوره کړ.

دا څنګه ترسره کیږي:

  • د کرون دندې د ConfigMap له لارې یا د config/addcron فایل له لارې اضافه کړئ
  • په یو مثال کې موږ د کارګر پوډ سره ورته یو کانټینر لانچ کوو + په دې کې د تاج دندې اجرا کولو ته اجازه ورکوي
  • د ورته کوډ اساس کارول کیږي، د یووالي څخه مننه، د کانټینر مجلس ساده دی

موږ څه ښه ترلاسه کوو:

  • موږ په داسې چاپیریال کې د کرونټاسک کار کوو چې د پراختیا کونکو چاپیریال سره ورته وي (ډاکر)
  • کرونټاسک د کبرنیټس لپاره "بیا لیکل" ته اړتیا نلري ، دوی په ورته شکل او ورته کوډ بیس کې د پخوا په څیر کار کوي
  • د کرون دندې د ټیم ټولو غړو لخوا د تولید څانګې ته د ژمنې حقونو سره اضافه کیدی شي ، نه یوازې مدیران

د ساوت برج K8SD د اډمین پینل څخه ماډل او کوډ ایډیټ کول

موږ لاندې د لوړولو په اړه خبرې کولې؟
هلته ترافیک څنګه مستقیم کړئ؟
هوری، موږ په پی ایچ پی کې د دې لپاره یو ماډل ولیکه :) دا د بټریکس لپاره یو کوچنی کلاسیک ماډل دی. دا لا تر اوسه په عامه توګه شتون نلري، مګر موږ پلان لرو چې دا خلاص کړو.
ماډل په Bitrix کې د منظم ماډل په څیر نصب شوی:

په چیلیابینسک کې سویلي برج او په کوبرنیټس کې بټریکس

او دا داسې ښکاري:

په چیلیابینسک کې سویلي برج او په کوبرنیټس کې بټریکس

دا تاسو ته اجازه درکوي یو کوکی تنظیم کړئ چې د سایټ مدیر پیژني او کوبرنیټس ته اجازه ورکوي چې ټرافيک د اپ گریڈ پوډ ته واستوي.

کله چې بدلونونه بشپړ شي ، تاسو اړتیا لرئ د git push کلیک وکړئ ، د کوډ بدلونونه به git ته واستول شي ، بیا به سیسټم د کوډ نوې نسخه سره یو عکس رامینځته کړي او د کلستر په اوږدو کې به یې "رول آوټ" کړي ، د زاړه پوډونو ځای په ځای کړي. .

هو ، دا یو څه کرچ دی ، مګر په ورته وخت کې موږ د مایکرو سرویس جوړښت ساتو او د بټریکس کاروونکو څخه د دوی غوره فرصت نه اخلو چې د اډمین پینل څخه کوډ سم کړي. په نهایت کې ، دا یو اختیار دی؛ تاسو کولی شئ په مختلف ډول د کوډ ترمیم کولو ستونزه حل کړئ.

د هیلم چارټ

په Kubernetes کې د غوښتنلیکونو جوړولو لپاره، موږ عموما د هیلم پیکج مدیر کاروو.
په Kubernetes کې زموږ د Bitrix حل لپاره، سرګي بونډاریف، زموږ د سیسټم مخکښ مدیر، یو ځانګړی هیلم چارټ لیکلی.

دا کارګر، یوګریډ، کرون پوډونه جوړوي، ننوتل، خدمات تنظیموي، او د Kubernetes رازونو څخه پوډونو ته تغیرات لیږدوي.

موږ کوډ په ګیټلاب کې ذخیره کوو، او موږ د ګیتلاب څخه هیلم جوړ هم چلوو.

په لنډه توګه، دا داسې ښکاري

$ helm upgrade --install project .helm --set image=registrygitlab.local/k8s/bitrix -f .helm/values.yaml --wait --timeout 300 --debug --tiller-namespace=production

هیلم تاسو ته اجازه درکوي چې "بې سیمه" رول بیک ترسره کړئ که چیرې ناڅاپه د ګمارنې پرمهال یو څه غلط شي. دا ښه ده کله چې تاسو په ویره کې نه یاست "د ftp له لارې کوډ درست کړئ ځکه چې پروډ راټیټ شوی" مګر کوبرنیټس دا په اوتومات ډول کوي ، او پرته له ځنډ څخه.

ګمارل

هو، موږ د ګیټلاب او ګیټلاب CI مینه وال یو، موږ یې کاروو :)
کله چې په ګیټلاب کې د پروژې ذخیره کولو ته ژمن وي ، ګیټلاب یو پایپ لاین پیلوي چې د چاپیریال نوې نسخه ځای په ځای کوي.

مرحله:

  • جوړول (د نوي ډاکر عکس جوړول)
  • ازموینه (ازموینه)
  • پاکول (د ازموینې چاپیریال لرې کول)
  • فشار (موږ دا د ډاکر راجسټری ته لیږو)
  • ځای په ځای کړئ (موږ غوښتنلیک د هیلم له لارې کبرنیټس ته ځای په ځای کوو).

په چیلیابینسک کې سویلي برج او په کوبرنیټس کې بټریکس

هوری، دا چمتو دی، راځئ چې دا پلي کړو!
ښه، یا پوښتنه وکړئ که چیرې شتون ولري.

نو موږ څه وکړل

له تخنیکي پلوه:

  • dockerized Bitrix؛
  • Bitrix په کانتینرونو کې "کټ کړئ" چې هر یو یې لږترلږه دندې ترسره کوي؛
  • د کانټینرونو بې ثباته حالت ترلاسه کړی؛
  • په Kubernetes کې د Bitrix تازه کولو سره ستونزه حل کړه؛
  • د Bitrix ټولې دندې کار ته دوام ورکوي (تقریبا ټول)؛
  • موږ Kubernetes ته په ګمارلو او د نسخو تر مینځ رول بیک باندې کار وکړ.

د سوداګرۍ له نظره:

  • د خطا زغم؛
  • د کوبرنیټس وسیلې (د ګیټلاب CI سره اسانه ادغام ، بې سیمه ګمارنه ، او نور)؛
  • پټ پټنومونه (یوازې د هغو کسانو لپاره لیدل کیږي چې په مستقیم ډول پاسورډونو ته لاسرسی لري)؛
  • دا مناسبه ده چې په یو واحد زیربنا کې اضافي چاپیریالونه (د پراختیا، ازموینې، او نور) رامینځته کړئ.

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

Add a comment