Introduzione
I sistemi di gestione della configurazione sono progettati per ottimizzare il processo di controllo di un gran numero di server, rivolti agli amministratori e ai team delle operazioni. Consentono di controllare in modo automatizzato molti sistemi diversi da una posizione centrale.
Pur essendo disponibili molteplici strumenti di gestione della configurazione popolari per i sistemi Linux, come Chef e Puppet, spesso sono più complessi di quanto molte persone desiderino o abbiano bisogno. Ansible è un’ottima alternativa a queste opzioni perché offre un’architettura che non richiede l’installazione di software speciale sui nodi, utilizzando SSH per eseguire compiti di automazione e file YAML per definire i dettagli della fornitura.
In questa guida, discuteremo su come installare Ansible su un server Ubuntu 20.04 e affronteremo alcuni concetti di base su come utilizzare questo software. Per una panoramica più generale di Ansible come strumento di gestione della configurazione, fare riferimento a Un’introduzione alla gestione della configurazione con Ansible.
Prerequisiti
Per seguire questo tutorial, avrai bisogno di:
-
Un nodo di controllo Ansible: Il nodo di controllo Ansible è la macchina che utilizzeremo per connetterci e controllare gli host Ansible tramite SSH. Il tuo nodo di controllo Ansible può essere la tua macchina locale o un server dedicato all’esecuzione di Ansible, anche se questa guida assume che il tuo nodo di controllo sia un sistema Ubuntu 20.04. Assicurati che il nodo di controllo abbia:
- Un utente non root con privilegi sudo. Per configurare questo, puoi seguire i Passaggi 2 e 3 della nostra Guida alla configurazione iniziale del server per Ubuntu 20.04. Tuttavia, si prega di notare che se stai utilizzando un server remoto come nodo di controllo Ansible, dovresti seguire ogni passaggio di questa guida. In questo modo verrà configurato un firewall sul server con
ufw
e verrà abilitato l’accesso esterno al profilo del tuo utente non root, entrambi utili per mantenere sicuro il server remoto. - Una coppia di chiavi SSH associata a questo utente. Per configurare questo, puoi seguire Passaggio 1 della nostra guida su Come configurare le chiavi SSH su Ubuntu 20.04.
- Un utente non root con privilegi sudo. Per configurare questo, puoi seguire i Passaggi 2 e 3 della nostra Guida alla configurazione iniziale del server per Ubuntu 20.04. Tuttavia, si prega di notare che se stai utilizzando un server remoto come nodo di controllo Ansible, dovresti seguire ogni passaggio di questa guida. In questo modo verrà configurato un firewall sul server con
-
Uno o più Host Ansible: Un host Ansible è qualsiasi macchina che il tuo nodo di controllo Ansible è configurato per automatizzare. Questa guida assume che i tuoi host Ansible siano server Ubuntu 20.04 remoti. Assicurati che ogni host Ansible abbia:
- La chiave pubblica SSH del nodo di controllo Ansible aggiunta alle
authorized_keys
di un utente di sistema. Questo utente può essere sia root o un utente normale con privilegi sudo. Per configurarlo, puoi seguire il Passaggio 2 di Come Configurare le Chiavi SSH su Ubuntu 20.04.
- La chiave pubblica SSH del nodo di controllo Ansible aggiunta alle
Passo 1 – Installazione di Ansible
Per iniziare a utilizzare Ansible come mezzo per gestire l’infrastruttura del server, è necessario installare il software Ansible sulla macchina che fungerà da nodo di controllo di Ansible.
Dal tuo nodo di controllo, esegui il seguente comando per includere l’archivio di pacchetti personali (PPA) del progetto ufficiale nell’elenco delle fonti del tuo sistema:
- sudo apt-add-repository ppa:ansible/ansible
Premi INVIO
quando ti viene richiesto di accettare l’aggiunta del PPA.
Successivamente, aggiorna l’indice dei pacchetti del sistema in modo che sia consapevole dei pacchetti disponibili nel nuovo PPA incluso:
- sudo apt update
Dopo questo aggiornamento, puoi installare il software Ansible con:
- sudo apt install ansible
Il tuo nodo di controllo di Ansible ha ora tutto il software necessario per amministrare i tuoi host. Successivamente, vedremo come aggiungere i tuoi host al file di inventario del nodo di controllo in modo che possa controllarli.
Passo 2 – Configurazione del File di Inventari
Il file dell’inventario contiene informazioni sugli host che gestirai con Ansible. Puoi includere da uno a diversi centinaia di server nel tuo file di inventario, e gli host possono essere organizzati in gruppi e sottogruppi. Il file di inventario viene spesso utilizzato anche per impostare variabili che saranno valide solo per host o gruppi specifici, al fine di utilizzarle all’interno dei playbook e dei modelli. Alcune variabili possono anche influenzare il modo in cui viene eseguito un playbook, come la variabile ansible_python_interpreter
che vedremo tra un momento.
Per modificare il contenuto del tuo inventario di default di Ansible, apri il file /etc/ansible/hosts
utilizzando il tuo editor di testo preferito, sul tuo nodo di controllo di Ansible:
- sudo nano /etc/ansible/hosts
Nota: Anche se Ansible crea tipicamente un file di inventario predefinito in etc/ansible/hosts
, sei libero di creare file di inventario in qualsiasi posizione che meglio si adatta alle tue esigenze. In questo caso, dovrai fornire il percorso al tuo file di inventario personalizzato con il parametro -i
quando esegui comandi e playbook di Ansible. Utilizzare file di inventario per progetto è una buona pratica per ridurre al minimo il rischio di eseguire un playbook sul gruppo sbagliato di server.
Il file di inventario predefinito fornito dall’installazione di Ansible contiene diversi esempi che puoi utilizzare come riferimento per configurare il tuo inventario. L’esempio seguente definisce un gruppo chiamato [servers]
con tre diversi server al suo interno, ciascuno identificato da un alias personalizzato: server1, server2, e server3. Assicurati di sostituire gli IP evidenziati con gli indirizzi IP dei tuoi host di Ansible.
[servers]
server1 ansible_host=203.0.113.111
server2 ansible_host=203.0.113.112
server3 ansible_host=203.0.113.113
[all:vars]
ansible_python_interpreter=/usr/bin/python3
Il sottogruppo all:vars
imposta il parametro host ansible_python_interpreter
che sarà valido per tutti gli host inclusi in questo inventario. Questo parametro assicura che il server remoto utilizzi l’eseguibile Python 3 /usr/bin/python3
invece di /usr/bin/python
(Python 2.7), che non è presente nelle versioni recenti di Ubuntu.
Quando hai finito, salva e chiudi il file premendo CTRL+X
, quindi Y
e ENTER
per confermare le tue modifiche.
Ogni volta che desideri verificare il tuo inventario, puoi eseguire:
- ansible-inventory --list -y
Vedrai un output simile a questo, ma contenente la tua infrastruttura server definita nel file inventario:
Outputall:
children:
servers:
hosts:
server1:
ansible_host: 203.0.113.111
ansible_python_interpreter: /usr/bin/python3
server2:
ansible_host: 203.0.113.112
ansible_python_interpreter: /usr/bin/python3
server3:
ansible_host: 203.0.113.113
ansible_python_interpreter: /usr/bin/python3
ungrouped: {}
Ora che hai configurato il file inventario, hai tutto il necessario per testare la connessione ai tuoi host Ansible.
Passo 3 — Test della Connessione
Dopo aver configurato il file inventario per includere i tuoi server, è ora di verificare se Ansible è in grado di connettersi a questi server ed eseguire comandi tramite SSH.
Per questa guida, useremo l’account root di Ubuntu perché è tipicamente l’unico account disponibile di default su server appena creati. Se i tuoi host Ansible hanno già un utente sudo regolare creato, ti consigliamo di utilizzare quel conto al posto.
Puoi utilizzare l’argomento -u
per specificare l’utente di sistema remoto. Quando non viene fornito, Ansible cercherà di connettersi come l’utente di sistema attuale sul nodo di controllo.
Dal tuo computer locale o dal nodo di controllo di Ansible, esegui:
- ansible all -m ping -u root
Questo comando utilizzerà il modulo ping
integrato di Ansible per eseguire un test di connettività su tutti i nodi dalla tua inventario predefinito, connettendosi come root. Il modulo ping
testerà:
- se gli host sono accessibili;
- se hai credenziali SSH valide;
- se gli host sono in grado di eseguire moduli Ansible utilizzando Python.
Dovresti ottenere un output simile a questo:
Outputserver1 | SUCCESS => {
"changed": false,
"ping": "pong"
}
server2 | SUCCESS => {
"changed": false,
"ping": "pong"
}
server3 | SUCCESS => {
"changed": false,
"ping": "pong"
}
Se è la prima volta che ti connetti a questi server tramite SSH, ti verrà chiesto di confermare l’autenticità degli host a cui ti stai connettendo tramite Ansible. Quando richiesto, digita yes
e premi ENTER
per confermare.
Una volta ricevuto un riscontro "pong"
da un host, significa che sei pronto per eseguire comandi e playbook di Ansible su quel server.
Nota: Se non riesci a ottenere una risposta positiva dai tuoi server, consulta la nostra Guida alla Barra degli Strumenti di Ansible per ulteriori informazioni su come eseguire comandi Ansible con diverse opzioni di connessione.
Passaggio 4 — Esecuzione di Comandi Ad-Hoc (Opzionale)
Dopo aver confermato che il nodo di controllo di Ansible è in grado di comunicare con i tuoi host, puoi iniziare a eseguire comandi ad-hoc e playbook sui tuoi server.
Ogni comando che normalmente eseguiresti su un server remoto tramite SSH può essere eseguito con Ansible sui server specificati nel tuo file di inventario. Ad esempio, puoi controllare l’utilizzo del disco su tutti i server con:
- ansible all -a "df -h" -u root
Output
server1 | CHANGED | rc=0 >>
Filesystem Size Used Avail Use% Mounted on
udev 3.9G 0 3.9G 0% /dev
tmpfs 798M 624K 798M 1% /run
/dev/vda1 155G 2.3G 153G 2% /
tmpfs 3.9G 0 3.9G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
/dev/vda15 105M 3.6M 101M 4% /boot/efi
tmpfs 798M 0 798M 0% /run/user/0
server2 | CHANGED | rc=0 >>
Filesystem Size Used Avail Use% Mounted on
udev 2.0G 0 2.0G 0% /dev
tmpfs 395M 608K 394M 1% /run
/dev/vda1 78G 2.2G 76G 3% /
tmpfs 2.0G 0 2.0G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup
/dev/vda15 105M 3.6M 101M 4% /boot/efi
tmpfs 395M 0 395M 0% /run/user/0
...
Il comando evidenziato df -h
può essere sostituito con qualsiasi comando desideri.
Puoi anche eseguire moduli di Ansible tramite comandi ad-hoc, in modo simile a quanto abbiamo fatto in precedenza con il modulo ping
per testare la connessione. Ad esempio, ecco come possiamo utilizzare il modulo apt
per installare l’ultima versione di vim
su tutti i server nel tuo inventario:
- ansible all -m apt -a "name=vim state=latest" -u root
Puoi anche mirare agli host individuali, così come ai gruppi e ai sottogruppi, quando esegui comandi Ansible. Ad esempio, così controlli il uptime
di ogni host nel gruppo servers
:
- ansible servers -a "uptime" -u root
Possiamo specificare più host separandoli con i due punti:
- ansible server1:server2 -m ping -u root
Per ulteriori informazioni su come utilizzare Ansible, incluso come eseguire i playbook per automatizzare la configurazione del server, puoi consultare la nostra Guida di Riferimento Ansible.
Conclusione
In questa guida, hai installato Ansible e configurato un file di inventario per eseguire comandi ad-hoc da un Nodo di Controllo Ansible.
Una volta confermato di essere in grado di connettersi e controllare la tua infrastruttura da una macchina controller Ansible centrale, puoi eseguire qualsiasi comando o playbook desiderato su quegli host.
Per ulteriori informazioni su come utilizzare Ansible, consulta la nostra Guida alla Barra degli Strumenti Ansible.