Quando pensi a uno strumento di gestione della configurazione, quello che ti viene in mente è Puppet. Puppet è uno strumento di gestione della configurazione open source, che ti aiuta a distribuire e gestire le configurazioni di centinaia di sistemi client dalla posizione centrale.
Puppet semplifica la vita dell'amministratore di sistema riducendo il tempo impiegato per attività ripetitive e consente loro di lavorare su altri lavori produttivi, inoltre garantisce che tutta la configurazione sia coerente in tutta l'infrastruttura.
Puppet è disponibile per sistemi di computer basati su Linux, Mac, BSD, Solaris e Windows, rilasciato con licenza Apache, scritto in linguaggio "Ruby".
Questa guida ti aiuta a installare Puppet Server su Ubuntu 18.04 / Ubuntu 16.04 e Debian 9.
Architettura
Agente/Master
In questa architettura, uno o più server eseguono l'applicazione puppet master e l'applicazione puppet agent viene eseguita su nodi gestiti (server client), in genere come servizio in background.
L'agente dei burattini invierà i fatti al burattinaio e richiederà un catalogo nell'intervallo particolare. Il burattinaio compilerà e restituirà il catalogo di quel particolare nodo, utilizzando le fonti di informazioni a cui ha accesso.
Architettura autonoma
In questa architettura, il nodo client esegue l'applicazione puppet apply, di solito come cron job.
Ambiente
Qui configureremo un pupazzo in architettura master/agent e utilizzeremo due sistemi, come indicato di seguito.
Maestro burattinaio
Nome host: server.itzgeek.local
Indirizzo IP: 192.168.1.10
Cliente fantoccio
Nome host: client.itzgeek.local
Indirizzo IP: 192.168.1.20
Prerequisiti
Installa NTP
L'ora deve essere impostata con precisione su un burattinaio poiché fungerà da autorità di certificazione per firmare i certificati provenienti dai nodi client. Useremo NTP per questo scopo.
Installa il pacchetto NTP ed esegui la sincronizzazione dell'ora con i server NTP a monte.
sudo apt update sudo apt install -y ntp ntpdate sudo ntpdate -u 0.ubuntu.pool.ntp.org
Fuso orario
Assicurati che tutti i nodi siano nello stesso fuso orario usando.
date
Risultato:
Tue Sep 4 22:28:34 EDT 2018
In caso di discrepanze, modificarle di conseguenza. Elenca i fusi orari disponibili.
timedatectl list-timezones
Imposta il fuso orario usando il seguente comando.
sudo timedatectl set-timezone America/New_York
DNS
L'agente dei pupazzi utilizza il nome host per comunicare con il server dei pupazzi. Quindi, assicurati che il nodo agente possa risolvere il nome host del Puppet Server. O imposta /etc/hosts
file o server DNS.
File/etc/hosts:
sudo nano /etc/hosts
Aggiungi una voce host simile alla riga seguente.
192.168.1.10 server.itzgeek.local server
Imposta repository PuppetLabs
Per installare il puppet master/agent, avremmo bisogno di impostare un repository di puppet su tutti i nodi.
### Ubuntu 18.04 ### wget https://apt.puppetlabs.com/puppet6-release-bionic.deb sudo dpkg -i puppet6-release-bionic.deb sudo apt update ### Ubuntu 16.04 ### wget https://apt.puppetlabs.com/puppet6-release-xenial.deb sudo dpkg -i puppet6-release-xenial.deb sudo apt update ### Debian 9 ### wget https://apt.puppetlabs.com/puppet6-release-stretch.deb sudo dpkg -i puppet6-release-stretch.deb sudo apt update
In Ubuntu 18.04, abilita il repository dell'universo, che contiene i pacchetti necessari per Puppet Server.
Installa il server dei pupazzi
Puppet Server è il software server che viene eseguito sul nodo master puppet. Installa il server Puppet utilizzando il comando seguente.
sudo apt install -y puppetserver
Il server dei pupazzi è ora installato, non avviare ancora il servizio del server dei pupazzi.
Configura il server dei pupazzi
Assegnazione memoria (opzionale)
Per impostazione predefinita, Puppet Server JVM è configurato per utilizzare 2 GB di RAM. Puoi sempre personalizzare l'utilizzo della memoria in base alla quantità di memoria del tuo nodo master; assicurati che sia sufficiente per gestire tutti i nodi ad esso collegati.
Per modificare il valore dell'allocazione di memoria, modificare il file sottostante.
sudo nano /etc/default/puppetserver
Modifica il valore mostrato come di seguito.
Da:
JAVA_ARGS="-Xms2g -Xmx2g -Djruby.logger.class=com.puppetlabs.jruby_utils.jruby.Slf4jLogger"
A:
Per 512 MB, utilizza le impostazioni seguenti.
JAVA_ARGS="-Xms512m -Xmx512m -Djruby.logger.class=com.puppetlabs.jruby_utils.jruby.Slf4jLogger"
Configurazione pupazzi
Configurazioni semplici
Puppet Server non richiede alcuna configurazione e puoi semplicemente avviare il servizio puppetserver. Utilizzerà le impostazioni predefinite.
Ad esempio:dns_alt_names (pupazzo,
Configurazioni avanzate (facoltative)
Qui, modificherò le impostazioni del server dei pupazzi per le nostre esigenze.
sudo nano /etc/puppetlabs/puppet/puppet.conf
Posiziona le righe sottostanti. Modificalo in base al tuo ambiente.
[master] dns_alt_names = server.itzgeek.local,server [main] certname = server.itzgeek.local server = server.itzgeek.local environment = production runinterval = 15m
Avvia il server dei pupazzi
Genera una CA di firma radice e intermedia per Puppet Server.
sudo /opt/puppetlabs/bin/puppetserver ca setup
Risultato:
Generation succeeded. Find your files in /etc/puppetlabs/puppet/ssl/ca
Avvia e abilita il server dei pupazzi.
sudo systemctl start puppetserver sudo systemctl enable puppetserver
Installa l'agente pupazzo
Configura il repository Puppet sul tuo nodo agente come mostrato in precedenza, quindi installa l'agente puppet utilizzando il comando seguente.
sudo apt install -y puppet-agent
L'agente Puppet utilizza anche alcune delle impostazioni predefinite per connettersi al nodo master. Tuttavia, dobbiamo modificare il file di configurazione del pupazzo e impostare le informazioni sul master del pupazzo.
sudo nano /etc/puppetlabs/puppet/puppet.confImposta server valore secondo il tuo nome host principale e nomecert come nome host del tuo cliente. Nel mio caso, il server è server.itzgeek.local e certname è client.itzgeek.local.
[main] certname = client.itzgeek.local server = server.itzgeek.local environment = production runinterval = 15m
Puoi modificare il valore di runinterval dipende dal requisito. Questo controlla per quanto tempo un agente deve attendere tra le due richieste di catalogo.
È possibile impostare il valore in secondi (30 secondi o 30) o in minuti (30 minuti) o in ore (1 ora).Avvia l'agente pupazzo sul nodo e fallo partire automaticamente all'avvio del sistema.
sudo /opt/puppetlabs/bin/puppet resource service puppet ensure=running enable=true
Otterresti un output come di seguito.
Notice: /Service[puppet]/ensure: ensure changed 'stopped' to 'running' service { 'puppet': ensure => 'running', enable => 'true', }
Firma certificato del nodo agente sul server principale
In una distribuzione agente/master, un amministratore deve approvare una richiesta di certificato per ciascun nodo agente prima che quel nodo possa recuperare le configurazioni. I nodi agente richiederanno i certificati per la prima volta che tenteranno di essere eseguiti.
Accedi al server del puppet master ed esegui il comando seguente per visualizzare le richieste in sospeso.
sudo /opt/puppetlabs/bin/puppetserver ca list
Risultato:
Requested Certificates: client.itzgeek.local (SHA256) 07:B1:57:5B:DE:AF:9F:4A:DF:4A:D1:CD:C4:2A:F9:9F:D9:76:CD:C5:F1:60:09:9C:B4:BA:76:D6:7B:3C:6F:0D
Esegui il comando seguente per firmare una richiesta.
sudo /opt/puppetlabs/bin/puppetserver ca sign --certname client.itzgeek.local
Risultato:
Successfully signed certificate request for client.itzgeek.local
Per firmare tutte le richieste di firma del certificato in un unico comando.
sudo /opt/puppetlabs/bin/puppetserver ca sign --all
In alcuni casi, potrebbe essere necessario revocare il certificato di un particolare nodo per rileggerlo. Sostituisci
sudo /opt/puppetlabs/bin/puppetserver ca revoke --certname <AGENT_NAME>
Elenca tutte le richieste firmate e non firmate. Dovresti essere eseguito sul server principale.
sudo /opt/puppetlabs/bin/puppetserver ca list --all
Risultato:
Signed Certificates: server.itzgeek.local (SHA256) E5:A4:93:45:EF:82:3B:FF:6E:36:D2:9A:F0:75:15:67:94:33:06:2F:84:9F:D1:45:CE:C6:1C:86:D4:57:B8:25 alt names: ["DNS:server.itzgeek.local", "DNS:server", "DNS:server.itzgeek.local"] client.itzgeek.local (SHA256) AB:3B:F0:D0:62:69:50:DD:50:45:CE:AD:A5:2C:4F:9E:EB:19:D6:C6:9C:34:A3:C5:CD:84:8F:BA:50:04:4A:D0
Verifica agente pupazzo
Una volta che il Puppet Master ha firmato il certificato client, esegui il seguente comando sul computer client per testarlo.
sudo /opt/puppetlabs/bin/puppet agent --test
Risultato:
Info: Using configured environment 'production' Info: Retrieving pluginfacts Info: Retrieving plugin Info: Retrieving locales Info: Caching catalog for client.itzgeek.local Info: Applying configuration version '1558888335' Notice: Applied catalog in 0.02 seconds
Crea manifest
Manifest è un file di dati che contiene le configurazioni del client, scritte nel linguaggio dichiarativo di Puppet o in un Ruby DSL. Questa sezione tratta il manifest di base per creare una directory e un file sul computer client.
Il file manifest principale del pupazzo si trova in /etc/puppetlabs/code/environments/production/manifests directory. Crea un nuovo file manifest.
sudo nano /etc/puppetlabs/code/environments/production/manifests/site.pp
Ora aggiungi le seguenti righe al manifest per creare una directory sul nodo client.
node 'client.itzgeek.local' { # Applies only to mentioned node. If nothing mentioned, applies to all. file { '/tmp/puppetdir': # Resource type file ensure => 'directory', # Create as a diectory owner => 'root', # Ownership group => 'root', # Group Name mode => '0755', # Directory permissions } }Se la variabile node non è impostata, questo manifest si applicherà a tutti i nodi connessi al burattinaio.
Ora, esegui il seguente comando sul nodo client per recuperare le configurazioni.
sudo /opt/puppetlabs/bin/puppet agent --test
Uscita:
Info: Using configured environment 'production' Info: Retrieving pluginfacts Info: Retrieving plugin Info: Retrieving locales Info: Caching catalog for client.itzgeek.local Info: Applying configuration version '1558888460' Notice: /Stage[main]/Main/Node[client.itzgeek.local]/File[/tmp/puppetdir]/ensure: created Notice: Applied catalog in 0.16 seconds
Verifica che la directory sia stata creata sul nodo client.
ls -ld /tmp/puppetdir/
Risultato:
drwxr-xr-x 2 root root 4096 May 26 22:03 /tmp/puppetdir/
Scriviamo un manifest per creare un file con contenuto al suo interno.
node 'client.itzgeek.local' { # Applies only to mentioned node. If nothing mentioned, applies to all. file { '/tmp/puppetfile': # Resource type file ensure => 'present', # Make sure it exists owner => 'root', # Ownership group => 'root', # Group Name mode => '0644', # File permissions content => "This File is created by Puppet Server" # Content of the file } }
Puoi andare sulla macchina client e recuperare il catalogo come mostrato nell'esempio precedente o attendere 15 minuti per applicare automaticamente il catalogo.
Conclusione
Spero che questo post ti abbia aiutato a installare Puppet Server su Ubuntu 18.04 / Ubuntu 16.04 e Debian 9. Condividi il tuo feedback nella sezione commenti.