Instalare si configurare Ansible

Postat la Sun 21 October 2018 in tutoriale

Cum am mentionat anterior Ansible este un aplicatie foarte usor de folosit care permite administrarea de servere multiple - instalare pachete, configurare, administrare servicii - cat si efecturea de deploy-uri, creare de containere etc. Totul prin intermediul modulelor incluse

Comenzile sunt foarte intuitive si se pot grupa pentru rularea lor in playbook-uri in format yaml.

Instalare

Ansible poate fi instalat ca pachet pentru distributia folosita sau ca modul Python

Instalare in CentOS din repo EPEL:

yum install epel-release
yum install ansible

Instalare in Ubuntu/Debian

apt-add-repository -y ppa:ansible/ansible
apt update
apt install -y ansible

Instalare ca modul Python:

pip install ansible

Configurare

Find o aplicatie de managementul configuratiilor fara agenti, se conecteaza la masinile administrate prin SSH, deci se recomanda instalarea unei chei publice pe fiecare.

Sunt mai multe moduri de stocare a configuratiei pentru Ansible:

  • globala in folderul /etc/ansible
  • locala intr-un folder al userului

Personal prefer a doua varianta pentru ca permite o grupare mai logica pe proiecte (cand avem mai multe) a tuturor setarilor necesare.

Creem folderul pentru proiect ~/ansible_project/ si creem un fisier de configurare in acesta ~/ansible_project/ansible.cfg

[defaults]
inventory = ./hosts
remote_user = root
host_key_checking = False
forks = 5
log_path = ./ansible.log

unde:

  • hosts - fisier cu lista de sisteme administrate - inventar,
  • remote_user - userul implicit cu care se va conecta la sisteme, cel mai des root,
  • forks - numarul de sisteme accesate simultan pentru rularea comenzilor.

Inventarul

Sistemele administrate cu Ansible sunt include intr-o lista de tip text in fisierul indicat in configuratie ce este de forma:

mail.example.com

[webservers]
foo.example.com
bar.example.com

[dbservers]
one.example.com
two.example.com
three.example.com

Alternativ sistemele pot fi descrise mai specific (de ex. cand avem doar IP fara DNS):

jumper ansible_port=5555 ansible_host=192.0.2.50

In exemplul de mai sus mai multe sisteme sunt grupate dupa anumite criterii - rol, sistem de operare, locatie, etc - in grupuri care ne vor ajuta la rularea comenzilor selectiv.

Inventarele pot fi si generate dinamic in format JSON de diverse scripturi ca de exemplu cand dorim sa rulam comenzi pe instantele de cloud (AWS, GCE, Azure).

Variabile

Cum infrastructura poate fi compusa din masini diverse sau cu roluri diverse putem avea setari diferite per masina la diverse servicii. Aceste variabile pot fi salvate fie direct in fisierul de inventar la nivel de masina sau grup ori in directoare speciale:

  • hosts_vars/foo.example.com - per sistem/masina
  • group_vars/webservers - per grup de masini

si sunt de forma:

---
ntp_server: acme.example.org
database_server: storage.example.org

Mai multe detalii si exemple gasiti in documentatia oficiala

Articolul face parte din seria Aplicatii pentru managementul configuratiilor