کلاؤڈ میں ورچوئل مشینوں کے جھرمٹ میں جوابی + آٹو گٹ پل

کلاؤڈ میں ورچوئل مشینوں کے جھرمٹ میں جوابی + آٹو گٹ پل

اچھا دن

ہمارے پاس کئی کلاؤڈ کلسٹرز ہیں جن میں سے ہر ایک میں بڑی تعداد میں ورچوئل مشینیں ہیں۔ ہم اس پورے کاروبار کی میزبانی Hetzner میں کرتے ہیں۔ ہر کلسٹر میں ہمارے پاس ایک ماسٹر مشین ہوتی ہے، اس سے اسنیپ شاٹ لیا جاتا ہے اور خود بخود کلسٹر کے اندر موجود تمام ورچوئل مشینوں میں تقسیم ہو جاتا ہے۔

یہ اسکیم ہمیں gitlab-runners کو عام طور پر استعمال کرنے کی اجازت نہیں دیتی، کیونکہ بہت سے مسائل پیدا ہوتے ہیں جب بہت سے ایک جیسے رجسٹرڈ رنر ظاہر ہوتے ہیں، جس نے ہمیں ایک حل تلاش کرنے اور اس مضمون/دستی کو لکھنے پر آمادہ کیا۔

یہ شاید بہترین عمل نہیں ہے، لیکن یہ حل ممکن حد تک آسان اور آسان لگ رہا تھا۔

ٹیوٹوریل کے لیے، براہ کرم بلی دیکھیں۔

ماسٹر مشین پر مطلوبہ پیکیج:

  • پادری
  • گٹ
  • ssh چابیاں کے ساتھ فائل

تمام ورچوئل مشینوں پر خودکار گٹ پل کو لاگو کرنے کا عمومی اصول یہ ہے کہ آپ کو ایک مشین کی ضرورت ہے جس پر Ansible انسٹال ہوگا۔ اس مشین سے، جوابی گٹ پل کمانڈز بھیجے گا اور اپ ڈیٹ کی گئی سروس کو دوبارہ شروع کرے گا۔ ان مقاصد کے لیے، ہم نے کلسٹرز کے باہر ایک الگ ورچوئل مشین بنائی اور اس پر انسٹال کی:

  • پادری
  • جواب دہ
  • gitlab-رنر

تنظیمی مسائل سے - آپ کو gitlab-runner کو رجسٹر کرنے، ssh-keygen بنانے، اس مشین کی عوامی ssh کلید کو اپ لوڈ کرنے کی ضرورت ہے۔ .ssh/authorized_keys ماسٹر مشین پر، ماسٹر مشین پر جواب دینے کے لیے پورٹ 22 کو کھولیں۔

اب آئیے جوابی کنفیگر کرتے ہیں۔

چونکہ ہمارا مقصد ہر ممکن چیز کو خودکار بنانا ہے۔ فائل میں /etc/ansible/ansible.cfg ہم لائن کو غیر تبصرہ کریں گے۔ host_key_checking = Falseتاکہ ذمہ دار نئی مشینوں کی تصدیق کا مطالبہ نہ کرے۔

اس کے بعد، آپ کو جوابدہی کے لیے خود بخود ایک انوینٹری فائل بنانے کی ضرورت ہے، جہاں سے یہ ان مشینوں کا آئی پی لے گی جس پر آپ کو گٹ پل کرنے کی ضرورت ہے۔

ہم اس فائل کو Hetzner's API کا استعمال کرتے ہوئے تیار کرتے ہیں، آپ اپنے AWS، Asure، ڈیٹا بیس سے میزبانوں کی فہرست لے سکتے ہیں (آپ کے پاس اپنی چلانے والی مشینوں کو دکھانے کے لیے کہیں API موجود ہے، ٹھیک ہے؟)۔

انوینٹری فائل کی ساخت Ansible کے لیے بہت اہم ہے؛ اسے اس طرح نظر آنا چاہیے:

[группа]
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 - شیل ماڈیول کو استعمال کرنے کے لیے جوابدہ بتائیں
  • -ایک دلیل ہے۔ کوئی بھی کمانڈ یہاں درج کیا جا سکتا ہے۔
  • گروپ - آپ کے کلسٹر کا نام۔ اگر آپ کو تمام کلسٹرز پر ایسا کرنے کی ضرورت ہے تو، گروپ کو سبھی میں تبدیل کریں۔

آئیے مزید چلتے ہیں - آئیے اپنی ورچوئل مشینوں پر git pull کرنے کی کوشش کریں:

/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

نیا تبصرہ شامل کریں