Ricerca nel sito web

Come installare e configurare Ansible su Debian 11


introduzione

I sistemi di gestione della configurazione sono progettati per semplificare il processo di controllo di un gran numero di server, per amministratori e team operativi. Consentono di controllare molti sistemi diversi in modo automatizzato da una postazione centrale.

Sebbene siano disponibili molti popolari strumenti di gestione della configurazione per i sistemi Linux, come 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 YAML file per definire i dettagli di provisioning.

In questa guida, discuteremo come installare Ansible su un server Debian 11 e analizzeremo alcuni fondamenti su come utilizzare questo software. Per una panoramica di più alto livello su Ansible come strumento di gestione della configurazione, fare riferimento a 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 useremo 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 presuppone che il tuo nodo di controllo sia un sistema Debian 11. Assicurati che il nodo di controllo abbia:
    • Un utente non root con privilegi sudo. Per configurarlo, puoi seguire i passaggi 2 e 3 della nostra Guida alla configurazione iniziale del server per Debian 11. Tuttavia, tieni presente che se stai utilizzando un server remoto come nodo Ansible Control, dovresti seguire ogni passaggio di questa guida. In questo modo configurerai un firewall sul server con ufw e abiliterai l'accesso esterno al tuo profilo utente non root, entrambi i quali aiuteranno a mantenere sicuro il server remoto.
    • Una coppia di chiavi SSH associata a questo utente. Per configurarlo, puoi seguire il passaggio 1 della nostra guida su Come configurare le chiavi SSH su Debian 11.

    Uno o più host Ansible: un host Ansible è qualsiasi macchina che il tuo nodo di controllo Ansible è configurato per automatizzare. Questa guida presuppone che i tuoi host Ansible siano server Debian 11 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 root o un utente normale con privilegi sudo. Per configurarlo, puoi seguire il passaggio 2 di Come configurare le chiavi SSH su Debian 11.

    Passaggio 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 Ansible.

    Dal tuo nodo di controllo, esegui il seguente comando per includere il PPA (archivio dei pacchetti personali) del progetto ufficiale nell'elenco delle fonti del tuo sistema:

    1. sudo apt-add-repository ppa:ansible/ansible

    Premi INVIO quando ti viene chiesto di accettare l'aggiunta PPA.

    Successivamente, aggiorna l'indice dei pacchetti del tuo sistema in modo che sia a conoscenza dei pacchetti disponibili nel PPA appena incluso:

    1. sudo apt update

    Dopo questo aggiornamento, puoi installare il software Ansible con:

    1. sudo apt install ansible

    Il tuo nodo di controllo Ansible ora dispone di tutto il software necessario per amministrare i tuoi host. Successivamente, esamineremo come aggiungere i tuoi host al file di inventario del nodo di controllo in modo che possa controllarli.

    Passaggio 2: impostazione del file di inventario

    Il file di inventario contiene informazioni sugli host che gestirai con Ansible. È possibile includere ovunque da uno 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, in modo da poter 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 poco.

    Per modificare i contenuti del tuo inventario Ansible predefinito, apri il file /etc/ansible/hosts utilizzando il tuo editor di testo preferito, sul tuo nodo di controllo Ansible:

    1. sudo nano /etc/ansible/hosts

    Nota: sebbene Ansible in genere crei un file di inventario predefinito in etc/ansible/hosts, sei libero di creare file di inventario in qualsiasi posizione più adatta alle tue esigenze. In questo caso, dovrai fornire il percorso del tuo file di inventario personalizzato con il parametro -i quando esegui i comandi e i playbook di Ansible. L'utilizzo di file di inventario per progetto è una buona pratica per ridurre al minimo il rischio di eseguire un playbook nel gruppo di server sbagliato.

    Il file di inventario predefinito fornito dall'installazione di Ansible contiene una serie di esempi che puoi utilizzare come riferimento per configurare il tuo inventario. L'esempio seguente definisce un gruppo denominato [servers] contenente tre diversi server, ciascuno identificato da un alias personalizzato: server1, server2 e server3. Assicurati di sostituire gli IP evidenziati con gli indirizzi IP dei tuoi host 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 su versioni recenti di Debian.

    Al termine, salva e chiudi il file premendo CTRL+X quindi Y e INVIO per confermare le modifiche.

    Ogni volta che vuoi controllare il tuo inventario, puoi eseguire:

    1. ansible-inventory --list -y

    Vedrai un output simile a questo, ma contenente la tua infrastruttura server come definita nel tuo file di inventario:

    Output
    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 ciò che ti serve per testare la connessione ai tuoi host Ansible.

    Passaggio 3: verifica della connessione

    Dopo aver configurato il file di inventario per includere i tuoi server, è il momento di verificare se Ansible è in grado di connettersi a questi server ed eseguire comandi tramite SSH.

    Per questa guida, utilizzeremo l'account root di Debian 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 incoraggiato a utilizzare quell'account.

    Puoi usare l'argomento -u per specificare l'utente del sistema remoto. Se non fornito, Ansible proverà a connettersi come utente di sistema corrente sul nodo di controllo.

    Dal computer locale o dal nodo di controllo Ansible, esegui:

    1. 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 verificherà:

    • se gli host sono accessibili;
    • se disponi di credenziali SSH valide;
    • se gli host sono in grado di eseguire moduli Ansible utilizzando Python.

    Dovresti ottenere un output simile a questo:

    Output
    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, digita yes e poi premi INVIO per confermare.

    Quando ricevi una risposta pong da un host, significa che sei pronto per eseguire comandi e playbook Ansible su quel server.

    Nota: se non riesci a ottenere una risposta positiva dai tuoi server, consulta la nostra guida Ansible Cheat Sheet per ulteriori informazioni su come eseguire i comandi Ansible con diverse opzioni di connessione.

    Passaggio 4: esecuzione di comandi ad hoc (facoltativo)

    Dopo aver confermato 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 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:

    1. 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 da qualsiasi comando desideri.

    Puoi anche eseguire moduli Ansible tramite comandi ad-hoc, in modo simile a quanto abbiamo fatto prima con il modulo ping per testare la connessione. Ad esempio, ecco come possiamo usare il modulo apt per installare l'ultima versione di vim su tutti i server nel tuo inventario:

    1. 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, questo è il modo in cui dovresti controllare il uptime di ogni host nel gruppo servers:

    1. ansible servers -a "uptime" -u root

    Possiamo specificare più host separandoli con i due punti:

    1. ansible server1:server2 -m ping -u root

    Per ulteriori informazioni su come utilizzare Ansible, incluso come eseguire playbook per automatizzare la configurazione del server, puoi consultare la nostra Guida di riferimento Ansible.

    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 confermato di essere in grado di connettere e controllare la tua infrastruttura da una macchina controller Ansible centrale, puoi eseguire qualsiasi comando o playbook che desideri su quegli host.

    Per ulteriori informazioni su come utilizzare Ansible, consulta la nostra Guida ai cheat sheet di Ansible.