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 = False
sabiex 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