جوابي + آٽو گٽ پل ڪلسٽر ۾ ورچوئل مشينن جي ڪلستر ۾

جوابي + آٽو گٽ پل ڪلسٽر ۾ ورچوئل مشينن جي ڪلستر ۾

توهان جو ڏينهن سٺو گذري

اسان وٽ ڪيترائي بادل ڪلستر آهن جن ۾ هر هڪ ۾ وڏي تعداد ۾ ورچوئل مشينون آهن. اسان هن سڄي ڪاروبار کي هٽزنر تي ميزباني ڪندا آهيون. هر ڪلستر ۾ اسان وٽ هڪ ماسٽر مشين آهي، ان مان هڪ سنيپ شاٽ ورتو ويو آهي ۽ خودڪار طريقي سان ڪلستر جي اندر سڀني ورچوئل مشينن ۾ ورهايو ويندو آهي.

هي اسڪيم اسان کي اجازت نه ٿو ڏئي ته گِٽلاب-رنرز کي عام طور تي استعمال ڪرڻ جي، ڇاڪاڻ ته ڪيترائي مسئلا پيدا ٿين ٿا جڏهن ڪيترائي هڪجهڙا رجسٽرڊ رنرز ظاهر ٿين ٿا، جنهن اسان کي ڪم ڪار ڳولڻ ۽ هي آرٽيڪل/دستي لکڻ لاءِ چيو.

اهو شايد بهترين عمل ناهي، پر اهو حل ممڪن طور تي آسان ۽ سادو لڳي ٿو.

سبق لاء، مهرباني ڪري ڏسو cat.

ماسٽر مشين تي گهربل پيڪيجز:

  • سٿان
  • اٿي
  • ssh ڪنجين سان فائل

سڀني ورچوئل مشينن تي خودڪار گٽ پل کي لاڳو ڪرڻ جو عام اصول اهو آهي ته توهان کي هڪ مشين جي ضرورت آهي جنهن تي جوابي نصب ڪيو ويندو. هن مشين مان، جواب ڏيڻ وارو گٽ پل ڪمانڊ موڪليندو ۽ سروس کي ٻيهر شروع ڪندو جيڪو اپڊيٽ ڪيو ويو آهي. انهن مقصدن لاء، اسان ڪلستر کان ٻاهر هڪ الڳ مجازي مشين ٺاهي ۽ ان تي نصب ڪيو:

  • سٿان
  • ناھي
  • gitlab ڊوڙندڙ

تنظيمي مسئلن کان - توهان کي رجسٽر ڪرڻ جي ضرورت آهي gitlab-runner، ٺاهيو ssh-keygen، اپلوڊ ڪريو عوامي ssh جي هن مشين کي .ssh/authorized_keys ماسٽر مشين تي، ماسٽر مشين تي جواب ڏيڻ لاء پورٽ 22 کوليو.

هاڻي اچو ته جوابي ترتيب ڏيو

جيئن ته اسان جو مقصد هر شيء کي خودڪار ڪرڻ آهي جيڪو ممڪن آهي. فائل ۾ /etc/ansible/ansible.cfg اسان لائن کي غير تبصرو ڪنداسين host_key_checking = Falseته جيئن جوابدار نئين مشينن جي تصديق لاءِ نه پڇي.

اڳيون، توهان کي خود بخود جواب ڏيڻ جي لاء هڪ انوینٽري فائل پيدا ڪرڻ جي ضرورت آهي، جتان اهو مشين جي ip وٺي ويندي جنهن تي توهان کي گٽ پل ڪرڻ جي ضرورت آهي.

اسان ھي فائل ٺاھيو آھي Hetzner's API استعمال ڪندي، توھان وٺي سگھوٿا ھوسٽن جي لسٽ پنھنجي AWS، Asure، ڊيٽابيس مان (توھان وٽ API آھي ڪٿي توھان جي ھلندڙ مشينن کي ڊسپلي ڪرڻ لاءِ، صحيح؟).

انوینٽري فائل جي جوڙجڪ جواب ڏيڻ لاء تمام ضروري آهي؛ اهو هن طرح ڏسڻ گهرجي:

[группа]
ip-адрес
ip-адрес

[группа2]
ip-адрес
ip-адрес

