Ansible + auto git pull í þyrping sýndarvéla í skýinu

Ansible + auto git pull í þyrping sýndarvéla í skýinu

Góðan dag

Við erum með nokkra skýjaklasa með miklum fjölda sýndarvéla í hverjum. Við hýsum allt þetta fyrirtæki hjá Hetzner. Í hverjum klasa erum við með eina aðalvél, mynd er tekin af henni og dreift sjálfkrafa á allar sýndarvélar innan klasans.

Þetta kerfi leyfir okkur ekki að nota gitlab-runners venjulega, þar sem mikil vandamál koma upp þegar margir eins skráðir hlauparar birtast, sem varð til þess að við fundum lausn og skrifuðum þessa grein/handbók.

Þetta er líklega ekki besta aðferðin, en þessi lausn virtist eins þægileg og einföld og hægt var.

Fyrir kennsluna, vinsamlegast sjáðu cat.

Nauðsynlegir pakkar á aðalvélinni:

  • python
  • Git
  • skrá með ssh lyklum

Almenna meginreglan um að innleiða sjálfvirkt þörmum á allar sýndarvélar er að þú þarft vél sem Ansible verður sett upp á. Frá þessari vél mun ansible senda git pull skipanir og endurræsa þjónustuna sem hefur verið uppfærð. Í þessum tilgangi bjuggum við til sérstaka sýndarvél fyrir utan klasana og settum upp á hana:

  • python
  • ansible
  • gitlab-hlaupari

Frá skipulagsmálum - þú þarft að skrá gitlab-runner, búa til ssh-keygen, hlaða upp opinbera ssh lyklinum þessarar vélar á .ssh/authorized_keys á aðalvélinni, opnaðu tengi 22 fyrir ansible á aðalvélinni.

Nú skulum við stilla ansible

Þar sem markmið okkar er að gera allt sem mögulegt er sjálfvirkt. Í skrá /etc/ansible/ansible.cfg við munum afskrifa línuna host_key_checking = Falseþannig að ansible biður ekki um staðfestingu á nýjum vélum.

Næst þarftu sjálfkrafa að búa til birgðaskrá fyrir ansible, þaðan sem hún mun taka ip vélanna sem þú þarft að gera git pull á.

Við búum til þessa skrá með því að nota Hetzner's API, þú getur tekið listann yfir gestgjafa úr AWS, Asure, gagnagrunninum þínum (þú ert með API einhvers staðar til að sýna hlaupandi vélarnar þínar, ekki satt?).

Uppbygging birgðaskrárinnar er mjög mikilvæg fyrir Ansible; hún ætti að líta svona út:

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

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

Til að búa til slíka skrá munum við búa til einfalt handrit (köllum það 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

Það er kominn tími til að athuga hvort Ansible virkar og er vingjarnlegur við móttöku IP tölur:

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

Úttakið ætti að innihalda hýsilheiti vélanna sem skipunin var keyrð á.
Nokkur orð um setningafræði:

  • /etc/ansible/./vm_list - búa til lista yfir vélar
  • -i - alger slóð að birgðaskránni
  • -m - segðu ansible að nota skeljaeininguna
  • -a eru rökin. Hér er hægt að slá inn hvaða skipun sem er
  • hópur — nafn klasans þíns. Ef þú þarft að gera þetta á öllum klösum skaltu breyta hópnum í alla

Við skulum ganga lengra - við skulum reyna að gera git pull á sýndarvélunum okkar:

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

Ef í úttakinu sjáum við þegar uppfært eða affermingu úr geymslunni, þá er allt að virka.

Núna var þetta allt ætlað til

Við skulum kenna handritinu okkar að keyra sjálfkrafa þegar við skuldbindum okkur til master útibúsins í gitlab

Fyrst skulum við gera handritið okkar fallegra og setja það í keyrsluskrá (köllum það exec_pull) -

#!/bin/bash

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

Förum í gitlabið okkar og búum til skrá í verkefninu .gitlab-ci.yml
Við setjum eftirfarandi inni:

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 

Allt er tilbúið. Nú -

  • skuldbinda sig
  • Ég er ánægður með að allt sé að virka

Þegar þú flytur .yml yfir í önnur verkefni þarftu bara að breyta nafni þjónustunnar til að endurræsa og nafni þyrpingarinnar sem tiltækar skipanir verða framkvæmdar á.

Heimild: www.habr.com

Bæta við athugasemd