bytes.cat

La wiki d'FP d'informàtica

Eines de l'usuari

Eines del lloc


Barra lateral

ASIX Administració de Sistemes Informàtics i Xarxes
Tots els mòduls del cicle
MP01 Implantació de sistemes operatius
Totes les UFs del modul
MP02 Gestió de bases de dades
Totes les UFs del modul
MP03 Programació bàsica
Totes les UFs del modul
MP04 Llenguatges de marques i sistemes de gestió d'informació
Totes les UFs del modul
MP05 Fonaments de maquinari
Totes les UFs del modul
MP06 Administració de sistemes operatius
Totes les UFs del modul
MP07 Planificació i administració de xarxes
Totes les UFs del modul
MP08 Serveis de xarxa i Internet
Totes les UFs del modul
MP09 Implantació d'aplicacions web
Totes les UFs del modul
MP10 Administració de sistemes gestors de bases de dades
Totes les UFs del modul
MP11 Seguretat i alta disponibilitat
Totes les UFs del modul
MP12 Formació i orientació laboral
Totes les UFs del modul
MP13 Empresa i iniciativa emprenedora
Totes les UFs del modul
MP14 Projecte
Totes les UFs del modul
DAM Desenvolupament d’aplicacions multiplataforma
Tots els mòduls del cicle
MP01 Sistemes informàtics
Totes les UFs del modul
MP02 Bases de dades
Totes les UFs del modul
MP03 Programació bàsica
Totes les UFs del modul
MP04 Llenguatges de marques i sistemes de gestió d'informació
Totes les UFs del modul
MP05 Entorns de desenvolupament
Totes les UFs del modul
MP06 Accés a dades
Totes les UFs del modul
MP07 Desenvolupament d’interfícies
Totes les UFs del modul
MP08 Programació multimèdia i dispositius mòbils
Totes les UFs del modul
MP09 Programació de serveis i processos
Totes les UFs del modul
MP10 Sistemes de gestió empresarial
Totes les UFs del modul
MP11 Formació i orientació laboral
Totes les UFs del modul
MP12 Empresa i iniciativa emprenedora
Totes les UFs del modul
MP13 Projecte de síntesi
Totes les UFs del modul
MPDual Mòdul Dual / Projecte
DAW Desenvolupament d’aplicacions web
Tots els mòduls del cicle
MP01 Sistemes informàtics
Totes les UFs del modul
MP02 Bases de dades
Totes les UFs del modul
MP03 Programació
Totes les UFs del modul
MP04 Llenguatge de marques i sistemes de gestió d’informació
Totes les UFs del modul
MP05 Entorns de desenvolupament
Totes les UFs del modul
MP06 Desenvolupament web en entorn client
Totes les UFs del modul
MP07 Desenvolupament web en entorn servidor
Totes les UFs del modul
MP08 Desplegament d'aplicacions web
Totes les UFs del modul
MP09 Disseny d'interfícies web
Totes les UFs del modul
MP10 Formació i Orientació Laboral
Totes les UFs del modul
MP11 Empresa i iniciativa emprenedora
Totes les UFs del modul
MP12 Projecte de síntesi
Totes les UFs del modul
SMX Sistemes Microinformàtics i Xarxes
Tots els mòduls del cicle
MP01 Muntatge i manteniment d’equips
Totes les UFs del modul
MP02 Sistemes Operatius Monolloc
Totes les UFs del modul
MP03 Aplicacions ofimàtiques
Totes les UFs del modul
MP04 Sistemes operatius en xarxa
Totes les UFs del modul
MP05 Xarxes locals
Totes les UFs del modul
MP06 Seguretat informàtica
Totes les UFs del modul
MP07 Serveis de xarxa
Totes les UFs del modul
MP08 Aplicacions Web
Totes les UFs del modul
MP09 Formació i Orientació Laboral
Totes les UFs del modul
MP10 Empresa i iniciativa emprenedora
Totes les UFs del modul
MP11 Anglès
Totes les UFs del modul
MP12 Síntesi
Totes les UFs del modul
CETI Ciberseguretat en Entorns de les Tecnologies de la Informació
Tots els mòduls del cicle
CiberOT Ciberseguretat en Entorns d'Operació
Tots els mòduls del cicle
ansible

