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