Puppet, un noto strumento di gestione della configurazione per sistemi basati su Unix e Windows che consente a un amministratore di automatizzare facilmente le attività di amministrazione del sistema ripetitive e soggette a errori, che includono il provisioning, l'installazione di pacchetti/software, le configurazioni e la gestione dell'intera infrastruttura. Puppet è disponibile in due versioni:Puppet Enterprise e Puppet open source. Come suggerisce il nome, la versione enterprise è un prodotto commerciale e la versione open source può essere scaricata gratuitamente. Questo tutorial tratterà come installare e configurare Puppet open source (versione 4) su sistemi basati su CentOS e Ubuntu.
Prima di iniziare con la procedura di installazione, cerchiamo di capire l'architettura del pupazzo.
Architettura del burattinaio/agente
Puppet generalmente funziona in base al modello Client/Server, ovvero l'architettura basata su Master/Agent, ovvero Puppet Master e Puppet Agent. Il Puppet Master controlla le informazioni di configurazione e i nodi Puppet Agent gestiti richiedono i propri cataloghi di configurazione. Il diagramma seguente illustra il flusso di comunicazione tra i nodi master e agent.
Cos'è il catalogo?
Il catalogo è un documento che contiene informazioni sullo stato desiderato di un sistema. Il Puppet master compila il catalogo e gli agenti Puppet lo applicano.
Ambiente di installazione dei pupazzi
In questo tutorial utilizzerò due nodi:puppetmaster.test.in (Puppet Master) e puppet.test.in (Puppet Agent) (sono macchine virtuali in esecuzione su OpenStack)
Come installare e configurare Puppet 4?
Passaggio 1: Il primo passaggio consiste nel verificare la visibilità della rete tra il nodo master e quello agente. Dovrai assicurarti che questi domini vengano risolti tramite DNS o dal file hosts.
Nel nodo Puppet Master:
# ping puppetagent PING puppetagent.test.in (10.180.141.126) 56(84) bytes of data. 64 bytes from puppetagent.test.in (10.180.141.126): icmp_seq=1 ttl=64 time=0.347 ms --- puppetagent.test.in ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 0.347/0.347/0.347/0.000 ms
Nel nodo dell'agente pupazzo:
# ping puppetmaster PING puppetmaster.test.in (10.180.141.125) 56(84) bytes of data. 64 bytes from puppetmaster.test.in (10.180.141.125): icmp_seq=1 ttl=64 time=0.711 ms 64 bytes from puppetmaster.test.in (10.180.141.125): icmp_seq=2 ttl=64 time=0.316 ms --- puppetmaster.test.in ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1000ms rtt min/avg/max/mdev = 0.316/0.513/0.711/0.198 ms
Passaggio 2: Installa NTP
Il nodo Puppet Master fungerà da C certificato A uthority (CA) ed emettere certificati per i nodi agente. Significa che il nodo Master deve sincronizzarsi con l'ora corretta per evitare problemi durante l'emissione dei certificati ai nodi dell'agente. Quindi, devi installare NTP e sincronizzarlo con il time server di tua scelta.
Controlla i fusi orari disponibili nel nodo principale:
# timedatectl list-timezones
Imposta il fuso orario regionale corretto:
# timedatectl set-timezone Asia/Kolkata
Installa NTP:
# yum install ntp
Sincronizza con il time server di tua scelta:
# ntpdate pool.ntp.org
Apri ntp.conf e aggiungi i time server di tua scelta.
# vim /etc/ntp.conf
Salva ed esci.
Avvia e abilita il servizio NTP:
# systemctl restart ntpd # systemctl enable ntpd
Nota :puoi anche configurare NTP sui nodi agente. Per farlo, segui il passaggio 2 anche sui nodi Puppet Agent.
Installa Puppet Server (sul nodo Master)
Il server Puppet è un programma che viene eseguito sul nodo master Puppet e, come illustrato nel diagramma dell'architettura, questo servizio creerà un catalogo e invierà le configurazioni ai nodi dell'agente Puppet.
Passaggio 1: Per installare i servizi Puppet, è necessario abilitare il repository di raccolta Puppet o rilasciare i pacchetti. Per i sistemi operativi basati su Yum, puoi trovare i pacchetti su yum.puppetlabs.com e per i sistemi basati su Apt su apt.puppetlabs.com .
Su CentOS, utilizzerò il repository di puppet basato sui pacchetti rpm.
# rpm -ivh https://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm puppetlabs-release-pc1-1.0.0-2.el################################# [100%]
Su Ubuntu:
# wget https://apt.puppetlabs.com/puppetlabs-release-pc1-xenial.deb
# dpkg -i puppetlabs-release-pc1-xenial.deb Selecting previously unselected package puppetlabs-release-pc1. (Reading database ... 205725 files and directories currently installed.) Preparing to unpack puppetlabs-release-pc1-xenial.deb ... Unpacking puppetlabs-release-pc1 (1.0.0-2xenial) ... Setting up puppetlabs-release-pc1 (1.0.0-2xenial) ...
# apt-get update
Installa pacchetto server Puppet:
Su CentOS:
# yum -y install puppetserver
Su Ubuntu:
# apt-get install puppetserver
Avvia il server dei pupazzi:
# systemctl start puppetserver
(o)
# service puppetserver start
Abilita l'avvio del server puppet durante l'avvio del sistema
# systemctl enable puppetserver
(o)
# chkconfig puppetserver on
Installazione di Puppet Agent (su nodi Agent)
Installeremo il servizio Puppet Agent sui nodi dell'agente e questi sono i nodi che ricevono il catalogo dal nodo master Puppet e li applicano.
Abilita repository di raccolta Puppet:
# rpm -ivh https://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm
Su Ubuntu:
# wget https://apt.puppetlabs.com/puppetlabs-release-pc1-xenial.deb
# dpkg -i puppetlabs-release-pc1-xenial.deb Selecting previously unselected package puppetlabs-release-pc1. (Reading database ... 205725 files and directories currently installed.) Preparing to unpack puppetlabs-release-pc1-xenial.deb ... Unpacking puppetlabs-release-pc1 (1.0.0-2xenial) ... Setting up puppetlabs-release-pc1 (1.0.0-2xenial) ...
$ sudo apt-get update
Installa agente pupazzo:
Su CentOS:
# yum -y install puppet-agent
Su Ubuntu:
# apt-get install puppet-agent
Avvia l'agente dei pupazzi:
Per impostazione predefinita, l'agente farà riferimento al nodo master Puppet come "puppet". Inoltre, il comando seguente mostrerà il nome host che l'agente utilizzerà per connettersi al Master.
# /opt/puppetlabs/puppet/bin/puppet agent --configprint server puppet
# /opt/puppetlabs/bin/puppet resource service puppet ensure=running enable=true Notice: /Service[puppet]/ensure: ensure changed 'stopped' to 'running' service { 'puppet': ensure => 'running', enable => 'true', }
Nota :Cerca il server impostazione in puppet.conf per cambiare il nome host del burattinaio.
Nota :Per impostazione predefinita, Puppet verrà installato in /opt/puppetlabs cartella.
Richiedi il certificato per il nodo Agent all'autorità di certificazione
Il nodo master Puppet fungerà da autorità di certificazione, che firma il certificato dei nodi agente.
# /opt/puppetlabs/puppet/bin/puppet agent -t Info: Caching certificate for ca Info: csr_attributes file loading from /etc/puppetlabs/puppet/csr_attributes.yaml Info: Creating a new SSL certificate request for puppetagent.test.in Info: Certificate Request fingerprint (SHA256): BF:E9:8B:85:ED:61:B4:D5:61:2E:F2:C4:0B:0A:24:A3:D5:17:B5:E3:B4:54:53:4F:C7:39:7F:FE:49:1B:AF:4A Info: Caching certificate for ca Exiting; no certificate found and waitforcert is disabled
Nel nodo Puppet Master – Firma la richiesta di certificato dell'agente
Elenca le richieste di certificati correnti:
# /opt/puppetlabs/puppet/bin/puppet cert list "puppetagent.test.in" (SHA256) BF:E9:8B:85:ED:61:B4:D5:61:2E:F2:C4:0B:0A:24:A3:D5:17:B5:E3:B4:54:53:4F:C7:39:7F:FE:49:1B:AF:4A
Firma il certificato:
# /opt/puppetlabs/puppet/bin/puppet cert sign puppetagent.test.in Notice: Signed certificate request for puppetagent.test.in Notice: Removing file Puppet::SSL::CertificateRequest puppetagent.test.in at '/etc/puppetlabs/puppet/ssl/ca/requests/puppetagent.test.in.pem'
Visualizza tutte le richieste firmate:
# /opt/puppetlabs/puppet/bin/puppet cert list --all + "puppetagent.test.in" (SHA256) 0F:41:D0:67:78:BB:7B:48:F8:4B:10:10:C4:F9:FD:DD:46:19:34:4B:BE:4D:6F:4B:2F:45:57:86:33:C2:BC:45 + "puppetmaster.test.in" (SHA256) 4A:F3:F7:C0:81:7D:76:49:77:31:81:B1:70:50:AE:EE:F9:49:95:22:B0:24:0C:08:C3:5E:30:E6:29:75:28:07 (alt names: "DNS:puppet", "DNS:puppetmaster.test.in")
E hai finito! La tua prima infrastruttura di pupazzi è pronta.
Testiamo il burattino
Puppet utilizza uno strumento chiamato Facter per raccogliere informazioni (fatti) sugli agenti burattinai. Per impostazione predefinita, vengono raccolte le informazioni come il nome del sistema operativo, la versione, il nome host, l'indirizzo IP, le chiavi SSH ecc. Ma ti consente anche di aggiungere fatti personalizzati, di cui parlerò in un articolo separato.
In che modo i fatti sono utili?
Durante la creazione di un modello di configurazione, potresti voler recuperare automaticamente un fatto (ad esempio l'indirizzo IP di un nodo agente) e compilarlo nella posizione appropriata. Allo stesso modo, potresti voler leggere un nome host di un nodo agente e usarlo nel modello di configurazione.
Il comando seguente (eseguilo sul nodo Master) elencherà tutti i fatti raccolti di un nodo Agent.
# /opt/puppetlabs/puppet/bin/facter
Risultato di esempio:
::::::::::::::::::::::::::::::: partitions => { /dev/vda1 => { filesystem => "xfs", mount => "/", size => "39.99 GiB", size_bytes => 42943138304, uuid => "6c8f1327-a7c0-40a2-8bb3-89ea95a69d82" } } path => /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin processors => { count => 2, isa => "x86_64", models => [ "Intel Core Processor (Haswell, no TSX)", "Intel Core Processor (Haswell, no TSX)" ], physicalcount => 2 } :::::::::::::::::::::::::::::::::::::::::
Questo è tutto! Ora devi comprendere Manifest e moduli per utilizzare Puppet in modo efficace .