Ansible: eina d'orquestració

Ansible és un sistema d'orquestració lliure, escrit en Python, que ens permet automatitzar la configuració d’una màquina d’una forma senzilla.

Ansible automatitza la gestió de sistemes remots i controla el seu estat desitjat.

La web oficial de la documentació d'Ansible és: https://docs.ansible.com/ansible_community.html


Com funciona Ansible?

  • Configura les màquines client des d’una altra màquina on tenim instal·lat l’Ansible.
  • Accedeix per SSH als clients per realitzar les tasques de configuració.
  • Utilitza arxius anomenats Playbooks en llenguatge YAML per gestionar els clients.
  • Funciona habitualment en mode “push”.
  • No té agents.

Un entorn ansible conté els següents components principals:

  • Node de control: un sistema en el que s'instal·la Ansible. És el que controla tota l’execució del Playbook. És qui realitza la connexió per SSH, executa els mòduls en les màquines i realitza la instal·lació.
  • Node administrat: un sistema remot, o amfitrió, que controla Ansible, és el host.
  • Inventari: és un arxiu en text pla que conté la llista dels host on s’han d’executar els mòduls.

Els Playbooks estan escrits en llenguatge YAML (només cal aprendre com col·locar els atributs dintre del fitxer). Les característiques claus generals són:

  • El contingut ha de ser format UTF-8 o UTF’16.
  • Per identar és recomanable utilitzar espais en blanc i no TAB.
  • Cada element d’una llista comença amb un guió (-) i un espai.
  • Els diccionaris clau utilitzen l’estructura clau: valor.
  • Els comentaris s’indiquen amb una almohadilla (#).
  • L’extensió dels fitxers YAML pot ser .yml o .yaml (recomanada).

Per configurar l’inventari:

 $ sudo nano /etc/ansible/hosts 
# Podem definir directament la IP o URL
104.155.184.125
Ansible1.prova.org
34.71.11.100

# Podem crear grups d’IPs o URL
[gupexemple]
104.155.184.125
Ansible1.prova.org
[altregrupexemple]
34.71.11.100

# Podem crear subgrups de grups
[subgrupprova: children]
grupexemple
altregrupexemple

Existeixen 2 grups per defecte:

  • all: Reuneix tots els servidors.
  • ungrouped: Reuneix tots els servidors però que no estan en cap grup.

També es poden utilitzar variables. Es pot consultar la llista de variables.

Modificadors del comando Ansible

El comando Ansible té diversos arguments (modificadors) que li podem posar. Es pot consultar la llista de modificadors per Ansible.

L’estructura és:

 $ansible <nomservidor> <argument> <valorargument> 
$ansible ansible1 --> el comando s’executaria en el servidor ansible1. 
$ansible all --> per executar el comando en tots els servidors del fitxer "hosts" 

Aquí us deixo una llista d’alguns arguments per Ansible.

  • Argument -f: per indicar el nombre de fils que utilitzarà Ansible.
  • Argument -u o - -user: per indicar l’usuari que realitzarà el comando Ansible utilitzant ssh.
  • Argument -b o - -become: per indicar que el comando s’executarà en permisos de superusuari (root), però no demanarà contrasenya.
  • Argument -k o - -ask-become-pass: per indicar que el comando s’executarà en permisos de superusuari (root), però dmanarà contrasenya de superusuari.
  • Argument -m o - -module-name i -a:
    • Si no s’especifica aquest argument s’utilitza el mòdul command per defecte.
    • Si es vol utlitzar el shell i poder utilitzar les variables d’entorn s’ha d'especificar:
 $ ansible ansible1 -m shell -a "echo $HOME & date"
  • Per comprovar la connexió amb el servidor, utilitzar el mòdul PING:
 $ ansible ansible1 –m ping
  • Per comprovar el nom del host dels servidors:
 $ ansible ansible1 -a hostname 
  • Per veure la quantitat de RAM i la disponibilitat:
 $ ansible ansible1 -a “free -m” --> es posa entre cometes perquè porta més d’un argument. 

Alguns dels mòduls per utilitzar són:

  • apt: per la gestió de paquets .deb des de la línia de comandos.
  • service: per controlar els serveis del servidor: activar, parar, reiniciar,…
  • group: per gestionar els grups dintre dels servidors. Pera utilitzar aquest mòdul necesitem permisos de superusuari, així que utilitzarem el modificar -b.
#Per a crear un grup admin 
$ ansible ansible1 -m group –a “name=admin state=present” -b 
  • user: per gestionar usuaris dintre dels servidors:
#Per crear un usuari:
$ ansible ansible1 -m user -a "name=anasanz group=admin create_home=yes" -b
  • stat: per gestionar i modificar fitxers:
$ ansible ansible1 -m stat -a "path=/etc/host" 
  • copy: per copiar arxius als servidors
$ ansible ansible1 -m copy -a "src=/etc/hosts dest=/tmp/copia" 
  • fetch: per copiar arxius dels servidors al node de control.
$ ansible ansible1 -m fetch -a "src=/etc/hosts dest=/tmp/" 
  • file: per crear fitxers i directoris dintre dels servidors, gestionar permisos i crear enllaços simbòlics/físics.
  • cron: comprova l’arxiu de text pla CRONTAB, que conté els scripts i hora programada d’execució de cadascun. Es poden controlar tots els aspectes del cron dels servidors:
#Per executar un script cada dimart a les 4:00 h tots els mesos de l’any.
$ ansible ansible1 -m cron -a "name='exemple' weekday=2 hour=4 minute=0 job='/script.sh'" 
  • setup: per veure totes les dades tècniques dels servidors. També es pot utilitzar el modificador -a per fer filtratges:
$ ansible ansible1 -m setup
$ ansible ansible1 -m setup -a “filter=*ipv4” 



Instal·lació d’Ansible

Per fer la instal·lació es pot seguir el manual oficial d’Ansible. En cas de tenir el sistema operatiu Ubuntu seria:

 
# apt update
# apt install software-properties-common
# add-apt-repository --yes --update ppa:ansible/ansible
# apt-get install ansible

Si es vol tenir l’última versió es pot baixar de pypi (pip install ansible). S’ha de tenir en compte que s’ha de tenir instal·lat abans python i ssh.

Una vegada s’ha realitzat la instal·lació cal configurar el fitxer Playbook, en aquest exemple seria playbook1.yaml.

Estructura del Playbook1.yaml

L’estructura bàsica d’un Playbook és:

--
- hosts: ansible1
  become: yes
  tasks:
  - name: Install Apache
    apt: name=apache2 state=latest
  - name: Check Apache is running & start on boot
    service: name=apache2 state=started enabled=yes
...

En aquest cas seria un exemple de Playbook per instal·lar l’Apache. Es pot observar que el fitxer comença amb 2 guions (- -) i acaba amb 3 punts (…).

  • Primer es posen els hosts, que són els servidors del nostre inventari, indicats com es vulgui.
  • Opcionalment, però en aquest cas obligatori ja que es faran canvis en el sistema i es necessiten permisos de superusuari, es posa become: yes. Seria equivalent al -b en els comandos AD-HOC. Si no es necessiten els permisos de superusuari no cal posar-lo.
  • Es posen les tasques (tasks), una o diverses.
  • Cada tasca s'inicia, encara que és opcional, amb un nom (name). Serveix només per a identificar la tasca.
  • Després es posa el mòdul d’Ansible a utilitzar. En la mateixa línia del mòdul es posen els seus paràmetres i es configura igual que un comando AD-HOC.
  • Tenir en compte:
    • Es recomana crear un directori on guardar els playbooks o utilitzar un repositori GIT.
    • Les tasques s'executen per ordre.
    • Es pot utilitzar qualsevol editor, tant un IDE tipus Visual Studio Code, com en la terminal amb un editor de text tipus NANO o VIM.
    • El nom de l'arxiu no ha de seguir cap format. Pot ser a gust.
    • Els name de cada tasca pot estar en qualsevol idioma mentre segueixi UTF-8 o 16.
    • Dintre d'un mateix Playbook es poden crear diferents grups de tasques per a diferents servidors. Només cal escriure una altra vegada - hosts: etc ja que a l'ésser una llista podem continuar afegint.
    • Es pot definir l'usuari que executarà tot el playbook o una tasca afegint remote_user: nom.
    • Per a executar el playbook que hem escrit prèviament utilitzarem un nou comando d'Ansible:
$ ansible-playbook playbook1.yaml 

Dintre dels Playbooks es poden definir:

  • Handlers: tasques que s’executaran només quan se’ls faci la trucada.
  • Include: és semblant a una llibreria en qualsevol llenguatge de programació.
  • Rol: paquets d’aplicacions predefinides.
  • Pre_tasks: tasques que s’executen abans que la resta.
  • Template: aquest mòdul és semblant al COPY dels comandos AD-HOC, però el template va a buscar l'arxiu que se li indica en la ruta template.
 - name: template file to remote host
       template:
         src: archivo-config.j2
         dest: /tmp/archivo-config


Et proposo realitzar les activitats següents:

Activitat 1: Instal·la Ansible en el teu node controlador i crea un Playbook per realitzar tasques de manteniment i control dels teus servidors.

Activitat 2: Configura el crontab del servidor Ansible per llançar tots els Playbooks diàriament.



Vagrant amb Ansible

Molts projectes necessiten d'un entorn d'integració contínua en el qual es pot veure i detectar les fallades de manera ràpida, sense arribar a l'entorn de producció. Doncs, gràcies a la combinació de Vagrant i Ansible pots desplegar de manera senzilla un entorn d'integració contínua.

Si et preguntes què pots fer amb Vagrant i Ansible, aquí et deixo una pinzellada:

  • Aixecar les màquines virtuals
  • Configurar la xarxa
  • Realitzar les actualitzacions de programari
  • Instal·lar els paquets del programari que s'utilitzarà
  • Copiar els fitxers de configuració de plantilles prèviament creades
  • Aixecar o parar els serveis que es determinin
  • Executar qualsevol tasca en cadascuna de les màquines virtuals
  • Deixar l'entorn completament operatiu

Per a executar Ansible contra Vagrant, la configuració bàsica de Vagrantfile seria:

Vagrant.configure("2") do |config|

  #
  # Executa Ansible des de Vagrant Host
  #
  config.vm.provision "ansible" do |ansible|
    ansible.playbook = "playbook1.yml"
  end

end

Només que hi hagi 1 màquina amb el provisioner vagrant es crearà l'arxiu .vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory. Així sabrem les màquines que disposem i les podrem modificar totes alhora, per exemple, per fer un ping Ansible, des de la màquina amfitriona:

$ ansible all --inventory-file=.vagrant/provisioners/ansible/inventory/ -m ping

Ull, perquè funcioni bé:

  • Hem de tenir Ansible instal·lat a la màquina amfitriona.
  • Probablement el primer cop ens demani confirmació dels certificats SSH (caldrà respondre «yes» a cada màquina).
  • Potser xoca amb la configuració d'altres SSH. Si aquest fos el cas, caldria eliminar les claus antigues de ~/.ssh/known_hosts

Et proposo fer la següent activitat:

Activitat 3: Crear un entorn d’integració amb Vagrant i Ansible, per realitzar el manteniment i control dels teus servidors.


CLARA CABRERA MESEGUER 2022/07/03 22:25

ansible.txt · Darrera modificació: 2024/05/30 08:56 per enric_mieza_sanchez