Ansible è uno strumento di gestione della configurazione e del provisioning software open source per sistemi operativi simili a Unix e Microsoft Windows.
A differenza di Puppet, Chef e CFEngine, il software del server è installato su una macchina e le macchine client sono gestite tramite il software dell'agente. In Ansible, i nodi sono gestiti controllando il nodo (server Ansible) su SSH, quindi non ci sarà alcun software agente in esecuzione su macchine con nodo gestito (server client).
Ansible può eseguire il deployment, la gestione della configurazione del software su centinaia di nodi utilizzando SSH, l'intera operazione viene normalmente eseguita da un unico comando ansible. Ma, in alcuni casi, potrebbe essere necessario eseguire più comandi per la distribuzione.
Questa guida ti aiuterà a installare Ansible su CentOS 8 / RHEL 8.
Ambiente
Nome host | Indirizzo IP | OS | Scopo |
---|---|---|---|
server.itzgeek.local | 192.168.0.10 | CentOS 8 / RHEL 8 | Macchina di controllo |
node1.itzgeek.local | 192.168.0.20 | CentOS 8 | Nodo gestito 1 |
node2.itzgeek.local | 192.168.0.30 | CentOS 7 | Nodo gestito 2 |
Installa Ansible su CentOS 8 / RHEL 8
Installazione del nodo di controllo
Per installare Ansible, dovremo abilitare il repository EPEL e Ansible rispettivamente su CentOS 8 e RHEL 8.
### CentOS 8 ### yum install -y epel-release ### RHEL 8 ### subscription-manager repos --enable ansible-2.9-for-rhel-8-x86_64-rpms
Installa Ansible con il comando yum.
yum install -y ansible
Una volta installato Ansible, verifica la versione di Ansible eseguendo il comando seguente.
ansible --version
Risultato:
ansible 2.8.5 config file = /etc/ansible/ansible.cfg configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules'] ansible python module location = /usr/lib/python3.6/site-packages/ansible executable location = /usr/bin/ansible python version = 3.6.8 (default, May 21 2019, 23:51:36) [GCC 8.2.1 20180905 (Red Hat 8.2.1-3)]
Imposta nodo gestito
Le macchine client devono avere almeno Python 2 (versione 2.6 o successive) o Python 3 (versione 3.5 o successive).
### CentOS 8 / RHEL 8 ### yum install -y platform-python ### CentOS 7 / RHEL 7 ### yum install -y python
SELinux
Se hai SELinux abilitato sui nodi gestiti, dovrai installare il pacchetto seguente sui nodi prima di utilizzare qualsiasi funzione relativa a copia/file/modello in Ansible.
### CentOS 8 / RHEL 8 ### yum install -y python3-libselinux ### CentOS 7 / RHEL 7 ### yum install -y libselinux-python
Autenticazione SSH
Come detto in precedenza, Ansible utilizza OpenSSH nativo per la comunicazione remota. Ansible supporta l'autenticazione senza password e password per eseguire comandi sui nodi gestiti.
Qui, per questa demo, ho utilizzato la comunicazione senza password tra il nodo di controllo ansible (root) e i nodi gestiti (root). Tuttavia, ti mostrerò come utilizzare Ansible con l'autenticazione della password.
Autenticazione con chiave SSH (autenticazione senza password)
Quando si tratta di autenticazione ssh, per impostazione predefinita, utilizza le chiavi ssh (autenticazione senza password) per autenticarsi con la macchina remota.
LEGGI :Come configurare l'accesso senza password SSH su CentOS 8 / RHEL 8
LEGGI :Come configurare l'accesso senza password SSH su CentOS 7 / RHEL 7
Come saprai, il provisioning del software o le modifiche alla configurazione eseguite sui nodi richiedono privilegi di root o privilegi equivalenti di root (sudo). Quindi, per semplicità, imposta la comunicazione senza password tra l'utente root di Ansible Server e l'utente root dei nodi.Autenticazione password
L'autenticazione con password può essere utilizzata anche ove necessario fornendo l'opzione –ask-pass. Questa opzione richiede sshpass alla macchina di controllo.
yum install -y sshpass
Crea inventario Ansible
Il file /etc/ansible/hosts contiene l'inventario degli host remoti a cui Ansible si connetterà tramite SSH/Winrm (Windows) per gestirli. In questo momento vedremo solo come gestire le configurazioni del nodo Linux remoto.
Modifica il file dell'inventario.
vi /etc/ansible/hosts
Inserisci uno o più indirizzi IP o nomi host del sistema remoto. Puoi raggruppare i server con [GROUP_NAME]. Qui ho aggiunto entrambe le macchine al gruppo dei server demo.
I gruppi vengono utilizzati per classificare i sistemi per un uso particolare. Se non specifichi alcun gruppo, agiranno come host non raggruppati.
[demoservers] 192.168.0.20 192.168.0.30
Verifica Ansible Connectivity
Verifichiamo la connettività dei nodi utilizzando ping (modulo) dalla macchina di controllo. Per farlo, utilizzeremo il comando ansible con le opzioni -m (modulo di caricamento) e all (tutti i server) o demoserver (un gruppo di nodi).
Questo modulo ping viene spesso utilizzato per risolvere i problemi di connettività di Ansible.# All servers - If you use passwordless authentication. Current logged in user on Ansible server and remote node's user are same ansible -m ping all # All servers - If you use passwordless authentication and the remote user is different from logged in user on Ansible server ansible -m ping -u raj all # All servers - If you use password authentication and the remote user is different from logged in user on Ansible server ansible -m ping all -u raj --ask-pass # Only demoservers group - If you use passwordless authentication. Current logged in user on Ansible server and remote node's user are same ansible -m ping demoservers
Risultato:
192.168.1.20 | SUCCESS => { "changed": false, "ping": "pong" } 192.168.1.30 | SUCCESS => { "changed": false, "ping": "pong" }
Nell'esempio sopra, abbiamo visto come utilizzare il modulo ping con il comando ansible per eseguire il ping di tutti o un gruppo di host remoti con autenticazione password e password.
Allo stesso modo, possiamo utilizzare vari moduli con comando ansible. Puoi trovare i moduli disponibili qui.
Esegui comando sui nodi
Questa volta, useremo il modulo di comando con il comando ansible per ottenere informazioni sulla macchina remota.
I comandi seguenti vengono scritti presupponendo che si disponga di una comunicazione senza password tra il nodo di controllo e i nodi gestiti. Sto usando un gruppo di server demo per eseguire i comandi.Controlla il nome host
Nel nostro primo esempio, eseguiremo il comando hostname con il modulo di comando per ottenere il nome hostname dei nodi remoti in una volta sola.
ansible -m command -a "hostname" demoservers
Risultato:
192.168.1.30 | SUCCESS | rc=0 >> node2.itzgeek.local 192.168.1.20 | SUCCESS | rc=0 >> node1.itzgeek.local
Controlla il tempo di attività
Per controllare il tempo di attività dei nodi.
ansible -m command -a "uptime" demoservers
Risultato:
192.168.1.30 | SUCCESS | rc=0 >> 16:36:45 up 56 min, 3 users, load average: 0.00, 0.00, 0.00 192.168.1.20 | SUCCESS | rc=0 >> 16:36:45 up 1:09, 2 users, load average: 0.05, 0.04, 0.05
Leggi file remoti
Puoi anche visualizzare il contenuto di un particolare file.
ansible -m command -a "cat /etc/hosts" demoservers
Risultato:
192.168.1.30 | SUCCESS | rc=0 >> # This file is managed by man:systemd-resolved(8). Do not edit. # # This is a dynamic resolv.conf file for connecting local clients to the # internal DNS stub resolver of systemd-resolved. This file lists all # configured search domains. # # Run "systemd-resolve --status" to see details about the uplink DNS servers # currently in use. # # Third party programs must not access this file directly, but only through the # symlink at /etc/resolv.conf. To manage man:resolv.conf(5) in a different way, # replace this symlink by a static file or a different symlink. # # See man:systemd-resolved.service(8) for details about the supported modes of # operation for /etc/resolv.conf. nameserver 127.0.0.53 192.168.1.20 | SUCCESS | rc=0 >> # Generated by NetworkManager search itzgeek.local nameserver 8.8.8.8 nameserver 192.168.1.1
Reindirizza l'output del file
Puoi anche salvare l'output (sul server Ansible) in qualsiasi file utilizzando il reindirizzamento.
ansible -m command -a "cat /etc/resolv.conf" demoservers > /tmp/ouput_file cat /tmp/ouput_file
Apporta modifiche alla configurazione su Node
Possiamo usare il modulo lineinfile per modificare i file su nodi remoti. Ad esempio, per aggiungere ulteriori server dei nomi, possiamo utilizzare il comando seguente.
ansible -m lineinfile -a "path=/etc/resolv.conf line=nameserver 8.8.4.4" demoservers
Puoi convalidare le modifiche utilizzando il comando seguente.
ansible -m command -a "cat /etc/resolv.conf | grep -i nameserver" demoservers
Conclusione
È tutto. Ora hai installato con successo Ansible su CentOS 8 / RHEL 8. Puoi procedere con la creazione di playbook Ansible per automatizzare le tue attività.