مان توهان کي ڊيڄاريان ٿو، اسان مٿي ڏنل لنڪ ۾ حل جي معيار جي جانچ نه ڪئي آهي :)
رستي ۾، جڏهن اسان جو حل تيار ڪيو، مون اليگزينڊر سربل سان ڳالهايو، پوء هن جي رپورٽ اڃا تائين ظاهر نه ڪئي هئي، تنهنڪري منهنجي سلائڊ ۾ هڪ شيء آهي "Bitrix Kubernetes استعمال نٿو ڪري."
جيڪڏهن اسان هڪ مائڪرو سروسز آرڪيٽيڪچر ٺاهڻ چاهيون ٿا (۽ ڪبرنيٽس ۾ اسان عام طور تي ڪندا آهيون)، اسان کي پنهنجي ڪبرنيٽس ايپليڪيشن کي ڪنٽينرز ۾ الڳ ڪرڻ جي ضرورت آهي ۽ هر ڪنٽينر کي هڪ ننڍڙو فنڪشن انجام ڏيڻ گهرجي (۽ اهو سٺو ڪريو). صرف هڪ ڇو؟ مختصر ۾، سادو وڌيڪ قابل اعتماد.
وڌيڪ مخصوص ٿيڻ لاء، هي مضمون ۽ وڊيو ڏسو، مهرباني ڪري: https://habr.com/ru/company/southbridge/blog/426637/
Dockerhub ۾ Docker تصويرون بنيادي طور تي سڀني ۾ هڪ اصول تي ٺهيل آهن، تنهنڪري اسان کي اڃا تائين پنهنجي سائيڪل ٺاهڻو پوندو ۽ اڃا به شروع کان تصويرون ٺاهي.
اسان سائيٽ تي هڪ نئون سيڪشن ٺاهيو - ڪوڊ اپڊيٽ ڪيو ويو (نئين سيڪشن جي نالي سان هڪ ڊاريڪٽري شامل ڪئي وئي).
جيڪڏهن توهان انتظامي پينل مان جزو جي ملڪيت کي تبديل ڪيو، ڪوڊ تبديل ڪيو.
Kubernetes "ڊفالٽ طور" هن سان ڪم نٿو ڪري سگهي؛ ڪنٽينر بي رياست هجڻ گهرجن.
سبب: ڪلستر ۾ هر ڪنٽينر (پوڊ) صرف ٽرئفڪ جو هڪ حصو عمل ڪري ٿو. جيڪڏهن توهان ڪوڊ کي صرف هڪ ڪنٽينر (پڊ) ۾ تبديل ڪريو ٿا، پوء ڪوڊ مختلف پوڊ ۾ مختلف هوندو، سائيٽ مختلف طريقي سان ڪم ڪندي، ۽ سائيٽ جا مختلف ورزن مختلف استعمال ڪندڙن کي ڏيکاريا ويندا. تون ائين رهي نه سگهندين.
ٽيون - توهان کي مقرري سان مسئلو حل ڪرڻ جي ضرورت آهي
جيڪڏهن اسان وٽ هڪ واحد ۽ هڪ "کلاسڪ" سرور آهي، هر شي بلڪل سادو آهي: اسان هڪ نئون ڪوڊ بيس ترتيب ڏيو ٿا، ڊيٽابيس کي منتقل ڪريون ٿا، ٽرئفڪ کي ڪوڊ جي نئين ورزن ڏانهن تبديل ڪريو. سوئچنگ فوري طور تي ٿيندي آهي.
جيڪڏهن اسان وٽ ڪبرنيٽس ۾ هڪ سائيٽ آهي، مائڪرو سروسز ۾ ڪٽي، ڪوڊ سان گڏ ڪيترائي ڪنٽينر آهن - اوه. توهان کي ڪوڊ جي نئين ورزن سان ڪنٽينرز گڏ ڪرڻ جي ضرورت آهي، انهن کي پراڻن جي بدران رول آئوٽ ڪريو، ڊيٽابيس کي صحيح طور تي لڏپلاڻ ڪريو، ۽ مثالي طور تي اهو ڪم ڪرڻ وارن جي نظر کان سواء. خوشقسمتيءَ سان، ڪبرنيٽس اسان جي مدد ڪري ٿو هن سان، مختلف قسم جي ڊيپلائيشنز جي مڪمل گروپ جي حمايت ڪندي.
چوٿون - توهان کي اسٽوريج اسٽوريج جي مسئلي کي حل ڪرڻ جي ضرورت آهي
جيڪڏهن توهان جي سائيٽ "صرف" 10 گيگا بائيٽ آهي ۽ توهان ان کي مڪمل طور تي ڪنٽينرز ۾ ترتيب ڏيو ٿا، توهان ختم ٿي ويندا 10 گيگا بائيٽ ڪنٽينرز جيڪي هميشه لاءِ ترتيب ڏيڻ ۾ وٺن ٿا.
توهان کي سائيٽ جي "سڀ کان ڳري" حصن کي ذخيرو ڪرڻ جي ضرورت آهي ڪنٽينرز کان ٻاهر، ۽ سوال اهو پيدا ٿئي ٿو ته اهو ڪيئن ڪجي.
اسان ڪبرنيٽس ۾ ڊيٽابيس کي ذخيرو نٿا ڪريون (مون اڃا تائين ترقي جي ماحول لاءِ ڪبرنيٽس ۾ ڊيٽابيس سان حل لاڳو ڪيو، پر پيداوار لاءِ نه).
اهو اڃا تائين سائيٽ جي منتظمين لاءِ قابل ذڪر هوندو ته سائيٽ ڪبرنيٽس تي هلندي آهي. "سسٽم چيڪ" فنڪشن صحيح طريقي سان ڪم نٿو ڪري؛ ايڊمن پينل مان سائيٽ ڪوڊ ايڊٽ ڪرڻ لاءِ، توھان کي پھريون ڪلڪ ڪرڻ گھرجي "مان ڪوڊ ايڊٽ ڪرڻ چاھيان ٿو" بٽڻ.
مسئلن جي نشاندهي ڪئي وئي آهي، مائڪرو سروسز کي لاڳو ڪرڻ جي ضرورت جو اندازو لڳايو ويو آهي، مقصد واضح آهي - ڪبرنيٽس ۾ Bitrix تي ايپليڪيشن هلائڻ لاء ڪم ڪندڙ سسٽم حاصل ڪرڻ، Bitrix جي صلاحيتن ۽ ڪبرنيٽس جي فائدن کي محفوظ ڪرڻ. اچو ته عمل درآمد شروع ڪريون.
ان ۾ شامل آهي nginx، apache/php-fpm (تعمير دوران چونڊجي سگھجي ٿو)، ميل موڪلڻ لاءِ msmtp، ۽ ڪرون.
تصوير کي گڏ ڪرڻ وقت، سائيٽ جو سڄو ڪوڊ بيس /ايپ ڊاريڪٽري ۾ نقل ڪيو ويندو آهي (انهن حصن جي استثنا سان جيڪي اسان هڪ الڳ حصيداري اسٽوريج ڏانهن منتقل ڪنداسين).
Microservices، خدمتون
ڪم ڪندڙ ٻج:
nginx سان گڏ ڪنٽينر + ڪنٽينر apache/php-fpm + msmtp
اهو ڪم نه ڪيو ويو ته msmtp کي هڪ الڳ مائڪرو سروس ۾ منتقل ڪيو وڃي، Bitrix ناراض ٿيڻ شروع ڪيو آهي ته اهو سڌو ميل نه موڪلي سگهي ٿو
هر ڪنٽينر هڪ مڪمل ڪوڊ بيس آهي.
ڪنٽينرز ۾ ڪوڊ تبديل ڪرڻ تي پابندي.
هيٺ ڪرون:
apache، php، cron سان گڏ ڪنٽينر
مڪمل ڪوڊ بنيادي شامل
ڪنٽينر ۾ ڪوڊ تبديل ڪرڻ تي پابندي
هيٺيون واڌارو:
nginx ڪنٽينر + apache/php-fpm ڪنٽينر + msmtp
ڪنٽينرز ۾ ڪوڊ تبديل ڪرڻ تي ڪا به پابندي ناهي
سيشن اسٽوريج
Bitrix ڪيش اسٽوريج
ٻي اهم شيءِ: اسان هر شيءِ سان ڳنڍڻ لاءِ پاسورڊ ذخيرو ڪندا آهيون، ڊيٽابيس کان ميل تائين، ڪبرنيٽس رازن ۾. اسان کي هڪ بونس ملي ٿو: پاسورڊ صرف انهن لاءِ نظر اچن ٿا جن کي اسان رازن تائين رسائي ڏيون ٿا، ۽ هر ڪنهن کي نه جن وٽ پروجيڪٽ جي ڪوڊ بيس تائين رسائي آهي.
statistics لاء اسٽوريج
توھان ڪجھ به استعمال ڪري سگھو ٿا: ceph، nfs (پر اسان پيداوار لاءِ nfs جي سفارش نٿا ڪريون)، ڪلائوڊ فراهم ڪندڙن کان نيٽ ورڪ اسٽوريج وغيره.
اسٽوريج کي ڪنٽينرز ۾ /upload/ سائيٽ جي ڊاريڪٽري ۽ جامد مواد سان ٻين ڊائريڪٽرن سان ڳنڍڻ جي ضرورت پوندي.
ڊيٽابيس
سادگي لاءِ، اسان سفارش ڪريون ٿا ڊيٽابيس کي ڪبرنيٽس کان ٻاهر منتقل ڪريو. ڪبرنيٽس ۾ بنياد هڪ الڳ پيچيده ڪم آهي؛ اهو اسڪيم کي وڌيڪ پيچيده انداز جي ترتيب ٺاهيندو.
سيشن اسٽوريج
اسان memcached استعمال ڪندا آهيون :)
اهو سيشن اسٽوريج کي چڱي طرح سنڀاليندو آهي، ڪلستر ٿيل آهي، ۽ سپورٽ ڪئي وئي آهي "مقتي طور تي" جيئن php ۾ session.save_path. اهڙي نظام کي ڪيترائي ڀيرا آزمايو ويو آهي ڪلاسيڪل monolithic فن تعمير ۾، جڏهن اسان وڏي تعداد ۾ ويب سرورز سان ڪلسٽر ٺاهيا. تعیناتي لاءِ اسان هيلم استعمال ڪندا آهيون.
$ helm install stable/memcached --name session
php.ini - هتي تصوير ۾ سيٽنگون سيٽنگون شامل آهن memcached ۾
اسان ماحوليات جي تبديلين کي استعمال ڪيو هوسٽن بابت ڊيٽا کي پاس ڪرڻ لاءِ memcached سان https://kubernetes.io/docs/tasks/inject-data-application/define-environment-variable-container/.
اهو توهان کي ساڳيو ڪوڊ استعمال ڪرڻ جي اجازت ڏئي ٿو ديو، اسٽيج، ٽيسٽ، پروڊ ماحول ۾ (انهن ۾ ياد ڪيل ميزبان جا نالا مختلف هوندا، تنهنڪري اسان کي هر ماحول ۾ سيشن لاء هڪ منفرد ميزبان نالو پاس ڪرڻ جي ضرورت آهي).
Bitrix ڪيش اسٽوريج
اسان کي غلطي برداشت ڪرڻ واري اسٽوريج جي ضرورت آهي ته سڀئي پوڊس لکي ۽ پڙهي سگهن ٿا.
اسان پڻ استعمال ڪندا آهيون memcached.
هي حل پاڻ Bitrix طرفان سفارش ڪئي وئي آهي.
cron ٽاسڪ سڀني ٽيم جي ميمبرن طرفان شامل ڪري سگھجن ٿا پروڊڪشن برانچ جي حق سان، نه صرف منتظمين
Southbridge K8SDDeploy module and code editing from Admin Panel
اسان هيٺ اپ گريڊ بابت ڳالهائي رهيا هئاسين؟
اتي ٽرئفڪ کي ڪيئن سڌو ڪجي؟
ها، اسان هن لاءِ PHP ۾ هڪ ماڊل لکيو آهي :) هي Bitrix لاءِ هڪ ننڍڙو کلاسک ماڊل آهي. اهو اڃا تائين عام طور تي دستياب ناهي، پر اسان ان کي کولڻ جو منصوبو ٺاهيو.
ماڊل نصب ٿيل آهي هڪ باقاعده ماڊل وانگر Bitrix ۾:
۽ اهو هن وانگر ڏسڻ ۾ اچي ٿو:
اهو توهان کي هڪ ڪوڪي سيٽ ڪرڻ جي اجازت ڏئي ٿو جيڪا سائيٽ جي منتظم جي سڃاڻپ ڪري ٿي ۽ Kubernetes کي اجازت ڏئي ٿي ته ٽرئفڪ کي اپڊيٽ پوڊ ڏانهن موڪلي.
جڏهن تبديليون مڪمل ٿي وينديون آهن، توهان کي ڪلڪ ڪرڻ جي ضرورت آهي گٽ پش، ڪوڊ تبديلين کي گٽ ڏانهن موڪليو ويندو، پوء سسٽم ڪوڊ جي نئين ورزن سان هڪ تصوير ٺاهيندو ۽ ان کي ڪلستر ۾ "رول آئوٽ" ڪندو، پراڻي پوڊ کي تبديل ڪندي. .
ها، اهو هڪ ڪچرو جو ٿورو آهي، پر ساڳئي وقت اسان microservice فن تعمير کي برقرار رکون ٿا ۽ بٽريڪس استعمال ڪندڙن کان انهن جي پسنديده موقعو نه کڻندا آهن ايڊمن پينل کان ڪوڊ کي درست ڪرڻ لاء. آخر ۾، هي هڪ اختيار آهي؛ توهان مختلف طريقي سان ڪوڊ کي تبديل ڪرڻ جو مسئلو حل ڪري سگهو ٿا.
هيلم چارٽ
Kubernetes تي ايپليڪيشنون ٺاهڻ لاءِ، اسان عام طور استعمال ڪندا آهيون Helm پيڪيج مئنيجر.
Kubernetes ۾ اسان جي Bitrix حل لاءِ، سرجي بونڊاريف، اسان جي معروف سسٽم ايڊمنسٽريٽر، هڪ خاص هيلم چارٽ لکيو.
اهو ڪم ڪندڙ، يوگريڊ، ڪرون پوڊز ٺاهي ٿو، داخل ڪري ٿو، خدمتن کي ترتيب ڏئي ٿو، ۽ ڪيبرنيٽس رازن کان پوڊ تائين متغير کي منتقل ڪري ٿو.
هيلم پڻ توهان کي اجازت ڏئي ٿو ته هڪ "سيميل" رول بيڪ ڪرڻ جي صورت ۾ اوچتو ڪجهه غلط ٿي وڃي ٿو ڊيپلائيشن دوران. اهو سٺو آهي جڏهن توهان خوف ۾ نه آهيو "ايف ٽي پي ذريعي ڪوڊ کي درست ڪريو ڇاڪاڻ ته پروڊ گر ٿي ويو،" پر ڪبرنيٽس اهو خودڪار طريقي سان ڪري ٿو، ۽ بغير وقت جي.
مقرر ڪرڻ
ها، اسان پرستار آهيون Gitlab ۽ Gitlab CI، اسان ان کي استعمال ڪندا آهيون :)
جڏهن Gitlab ۾ منصوبي جي مخزن ڏانهن ڪم ڪندي، Gitlab هڪ پائپ لائن شروع ڪري ٿو جيڪا ماحول جي نئين نسخي کي ترتيب ڏئي ٿي.
مرحلا:
تعمير (هڪ نئين Docker تصوير جي تعمير)
ٽيسٽ (امتحان)
صاف ڪريو (ٽيسٽ ماحول کي ختم ڪرڻ)
push (اسان ان کي ڊاڪر رجسٽري ڏانهن موڪليندا آهيون)
deploy (اسان هيلم ذريعي ڪبرنيٽس تائين ايپليڪيشن کي ترتيب ڏيون ٿا).
هيري، اهو تيار آهي، اچو ته ان تي عمل ڪريون!
خير، يا سوال پڇو جيڪڏهن ڪو به آهي.
پوءِ اسان ڇا ڪيو
ٽيڪنيڪل نقطي نظر کان:
dockerized Bitrix؛
"ڪٽ" Bitrix ڪنٽينرز ۾، جن مان هر هڪ گهٽ ۾ گهٽ ڪم انجام ڏئي ٿو.
ڪنٽينرز جي بي رياستي حالت حاصل ڪئي؛
Kubernetes ۾ Bitrix کي اپڊيٽ ڪرڻ سان مسئلو حل ڪيو؛
سڀ Bitrix افعال ڪم ڪرڻ جاري رکي (تقريبا سڀ)؛
اسان ڪبرنيٽس کي ترتيب ڏيڻ ۽ ورزن جي وچ ۾ رول بيڪ تي ڪم ڪيو.
ڪاروباري نقطي نظر کان:
غلطي رواداري؛
ڪبرنيٽس ٽولز (گٽلاب سي آءِ سان آسان انضمام، بيحد ترتيب، وغيره)؛
ڳجهو پاسورڊ (صرف انهن لاءِ نظر اچن ٿا جن کي سڌو سنئون پاسورڊ تائين رسائي ڏني وئي آهي)؛