Ansible + otomatis git narik kluster mesin virtual ing méga

Ansible + otomatis git narik kluster mesin virtual ing méga

sugeng siang

We duwe sawetara klompok maya karo nomer akeh mesin virtual ing saben. Kita dadi tuan rumah kabeh bisnis iki ing Hetzner. Ing saben kluster kita duwe siji mesin master, gambar dijupuk saka iku lan kanthi otomatis mbagekke kanggo kabeh mesin virtual ing kluster.

Skema iki ora ngidini kita nggunakake gitlab-runner biasane, amarga akeh masalah sing muncul nalika akeh pelari sing kadhaptar sing padha katon, sing nyebabake kita nemokake solusi lan nulis artikel / manual iki.

Iki mbokmenawa dudu praktik paling apik, nanging solusi iki katon trep lan gampang.

Kanggo tutorial, deleng kucing.

Paket sing dibutuhake ing mesin master:

  • python
  • Go
  • file nganggo tombol ssh

Prinsip umum ngleksanakake narik usus otomatis ing kabeh mesin virtual yaiku sampeyan butuh mesin sing bakal diinstal Ansible. Saka mesin iki, ansible bakal ngirim printah git pull lan miwiti maneh layanan sing wis dianyari. Kanggo tujuan kasebut, kita nggawe mesin virtual sing kapisah ing njaba kluster lan diinstal ing:

  • python
  • ansible
  • gitlab-runner

Saka masalah organisasi - sampeyan kudu ndhaptar gitlab-runner, nggawe ssh-keygen, upload kunci ssh umum mesin iki menyang .ssh/authorized_keys ing mesin master, mbukak port 22 kanggo ansible ing mesin master.

Saiki ayo ngatur ansible

Amarga tujuane yaiku ngotomatisasi kabeh sing bisa ditindakake. Ing file /etc/ansible/ansible.cfg kita bakal uncomment baris host_key_checking = Falsesupaya ansible ora njaluk konfirmasi saka mesin anyar.

Sabanjure, sampeyan kudu kanthi otomatis generate file persediaan kanggo ansible, saka ngendi iku bakal njupuk ip saka mesin sing kudu nindakake git narik.

We generate file iki nggunakake API Hetzner, sampeyan bisa njupuk dhaftar host saka AWS Panjenengan, Asure, database (sampeyan duwe API nang endi wae kanggo nampilake mesin mlaku, tengen?).

Struktur file inventaris penting banget kanggo Ansible; kudu katon kaya iki:

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

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

Kanggo ngasilake file kasebut, kita bakal nggawe skrip prasaja (ayo sebutno 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

Wektu kanggo mriksa manawa Ansible bisa digunakake lan ramah karo nampa alamat IP:

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

Output kudu ngemot jeneng host mesin sing printah kasebut dieksekusi.
Sawetara tembung babagan sintaksis:

  • /etc/ansible/./vm_list - ngasilake dhaptar mesin
  • -i - path absolut menyang file persediaan
  • -m - marang ansible nggunakake modul Nihan
  • -a minangka argumentasi. Sembarang prentah bisa dilebokake ing kene
  • grup - jeneng klompok sampeyan. Yen sampeyan kudu nindakake iki ing kabeh klompok, ganti grup dadi kabeh

Ayo luwih maju - ayo nyoba nindakake git pull ing mesin virtual kita:

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

Yen ing output kita ndeleng wis nganyari utawa unloading saka gudang, banjur kabeh bisa digunakake.

Saiki iki apa iku kabeh temenan kanggo

Ayo mulang skrip supaya bisa mlaku kanthi otomatis nalika nindakake cabang master ing gitlab

Pisanan, ayo nggawe skrip luwih apik lan lebokake ing file sing bisa dieksekusi (ayo diarani exec_pull) -

#!/bin/bash

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

Ayo menyang gitlab lan nggawe file ing proyek kasebut .gitlab-ci.yml
Kita sijine ing ngisor iki:

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 

Kabeh wis siyap. Saiki-

  • nggawe komitmen
  • Aku bungah sing kabeh bisa

Nalika nransfer .yml kanggo proyèk liyane, sampeyan mung kudu ngganti jeneng layanan kanggo miwiti maneh lan jeneng kluster kang printah ansible bakal kaleksanan.

Source: www.habr.com

Add a comment