වලාකුළේ ඇති අතථ්‍ය යන්ත්‍ර පොකුරක් තුළ ඇන්සිබල් + ස්වයංක්‍රීය ගිට් අදින්න

වලාකුළේ ඇති අතථ්‍ය යන්ත්‍ර පොකුරක් තුළ ඇන්සිබල් + ස්වයංක්‍රීය ගිට් අදින්න

සුබ දිනක්

අප සතුව වලාකුළු පොකුරු කිහිපයක් ඇත, ඒ සෑම එකක් තුළම අථත්‍ය යන්ත්‍ර විශාල සංඛ්‍යාවක් ඇත. අපි මෙම සම්පූර්ණ ව්‍යාපාරය Hetzner හි සත්කාරකත්වය දරයි. සෑම පොකුරකම අපට එක් ප්‍රධාන යන්ත්‍රයක් ඇත, එයින් සැණ රුවක් ගෙන ස්වයංක්‍රීයව පොකුරු තුළ ඇති සියලුම අථත්‍ය යන්ත්‍ර වෙත බෙදා හරිනු ලැබේ.

මෙම යෝජනා ක්‍රමය අපට සාමාන්‍යයෙන් gitlab-runners භාවිතා කිරීමට ඉඩ නොදේ, මන්ද බොහෝ සමාන ලියාපදිංචි ධාවකයන් පෙනී සිටින විට ගැටලු රාශියක් පැනනගින අතර, එය විසඳුමක් සොයා ගැනීමට සහ මෙම ලිපිය/අත්පොත ලිවීමට අපව පොළඹවන ලදී.

මෙය බොහෝ විට හොඳම භාවිතය නොවේ, නමුත් මෙම විසඳුම හැකි තරම් පහසු සහ සරල විය.

නිබන්ධනය සඳහා, කරුණාකර cat බලන්න.

ප්‍රධාන යන්ත්‍රයේ අවශ්‍ය පැකේජ:

  • පිඹුරා
  • යන්න
  • ssh යතුරු සමඟ ගොනුව

සියලුම අතථ්‍ය යන්ත්‍ර මත ස්වයංක්‍රීය ගුට් ඇදීමේ ක්‍රියාත්මක කිරීමේ සාමාන්‍ය මූලධර්මය නම් ඔබට ඇන්සිබල් ස්ථාපනය කරන යන්ත්‍රයක් අවශ්‍ය වීමයි. මෙම යන්ත්‍රයෙන්, ansible git pull විධාන යවා යාවත්කාලීන කර ඇති සේවාව නැවත ආරම්භ කරයි. මෙම අරමුණු සඳහා, අපි පොකුරු වලින් පිටත වෙනම අථත්‍ය යන්ත්‍රයක් සාදා එය මත ස්ථාපනය කළෙමු:

  • පිඹුරා
  • පිළිතුරු
  • gitlab-runner

ආයතනික ගැටළු වලින් - ඔබට gitlab-runner ලියාපදිංචි කිරීම, ssh-keygen සෑදීම, මෙම යන්ත්‍රයේ පොදු ssh යතුර උඩුගත කිරීම අවශ්‍ය වේ. .ssh/authorized_keys ප්‍රධාන යන්ත්‍රයේ, ප්‍රධාන යන්ත්‍රයේ ඇසිබල් සඳහා වරාය 22 විවෘත කරන්න.

දැන් අපි ansible එක configure කරමු

අපගේ ඉලක්කය වන්නේ හැකි සෑම දෙයක්ම ස්වයංක්‍රීය කිරීමයි. ගොනුවේ /etc/ansible/ansible.cfg අපි රේඛාව ඉවත් කරන්නෙමු host_key_checking = Falseඒ නිසා ඇන්සිබල් නව යන්ත්‍ර තහවුරු කිරීම ඉල්ලන්නේ නැත.

ඊළඟට, ඔබ ස්වයංක්‍රීයව ansible සඳහා ඉන්වෙන්ටරි ගොනුවක් උත්පාදනය කළ යුතුය, එය ඔබට git pull කිරීමට අවශ්‍ය යන්ත්‍රවල 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 - ෂෙල් මොඩියුලය භාවිතා කරන ලෙස ඇසිබල්ට කියන්න
  • -a යනු තර්කයයි. ඕනෑම විධානයක් මෙහි ඇතුළත් කළ හැකිය
  • කණ්ඩායම - ඔබේ පොකුරේ නම. ඔබට මෙය සියලුම පොකුරු මත කිරීමට අවශ්‍ය නම්, කණ්ඩායම සියල්ලට වෙනස් කරන්න

අපි තවත් ඉදිරියට යමු - අපි අපේ අතථ්‍ය යන්ත්‍ර මත git pull කිරීමට උත්සාහ කරමු:

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

නිමැවුමේ අපි දැනටමත් යාවත්කාලීනව හෝ ගබඩාවෙන් බෑම දකිනවා නම්, සියල්ල ක්‍රියාත්මක වේ.

දැන් මේ සියල්ල අදහස් කළේ මෙයයි

gitlab හි මාස්ටර් බ්‍රාන්ච් එකට කමිට් කරන විට අපේ ස්ක්‍රිප්ට් එක ඉබේම ක්‍රියාත්මක වීමට උගන්වමු

මුලින්ම අපි අපේ ස්ක්‍රිප්ට් එක තවත් ලස්සන කරලා ක්‍රියාත්මක කරන්න පුළුවන් ෆයිල් එකකට දාමු (අපි ඒකට exec_pull කියමු) -

#!/bin/bash

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

අපි අපේ gitlab එකට ගිහින් project එකේ file එකක් හදමු .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

අදහස් එක් කරන්න