Introduzione
I sistemi di gestione della configurazione sono progettati per semplificare il processo di controllo di un numero elevato di server, per amministratori e team operativi. Ti consentono di controllare molti sistemi diversi in modo automatizzato da una posizione centrale.
Esistono sono molti strumenti di gestione della configurazione popolari disponibili per i sistemi Linux, come Chef e Puppet, questi sono spesso 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 le attività di automazione e i file YAML per definire i dettagli di provisioning.
In questa guida, discuteremo come installare Ansible su un server Ubuntu 20.04 LTS Focal Fossa.
Prerequisiti
Per seguire questo tutorial, avrai bisogno di:
Un nodo di controllo Ansible: il nodo di controllo Ansible è la macchina che useremo per connetterci e controllare gli host Ansible su SSH. Il tuo nodo di controllo Ansible può essere il tuo computer locale o un server dedicato all'esecuzione di Ansible, anche se questa guida presuppone che il tuo nodo di controllo sia un sistema Ubuntu 20.04 LTS. Assicurarsi che il nodo di controllo abbia:
- Un utente non root con privilegi sudo.
- Una coppia di chiavi SSH associata a questo utente.
Uno o più host Ansible: un host Ansible è qualsiasi macchina configurata per l'automazione del nodo di controllo Ansible. Questa guida presuppone che i tuoi host Ansible siano server remoti Ubuntu 20.04 LTS . Assicurati che ogni host Ansible abbia:
- Una coppia di chiavi SSH associata a questo utente.
- Questo utente può essere root o un utente normale con privilegi sudo.
Installare 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 Ansible. Per questo utilizzeremo i repository Ubuntu predefiniti.
Innanzitutto, aggiorna l'indice dei pacchetti del tuo sistema con:
sudo apt update
A seguito di questo aggiornamento, è possibile installare il software Ansible con:
sudo apt install ansible
Premere Y
quando richiesto per confermare l'installazione.
Il tuo nodo di controllo Ansible ora ha tutto il software necessario per amministrare i tuoi host. Successivamente, esamineremo come impostare un file di inventario, in modo che Ansible possa comunicare con i tuoi nodi gestiti.
Configurare il file di inventario
Il file di inventario (Inventory File) contiene informazioni sugli host che gestirai con Ansible. È possibile includere ovunque da una a diverse centinaia di server nel 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 essere utilizzate all'interno di playbook e 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 Ansible predefinito, apri il file /etc/ansible/hosts
utilizzando l'editor di testo preferito, sul nodo di controllo Ansible:
sudo nano /etc/ansible/hosts
Nota: sebbene Ansible in genere crei un file di inventario predefinito all'indirizzoetc/ansible/hosts
, sei libero di creare file di inventario in qualsiasi posizione che si adatti meglio alle tue esigenze. In questo caso, dovrai fornire il percorso al tuo file di inventario personalizzato con il parametr-i
o quando esegui comandi e playbook Ansible. L'uso di file di inventario per progetto è una buona pratica per ridurre al minimo il rischio di eseguire un playbook sul gruppo di server sbagliato.
Il file di inventario predefinito fornito dall'installazione Ansible contiene una serie di esempi che è possibile utilizzare come riferimenti per l'impostazione dell'inventario. L'esempio seguente definisce un gruppo denominato [servers]
con tre server diversi, ciascuno identificato da un alias personalizzato: server1, server2 e server3. Assicurati di sostituire gli IP evidenziati con gli indirizzi IP dei tuoi host Ansible.
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 /usr/bin/python3
Python 3 anziché /usr/bin/python
(Python 2.7), che non è presente nelle recenti versioni di Ubuntu.
Al termine, salvare e chiudere il file premendo CTRL+X
quindi Y
e ENTER
per confermare le modifiche.
Quando vuoi controllare il tuo inventario, puoi eseguire:
ansible-inventory --list -y
Vedrai un output simile a questo, ma contenente la tua infrastruttura server come definita nel tuo file di inventario:
all:
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 tuo file di inventario, hai tutto il necessario per testare la connessione ai tuoi host Ansible.
Test della connessione
Dopo aver impostato il file di inventario per includere i server, è tempo di verificare se Ansible è in grado di connettersi a questi server ed eseguire comandi tramite SSH.
Per questa guida, utilizzeremo l'account root di Ubuntu perché in genere è l'unico account disponibile per impostazione predefinita sui server appena creati. Se i tuoi host Ansible hanno già creato un normale utente sudo, sei invece invitato a utilizzare quell'account.
È possibile utilizzare l'argomento -u
per specificare l'utente del sistema remoto. Se non fornito, Ansible tenterà di connettersi come utente di sistema corrente sul nodo di controllo.
Dal computer locale o dal nodo di controllo Ansible, eseguire:
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 dall'inventario predefinito, connettendosi come root. Il modulo ping
testerà:
- se gli host sono accessibili;
- se si dispone di credenziali SSH valide;
- se gli host sono in grado di eseguire i moduli Ansible usando Python.
Dovresti ottenere un output simile a questo:
server1 | 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, digitare yes
e quindi premere ENTER
per confermare.
Quando ricevi una "pong"
risposta da un host, significa che sei pronto per eseguire i comandi e i playbook Ansible su quel server.
Eseguire i comandi Ad-Hoc (facoltativo)
Dopo aver verificato che il tuo nodo di controllo Ansible è in grado di comunicare con i tuoi host, puoi iniziare a eseguire comandi e playbook ad hoc sui tuoi server.
Qualsiasi comando che normalmente eseguiresti su un server remoto su 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
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 df -h
può essere sostituito da qualsiasi comando desideri.
Puoi anche eseguire i moduli Ansible tramite comandi ad-hoc, analogamente a quanto fatto in precedenza con il modulo ping
per testare la connessione. Ad esempio, ecco come possiamo utilizzare il modulo apt
per installare la versione più recente di vim
su tutti i server nel tuo inventario:
ansible all -m apt -a "name=vim state=latest" -u root
Puoi anche scegliere come target singoli host, nonché gruppi e sottogruppi, quando esegui i comandi Ansible. Ad esempio, per utilizzare il comando uptime
di ogni host nel gruppo servers
esegui questo comando:
ansible servers -a "uptime" -u root
Possiamo specificare più host separandoli con due punti:
ansible server1:server2 -m ping -u root
Conclusione
In questa guida, hai installato Ansible e impostato un file di inventario per eseguire comandi ad-hoc da un nodo di controllo Ansible.
Dopo aver verificato di essere in grado di connettersi e controllare la propria infrastruttura da una macchina del controller Ansible centrale, è possibile eseguire qualsiasi comando o playbook desiderato su tali host.