Diwrnod da
Mae gennym sawl clwstwr cwmwl gyda nifer fawr o beiriannau rhithwir ym mhob un. Rydym yn cynnal y busnes cyfan hwn yn Hetzner. Ym mhob clwstwr mae gennym un prif beiriant, cymerir ciplun ohono a'i ddosbarthu'n awtomatig i bob peiriant rhithwir yn y clwstwr.
Nid yw'r cynllun hwn yn caniatáu i ni ddefnyddio rhedwyr gitlab fel arfer, gan fod llawer o broblemau'n codi pan fydd llawer o redwyr cofrestredig union yr un fath yn ymddangos, a ysgogodd ni i ddod o hyd i ateb ac ysgrifennu'r erthygl / llawlyfr hwn.
Mae'n debyg nad yw hyn yn arfer gorau, ond roedd yr ateb hwn yn ymddangos mor gyfleus a syml â phosibl.
Ar gyfer y tiwtorial, gweler cath.
Pecynnau gofynnol ar y prif beiriant:
- python
- git
- ffeil gydag allweddi ssh
Yr egwyddor gyffredinol o weithredu tynnu perfedd awtomatig ar bob peiriant rhithwir yw bod angen peiriant arnoch y bydd Ansible yn cael ei osod arno. O'r peiriant hwn, bydd Ansible yn anfon gorchmynion tynnu git ac yn ailgychwyn y gwasanaeth sydd wedi'i ddiweddaru. At y dibenion hyn, fe wnaethom greu peiriant rhithwir ar wahân y tu allan i'r clystyrau a'i osod arno:
- python
- ansible
- gitlab-redwr
O faterion trefniadol - mae angen i chi gofrestru gitlab-runner, gwneud ssh-keygen, lanlwytho allwedd ssh cyhoeddus y peiriant hwn i .ssh/authorized_keys
ar y peiriant meistr, agor porthladd 22 ar gyfer ansible ar y peiriant meistr.
Nawr gadewch i ni ffurfweddu ansible
Gan mai ein nod yw awtomeiddio popeth sy'n bosibl. Mewn ffeil /etc/ansible/ansible.cfg
byddwn yn dadwneud y llinell host_key_checking = False
fel nad yw Ansible yn gofyn am gadarnhad o beiriannau newydd.
Nesaf, mae angen i chi gynhyrchu ffeil rhestr eiddo yn awtomatig ar gyfer anible, lle bydd yn cymryd ip y peiriannau y mae angen i chi dynnu git arnynt.
Rydyn ni'n cynhyrchu'r ffeil hon gan ddefnyddio API Hetzner, gallwch chi gymryd y rhestr o westeion o'ch cronfa ddata AWS, Asure (mae gennych chi API yn rhywle i arddangos eich peiriannau rhedeg, dde?).
Mae strwythur y ffeil rhestr eiddo yn bwysig iawn i Ansible; dylai edrych fel hyn:
[группа]
ip-адрес
ip-адрес
[группа2]
ip-адрес
ip-адрес
I gynhyrchu ffeil o'r fath, byddwn yn gwneud sgript syml (gadewch i ni ei galw 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
Mae'n bryd gwirio bod Ansible yn gweithio a'i fod yn gyfeillgar â derbyn cyfeiriadau IP:
/etc/ansible/./vm_list && ansible -i /etc/ansible/cloud_ip -m shell -a 'hostname' group
Dylai'r allbwn gynnwys enwau gwesteiwr y peiriannau y gweithredwyd y gorchymyn arnynt.
Ychydig eiriau am gystrawen:
- /etc/ansible/./vm_list - cynhyrchu rhestr o beiriannau
- -i - llwybr absoliwt i'r ffeil rhestr eiddo
- -m - dweud wrth anible i ddefnyddio'r modiwl cragen
- -a yw'r ddadl. Gellir nodi unrhyw orchymyn yma
- grŵp—enw eich clwstwr. Os oes angen i chi wneud hyn ar bob clwstwr, newidiwch y grŵp i bawb
Awn ymhellach - gadewch i ni geisio tynnu git ar ein peiriannau rhithwir:
/etc/ansible/./vm_list && ansible -i /etc/ansible/cloud_ip -m shell -a 'cd /path/to/project && git pull' group
Os ydym yn gweld yn yr allbwn eisoes yn gyfredol neu'n dadlwytho o'r ystorfa, yna mae popeth yn gweithio.
Nawr dyma beth oedd y cyfan yn ei olygu
Gadewch i ni ddysgu ein sgript i redeg yn awtomatig wrth ymrwymo i'r brif gangen yn gitlab
Yn gyntaf, gadewch i ni wneud ein sgript yn fwy prydferth a'i roi mewn ffeil gweithredadwy (gadewch i ni ei alw'n exec_pull) -
#!/bin/bash
/etc/ansible/./get_vms && ansible -i /etc/ansible/cloud_ip -m shell -a "$@"
Gadewch i ni fynd i'n gitlab a chreu ffeil yn y prosiect .gitlab-ci.yml
Rydyn ni'n rhoi'r canlynol y tu mewn:
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
Mae'r cyfan yn barod. Nawr -
- gwneud ymrwymiad
- Rwy'n falch bod popeth yn gweithio
Wrth drosglwyddo .yml i brosiectau eraill, does ond angen i chi newid enw'r gwasanaeth i ailgychwyn ac enw'r clwstwr y bydd y gorchmynion ansible yn cael eu gweithredu arno.
Ffynhonnell: hab.com