Egun ona
Hainbat hodei-kluster ditugu bakoitzean makina birtual ugarirekin. Hetzner-en antolatzen dugu gauza hau guztia. Kluster bakoitzean makina maisu bat dugu, bertatik argazki bat ateratzen da eta automatikoki klusterreko makina birtual guztietara banatzen da.
Eskema honek ez digu gitlab-runners normalean erabiltzen uzten, izan ere, arazo asko sortzen dira erregistratutako korrikalari berdin-berdinak agertzen direnean, eta horrek konponbidea bilatu eta artikulu/eskuliburu hau idaztera bultzatu gaitu.
Hau ez da praktikarik onena ziurrenik, baina irtenbide hau ahalik eta erosoena eta sinpleena zirudien.
Tutoriala ikusteko, ikusi cat.
Beharrezko paketeak makina nagusian:
- python
- git
- fitxategia ssh gakoekin
Makina birtual guztietan gut pull automatikoa ezartzeko printzipio orokorra da Ansible instalatuko den makina bat behar duzula. Makina honetatik, ansiblek git pull komandoak bidaliko ditu eta eguneratu den zerbitzua berrabiaraziko du. Helburu horietarako, makina birtual bereizi bat sortu dugu klusterretatik kanpo eta bertan instalatu dugu:
- python
- ansible
- gitlab-runner
Antolakuntza arazoetatik: gitlab-runner erregistratu, ssh-keygen egin, makina honen ssh gako publikoa kargatu behar duzu. .ssh/authorized_keys
makina maisuan, ireki 22 ataka makina maisuan ansiblerako.
Orain konfigura dezagun ansible
Gure helburua posible den guztia automatizatzea baita. Fitxategian /etc/ansible/ansible.cfg
lerroa komentatuko dugu host_key_checking = False
beraz, ansiblek ez du eskatu makina berrien berrespena.
Ondoren, automatikoki sortu behar duzu ansible-rako inbentario-fitxategi bat, bertatik git pull egin behar duzun makinen ip-a hartuko du.
Fitxategi hau Hetzner-en APIa erabiliz sortzen dugu, zure AWS, Asure, datu-baseko ostalarien zerrenda har dezakezu (API bat duzu nonbait martxan dauden makinak bistaratzeko, ezta?).
Inbentario-fitxategiaren egitura oso garrantzitsua da Ansiblerentzat; honelakoa izan beharko luke:
[Π³ΡΡΠΏΠΏΠ°]
ip-Π°Π΄ΡΠ΅Ρ
ip-Π°Π΄ΡΠ΅Ρ
[Π³ΡΡΠΏΠΏΠ°2]
ip-Π°Π΄ΡΠ΅Ρ
ip-Π°Π΄ΡΠ΅Ρ
Horrelako fitxategi bat sortzeko, script soil bat egingo dugu (dei dezagun 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
Ansiblek funtzionatzen duela eta IP helbideak jasotzearekin atsegina dela egiaztatzeko garaia da:
/etc/ansible/./vm_list && ansible -i /etc/ansible/cloud_ip -m shell -a 'hostname' group
Irteerak komandoa exekutatu den makinen ostalari-izenak izan behar ditu.
Sintaxiari buruzko hitz batzuk:
- /etc/ansible/./vm_list - sortu makinen zerrenda
- -i - inbentario fitxategirako bide absolutua
- -m - esan ansible shell modulua erabiltzeko
- -a da argumentua. Hemen edozein komando sar daiteke
- taldea β zure kluster izena. Hau kluster guztietan egin behar baduzu, aldatu taldea guztietara
Goazen harago - saia gaitezen git pull egiten gure makina birtualetan:
/etc/ansible/./vm_list && ansible -i /etc/ansible/cloud_ip -m shell -a 'cd /path/to/project && git pull' group
Irteeran dagoeneko eguneratuta edo biltegitik deskargatzen ikusten badugu, dena funtzionatzen ari da.
Orain honetarako zen guztia
Irakatsi diezaiogun gure script-a automatikoki exekutatzen gitlab-en adar nagusiarekin konprometitzean
Lehenik eta behin, egin dezagun gure script-a ederragoa eta jar ditzagun fitxategi exekutagarri batean (dei dezagun exec_pull) -
#!/bin/bash
/etc/ansible/./get_vms && ansible -i /etc/ansible/cloud_ip -m shell -a "$@"
Goazen gure gitlab-era eta sortu fitxategi bat proiektuan .gitlab-ci.yml
Barruan honako hauek jarri ditugu:
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
Dena prest dago. Orain -
- konpromisoa hartu
- Pozten naiz dena funtzionatzen ari delako
.yml beste proiektu batzuetara transferitzean, berrabiarazteko zerbitzuaren izena eta ansible komandoak exekutatuko diren kluster izena aldatu besterik ez duzu behar.
Iturria: www.habr.com