اهڙي فائل ٺاهڻ لاءِ، اسان هڪ سادي اسڪرپٽ ٺاهينداسين (اچو ته ان کي سڏين vm_list):

#!/bin/bash
echo [group] > /etc/ansible/cloud_ip &&
"ваш CLI запрос на получение IP запущенных машин в кластере"  >> /etc/ansible/cloud_ip
echo " " >> /etc/ansible/cloud_ip
echo [group2] > /etc/ansible/cloud_ip &&
"ваш CLI запрос на получение IP запущенных машин в другом кластере"  >> /etc/ansible/cloud_ip

اهو چيڪ ڪرڻ جو وقت آهي ته جوابي ڪم ڪري ٿو ۽ IP پتي حاصل ڪرڻ سان دوستانه آهي:

/etc/ansible/./vm_list && ansible -i /etc/ansible/cloud_ip -m shell -a 'hostname' group

آئوٽ ۾ مشينن جا ميزبان نالا شامل ٿيڻ گهرجن جن تي حڪم جاري ڪيو ويو.
نحو بابت ڪجھ لفظ:

  • /etc/ansible/./vm_list - مشينن جي ھڪڙي فهرست ٺاھيو
  • -i - انوینٽري فائل ڏانهن مطلق رستو
  • -m - شيل ماڊل استعمال ڪرڻ جي قابل جواب ڏيو
  • - هڪ دليل آهي. ڪو به حڪم هتي داخل ڪري سگهجي ٿو
  • گروپ - توھان جي ڪلستر جو نالو. جيڪڏهن توهان سڀني ڪلستر تي اهو ڪرڻ جي ضرورت آهي، سڀني کي گروپ کي تبديل ڪريو

اچو ته اڳتي وڌون - اچو ته ڪوشش ڪريون گيٽ پل اسان جي ورچوئل مشينن تي:

/etc/ansible/./vm_list && ansible -i /etc/ansible/cloud_ip -m shell -a 'cd /path/to/project && git pull' group 

جيڪڏھن ٻاھرين ۾ اسان ڏسون ٿا اڳ ۾ ئي تازه ڪاري يا مخزن مان لوڊ ڪرڻ، پوء سڀ ڪجھ ڪم ڪري رھيو آھي.

هاڻي اهو سڀ ڪجهه ان لاءِ هو

اچو ته اسان جي اسڪرپٽ کي پاڻمرادو هلائڻ سيکاريون جڏهن گٽلاب ۾ ماسٽر برانچ ڏانهن ڪم ڪيو وڃي

پهرين، اچو ته اسان جي اسڪرپٽ کي وڌيڪ خوبصورت بڻايون ۽ ان کي هڪ قابل عمل فائل ۾ رکون (اچو ته ان کي exec_pull سڏين) -

#!/bin/bash

/etc/ansible/./get_vms && ansible -i /etc/ansible/cloud_ip -m shell -a "$@"

اچو ته اسان جي گٽليب ڏانهن وڃو ۽ پروجيڪٽ ۾ هڪ فائل ٺاهيو .gitlab-ci.yml
اسان هيٺ ڏنل اندر رکون ٿا:

variables:
  GIT_STRATEGY: none
  VM_GROUP: group

stages:
  - pull
  - restart

run_exec_pull:
  stage: pull
  script:
  
   - /etc/ansible/exec_pull 'cd /path/to/project/'$CI_PROJECT_NAME' && git pull' $VM_GROUP
  
  only:
  - master

run_service_restart:
  stage: restart
  script:
 
   - /etc/ansible/exec_pull 'your_app_stop && your_app_start' $VM_GROUP
   
  only:
  - master 

سڀ تيار آهي. هاڻي -

  • عزم ڪرڻ
  • مان خوش آهيان ته هر شي ڪم ڪري رهيو آهي

جڏهن .yml کي ٻين منصوبن ڏانهن منتقل ڪيو وڃي، توهان کي صرف ٻيهر شروع ڪرڻ جي خدمت جو نالو ۽ ڪلستر جو نالو تبديل ڪرڻو پوندو جنهن تي جوابي حڪمن تي عمل ڪيو ويندو.

جو ذريعو: www.habr.com

تبصرو شامل ڪريو