Ansible + auto git pull f'grupp ta 'magni virtwali fis-sħab

Ansible + auto git pull f'grupp ta 'magni virtwali fis-sħab

Il-ġurnata t-tajba

Għandna diversi clusters ta 'sħab b'numru kbir ta' magni virtwali f'kull wieħed. Aħna nospitaw dan in-negozju kollu f'Hetzner. F'kull cluster għandna magna ewlenija waħda, tittieħed snapshot minnha u titqassam awtomatikament lill-magni virtwali kollha fi ħdan il-cluster.

Din l-iskema ma tippermettix li nużaw gitlab-runners b'mod normali, peress li jinqalgħu ħafna problemi meta jidhru ħafna runners reġistrati identiċi, li wassalna biex insibu soluzzjoni u niktbu dan l-artikolu/manwal.

Din x'aktarx mhix l-aħjar prattika, iżda din is-soluzzjoni dehret konvenjenti u sempliċi kemm jista 'jkun.

Għat-tutorja, jekk jogħġbok ara cat.

Pakketti meħtieġa fuq il-magna prinċipali:

  • python
  • Mur
  • fajl b'ċwievet ssh

Il-prinċipju ġenerali tal-implimentazzjoni tal-ġibda awtomatika tal-imsaren fuq il-magni virtwali kollha huwa li għandek bżonn magna li fuqha tkun installata Ansible. Minn din il-magna, ansible se jibgħat git pull kmandi u jerġa 'jibda s-servizz li ġie aġġornat. Għal dawn l-iskopijiet, ħloqna magna virtwali separata barra l-clusters u installajna fuqha:

  • python
  • ansibbli
  • gitlab-runner

Minn kwistjonijiet organizzattivi - għandek bżonn tirreġistra gitlab-runner, tagħmel ssh-keygen, ittella' ċ-ċavetta ssh pubblika ta' din il-magna biex .ssh/authorized_keys fuq il-magna kaptan, miftuħa port 22 għal ansible fuq il-magna kaptan.

Issa ejja kkonfigurat ansible

Peress li l-għan tagħna huwa li nawtomatizzaw dak kollu li hu possibbli. Fil-fajl /etc/ansible/ansible.cfg aħna se uncomment-linja host_key_checking = Falsesabiex ansible ma jitlobx konferma ta 'magni ġodda.

Sussegwentement, għandek bżonn tiġġenera awtomatikament fajl ta 'inventarju għal ansible, minn fejn se tieħu l-ip tal-magni li fuqhom għandek bżonn tagħmel git pull.

Aħna niġġeneraw dan il-fajl billi tuża l-API ta 'Hetzner, tista' tieħu l-lista ta 'hosts mid-database tiegħek AWS, Asure (għandek API x'imkien biex turi l-magni li qed jaħdmu, hux?).

L-istruttura tal-fajl tal-inventarju hija importanti ħafna għal Ansible; għandha tidher bħal din:

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

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

Biex niġġenera fajl bħal dan, aħna nagħmlu skript sempliċi (ejja nsejħulha 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

Wasal iż-żmien li tivverifika li Ansible jaħdem u li jirċievi l-indirizzi IP:

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

L-output għandu jkun fih l-ismijiet tal-host tal-magni li fuqhom ġie esegwit il-kmand.
Ftit kelmiet dwar is-sintassi:

  • /etc/ansible/./vm_list - jiġġenera lista ta' magni
  • -i - mogħdija assoluta għall-fajl tal-inventarju
  • -m - għid ansible biex tuża l-modulu tal-qoxra
  • -a huwa l-argument. Kull kmand jista' jiddaħħal hawn
  • grupp — l-isem tal-cluster tiegħek. Jekk għandek bżonn tagħmel dan fuq il-clusters kollha, ibdel il-grupp għal kulħadd

Ejja mmorru aktar - ejja nippruvaw nagħmlu git pull fuq il-magni virtwali tagħna:

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

Jekk fl-output naraw diġà aġġornat jew ħatt mir-repożitorju, allura kollox qed jaħdem.

Issa dan huwa dak kollu maħsub għalih

Ejja ngħallmu l-iskrittura tagħna biex taħdem awtomatikament meta tikkommetti ruħha għall-fergħa prinċipali f'gitlab

L-ewwel, ejja nagħmlu l-iskript tagħna aktar sabiħ u poġġih f'fajl eżekutibbli (ejja nsejħulha exec_pull) -

#!/bin/bash

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

Ejja mmorru fil-gitlab tagħna u noħolqu fajl fil-proġett .gitlab-ci.yml
Aħna npoġġu dan li ġej ġewwa:

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 

Kollox lest. Issa -

  • tagħmel impenn
  • Jien kuntent li kollox qed jaħdem

Meta tittrasferixxi .yml għal proġetti oħra, għandek bżonn biss li tibdel l-isem tas-servizz biex terġa 'tibda u l-isem tal-cluster li fuqu se jiġu esegwiti l-kmandi ansible.

Sors: www.habr.com

Żid kumment