እንደምን ዋልክ
በእያንዳንዳቸው ውስጥ ብዙ ቁጥር ያላቸው ምናባዊ ማሽኖች ያሉባቸው በርካታ የደመና ስብስቦች አሉን። ይህንን አጠቃላይ ንግድ በሄትዝነር እናስተናግዳለን። በእያንዳንዱ ክላስተር ውስጥ አንድ ዋና ማሽን አለን ፣ ቅጽበታዊ ገጽ እይታ ከእሱ ተወስዶ በራስ-ሰር በክላስተር ውስጥ ላሉ ሁሉም ምናባዊ ማሽኖች ይሰራጫል።
ይህ እቅድ በመደበኛነት gitlab-ሯጮችን እንድንጠቀም አይፈቅድልንም ፣ ምክንያቱም ብዙ ተመሳሳይ የተመዘገቡ ሯጮች በሚታዩበት ጊዜ ብዙ ችግሮች ስለሚከሰቱ መፍትሄ ለማግኘት እና ይህንን ጽሑፍ/መመሪያ ለመጻፍ ያነሳሳን።
ይህ ምናልባት ምርጥ ልምምድ አይደለም, ነገር ግን ይህ መፍትሄ በተቻለ መጠን ምቹ እና ቀላል ይመስላል.
ለትምህርቱ፣ እባክዎን ድመትን ይመልከቱ።
በዋናው ማሽን ላይ የሚያስፈልጉ ጥቅሎች፡-
- ጭረት
- ሂድ
- በ ssh ቁልፎች ፋይል ያድርጉ
በሁሉም ቨርቹዋል ማሽኖች ላይ አውቶማቲክ ጉት ፑልትን የመተግበር አጠቃላይ መርህ Ansible የሚጫንበት ማሽን ያስፈልግዎታል. ከዚህ ማሽን፣ ansible git pull ትዕዛዞችን ይልካል እና የዘመነውን አገልግሎት እንደገና ያስጀምራል። ለእነዚህ ዓላማዎች፣ ከስብስብ ውጭ የተለየ ምናባዊ ማሽን ፈጠርን እና በላዩ ላይ ጫንን።
- ጭረት
- ያረጀ
- gitlab-ሯጭ
ከድርጅታዊ ጉዳዮች - gitlab-runner መመዝገብ፣ ssh-keygenን መስራት፣ የዚህን ማሽን የህዝብ ssh ቁልፍ ለመስቀል ያስፈልግዎታል .ssh/authorized_keys
በማስተር ማሽኑ ላይ፣ ክፍት ወደብ 22 በማስተር ማሽኑ ላይ ለ ansible.
አሁን ሊቻል የሚችልን እናዋቅር
ግባችን የሚቻለውን ሁሉ በራስ ሰር ማድረግ ስለሆነ። በፋይል ውስጥ /etc/ansible/ansible.cfg
መስመሩን እንከፍላለን host_key_checking = False
ስለዚህ asible አዲስ ማሽኖች ማረጋገጫ አይጠይቅም.
በመቀጠል git pull ማድረግ ያለብዎትን የማሽኖቹን ip የሚወስድበትን የኢንቬንቴሪ ፋይል በራስ ሰር ማመንጨት ያስፈልግዎታል።
ይህን ፋይል የሄትዝነር ኤፒአይን በመጠቀም እናመነጫለን፣ የአስተናጋጆችን ዝርዝር ከእርስዎ AWS፣ Asure፣ የውሂብ ጎታ መውሰድ ይችላሉ (አሂድ ማሽኖችዎን ለማሳየት የሆነ ቦታ ኤፒአይ አለዎት፣ አይደል?)።
የክምችት ፋይሉ አወቃቀር ለአንሲቪል በጣም አስፈላጊ ነው፣ ይህን መምሰል አለበት፡-
[группа]
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
የአይ ፒ አድራሻዎችን ከመቀበል ጋር ተግባብቶ የሚሰራ እና ተስማሚ መሆኑን ለማረጋገጥ ጊዜው አሁን ነው።
/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
በውጤቱ ውስጥ ቀድሞውኑ የተዘመነ ወይም ከማጠራቀሚያው ስናወርድ ካየን ሁሉም ነገር እየሰራ ነው።
አሁን ይህ ሁሉ የታሰበበት ነው።
በgitlab ውስጥ ላለው ዋና ቅርንጫፍ ስንገባ ስክሪፕታችንን በራስ ሰር እንዲሰራ እናስተምረው
መጀመሪያ ስክሪፕታችንን የበለጠ ቆንጆ አድርገን ወደ executable ፋይል እናስቀምጠው (exec_pull እንበለው) -
#!/bin/bash
/etc/ansible/./get_vms && ansible -i /etc/ansible/cloud_ip -m shell -a "$@"
ወደ gitlab እንሂድ እና በፕሮጀክቱ ውስጥ ፋይል እንፍጠር .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 ወደ ሌሎች ፕሮጄክቶች ሲያስተላልፍ ፣ እንደገና ለመጀመር የአገልግሎቱን ስም እና የችሎታ ትዕዛዞች የሚፈጸሙበትን የክላስተር ስም መለወጥ ያስፈልግዎታል።
ምንጭ: hab.com