Installa Puppet Master e Agent su Ubuntu 20.04|18.04
Questa è una guida su come installare Puppet Master e Agent sul sistema Linux Ubuntu 20.04|18.04. Puppet è uno strumento di gestione della configurazione scritto in Ruby e C++ che ti aiuta ad automatizzare le configurazioni e le distribuzioni di applicazioni su centinaia o migliaia di sistemi. Il software è sotto licenza Apache.
Puppet funziona su ambienti Linux, Unix e Windows. Al momento della stesura di questo articolo, l'ultima versione di Puppet è la 7.2
Architettura server/client pupazzo
Puppet utilizza il modello Client/Server. Il server esegue tutta l'automazione delle attività sui sistemi su cui è installata un'applicazione client. Il lavoro dell'agente burattinaio è inviare fatti al burattinaio e richiedere un catalogo basato su un determinato livello di intervallo. Una volta ricevuto un catalogo, l'agente Puppet lo applica al nodo controllando ciascuna risorsa descritta dal catalogo. Apporta modifiche rilevanti per raggiungere lo stato desiderato.
Il lavoro del burattinaio è controllare le informazioni di configurazione. Ciascun nodo dell'agente gestito richiede il proprio catalogo di configurazione dal master.
Cos'è un catalogo in Puppet?
Un catalogo è un documento che descrive lo stato del sistema desiderato per un sistema specifico. Elenca tutte le risorse che devono essere gestite, nonché eventuali dipendenze tra tali risorse.
Puppet è in grado di configurare i sistemi finali in due fasi:
- Compila un catalogo.
- Applicare il catalogo.
Burattinaio – Comunicazione con l'agente
La comunicazione tra l'agente Puppet e i server master avviene tramite un tunnel crittografato (HTTPS) con verifica del client. Utilizzando sistemi di gestione della configurazione come Puppet, in qualità di amministratore di sistema, puoi concentrarti sulle attività di produzione rimuovendo tutte le attività manuali ripetitive.
Installazione di Puppet Master su Ubuntu 20.04|18.04
Passiamo ora al processo di installazione di Puppet Master su Ubuntu 20.04|18.04. L'ambiente del mio laboratorio è il seguente:
Burattinaio:
Hostname: puppetmaster
IP Address: 192.168.1.2
Agente fantoccio (per i test):
Hostname: puppetclient
IP Address: 192.168.1.3
Prerequisiti di configurazione
Uno dei requisiti chiave del burattinaio è la sincronizzazione dell'ora della rete. Ci assicureremo di avere impostato il fuso orario corretto sul server master Puppet e il servizio NTP funzionante. Successivamente configureremo i nodi Agente per sincronizzare il loro tempo con il Puppet Master,
Passaggio 1: imposta il fuso orario corretto
Ubuntu 18.04+ viene fornito con timedatectl strumento da riga di comando che puoi utilizzare per impostare il fuso orario corretto sul tuo server. Utilizzalo come di seguito, sostituendo "Africa/Nairobi" con il fuso orario corretto.
sudo timedatectl set-timezone Africa/Nairobi
Conferma la modifica utilizzando:
$ timedatectl
Local time: Wed 2019-10-30 08:33:53 EAT
Universal time: Wed 2019-10-30 05:33:53 UTC
RTC time: Wed 2019-10-30 05:33:54
Time zone: Africa/Nairobi (EAT, +0300)
System clock synchronized: yes
systemd-timesyncd.service active: yes
RTC in local TZ: no
Passaggio 2: imposta il nome host del server
Utilizzare il comando hostnamectl per impostare il nome host del server
export HOST_NAME="puppetmaster"
sudo hostnamectl set-hostname ${HOST_NAME}
Accedi nuovamente e conferma il nuovo nome host
$ hostname
puppetmaster
Aggiungi i nomi host e gli indirizzi IP corretti che utilizzeremo in seguito nel file /etc/hosts .
$ sudo vim /etc/hosts
[puppet-master-ip] puppetmaster puppet
[puppet-client-ip] puppetclient
Passaggio 2: impostare il server Chrony NTP
Installa il pacchetto ntp:
sudo apt remove ntp
sudo apt -y install chrony
Se desideri limitare quali sistemi possono utilizzare il tuo server ntp, aggiungi una riga come quella seguente a /etc/chrony/chrony.conf:
$ sudo vim /etc/chrony/chrony.conf
restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
Sostituisci 192.168.1.0 con la tua rete attendibile.
Il servizio ntp di riavvio:
sudo systemctl restart chronyd
Controlla lo stato dell'NTP:
$ sudo chronyc sources
210 Number of sources = 8
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^* chilipepper.canonical.com 2 6 17 2 +991us[ +836us] +/- 57ms
^+ pugot.canonical.com 2 6 17 2 +1049us[+1049us] +/- 61ms
^+ golem.canonical.com 2 6 17 3 +153us[-2656ns] +/- 63ms
^+ alphyn.canonical.com 2 6 17 3 +589us[ +433us] +/- 66ms
^+ pool-71-168-219-127.cmdn> 1 6 17 3 +1249us[+1093us] +/- 54ms
^+ smtp.us.naz.com 2 6 17 3 -2583us[-2738us] +/- 67ms
^+ mail.masters-of-cloud.de 2 6 17 2 +1293us[+1137us] +/- 49ms
^+ ns4.turbodns.co.uk 2 6 17 2 +4616us[+4460us] +/- 103ms
Installa Puppet Master su Ubuntu 20.04|18.04
Ora che tutti i prerequisiti sono soddisfatti, procedi con il download del repository PuppetLabs per Ubuntu e installa Puppet master sul server.
Ubuntu 20.04:
sudo apt update
curl -O https://apt.puppet.com/puppet-release-focal.deb
sudo apt install ./puppet-release-focal.deb
Ubuntu 18.04:
sudo apt update
sudo apt install wget
curl -O https://apt.puppet.com/puppet6-release-bionic.deb
sudo apt install ./puppet6-release-bionic.deb
Aggiorna l'indice apt e installa il burattinaio:
sudo apt update
sudo apt install puppetserver
Accetta di avviare l'installazione:
...
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
ca-certificates-java fontconfig-config fonts-dejavu-core java-common libavahi-client3 libavahi-common-data libavahi-common3 libcups2 libfontconfig1
libjpeg-turbo8 libjpeg8 liblcms2-2 libnspr4 libnss3 libpcsclite1 libxi6 libxrender1 libxtst6 net-tools openjdk-8-jre-headless puppet-agent x11-common
Suggested packages:
default-jre cups-common liblcms2-utils pcscd libnss-mdns fonts-dejavu-extra fonts-ipafont-gothic fonts-ipafont-mincho fonts-wqy-microhei fonts-wqy-zenhei
fonts-indic
The following NEW packages will be installed:
ca-certificates-java fontconfig-config fonts-dejavu-core java-common libavahi-client3 libavahi-common-data libavahi-common3 libcups2 libfontconfig1
libjpeg-turbo8 libjpeg8 liblcms2-2 libnspr4 libnss3 libpcsclite1 libxi6 libxrender1 libxtst6 net-tools openjdk-8-jre-headless puppet-agent puppetserver
x11-common
0 upgraded, 23 newly installed, 0 to remove and 66 not upgraded.
Need to get 118 MB of archives.
After this operation, 329 MB of additional disk space will be used.
Do you want to continue? [Y/n] y
Conferma la versione installata di Puppet:
$ apt policy puppetserver
puppetserver:
Installed: 7.2.0-1focal
Candidate: 7.2.0-1focal
Version table:
*** 7.2.0-1focal 500
500 http://apt.puppetlabs.com focal/puppet amd64 Packages
500 http://apt.puppetlabs.com focal/puppet all Packages
100 /var/lib/dpkg/status
....
Avvia e abilita il servizio pupazzoserver
sudo systemctl start puppetserver.service
sudo systemctl enable puppetserver.service
Su Ubuntu, il servizio dovrebbe essere avviato automaticamente:
$ systemctl status puppetserver.service
systemctl status puppetserver
● puppetserver.service - puppetserver Service
Loaded: loaded (/lib/systemd/system/puppetserver.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2021-06-28 14:31:27 EAT; 33s ago
Main PID: 6131 (java)
Tasks: 45 (limit: 4915)
Memory: 968.2M
CGroup: /system.slice/puppetserver.service
└─6131 /usr/bin/java -Xms2g -Xmx2g -Djruby.logger.class=com.puppetlabs.jruby_utils.jruby.Slf4jLogger -XX:OnOutOfMemoryError="kill -9 %p" -XX:ErrorFi>
Jun 28 14:31:07 puppet-server.computingforgeeks.com systemd[1]: Starting puppetserver Service...
Jun 28 14:31:27 puppet-server.computingforgeeks.com systemd[1]: Started puppetserver Service.
Configura Puppet Master su Ubuntu 20.04|18.04
Dopo aver installato il server master Puppet, è il momento di avviare la configurazione. Si consiglia di modificare le dimensioni dell'infrastruttura per l'allocazione della memoria del processo Puppet Java. Assegnerò al mio server Puppet 1 GB di RAM. Questo viene fatto modificando il file dell'ambiente situato in /etc/default/puppet-master
$ sudo vim /etc/default/puppetserver
JAVA_ARGS="-Xms1024m -Xmx1024m"
Riavviare il processo del server pupazzo dopo aver apportato la modifica.
sudo systemctl restart puppetserver
Configura firewall:
Se disponi di un firewall sul tuo sistema Ubuntu, devi aprire la porta 8140 utilizzata dal servizio Puppet master. Eseguire i seguenti comandi per consentire la porta sul firewall:
sudo ufw allow 8140/tcp
Configura l'ambiente PATH
Aggiungi le righe seguenti nel tuo file bashrc:
$ vim ~/.bashrc
export PATH=$PATH:/opt/puppetlabs/bin
Ottieni il file ~/.bashrc:
source ~/.bashrc
Conferma le impostazioni attuali del PERCORSO:
$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/opt/puppetlabs/bin
Installa Puppet Agent sui nodi gestiti
Sui nodi da automatizzare con Puppet installa Puppet Agent:
Ubuntu 20.04:
sudo apt update
curl -O https://apt.puppet.com/puppet-release-focal.deb
sudo apt install ./puppet-release-focal.deb
sudo apt update
sudo apt install puppet-agent
Ubuntu 18.04:
sudo apt update
sudo apt install wget
curl -O https://apt.puppet.com/puppet6-release-bionic.deb
sudo apt install ./puppet6-release-bionic.deb
sudo apt update
sudo apt install puppet-agent
Apri il file /etc/hosts e imposta il nome per il server e questo agente:
$ sudo vim /etc/hosts
[puppet-master-ip] puppetmaster puppet
[puppet-client-ip] puppetclient
Modifica il file di configurazione di Puppet Agent e aggiungi nomi alternativi DNS del server principale:
$ sudo vim /etc/puppetlabs/puppet/puppet.conf
[server]
vardir = /opt/puppetlabs/server/data/puppetserver
logdir = /var/log/puppetlabs/puppetserver
rundir = /var/run/puppetlabs/puppetserver
pidfile = /var/run/puppetlabs/puppetserver/puppetserver.pid
codedir = /etc/puppetlabs/code
dns_alt_names=puppetmaster,puppetserver
Configura anche la sezione principale come di seguito:
$ sudo vim /etc/puppetlabs/puppet/puppet.conf
[main]
server = puppetmaster
certname = puppetclient
environment = production
runinterval = 1h
Ora avvia il servizio Puppet:
sudo systemctl start puppet
sudo systemctl enable puppet
Nel Puppet Master Node sono elencati tutti i certificati disponibili:
$ sudo /opt/puppetlabs/bin/puppetserver ca list --all
Signed Certificates:
puppetmaster (SHA256) 88:75:01:73:8A:CE:50:1D:A1:55:6F:00:47:5C:0B:87:F5:AD:5E:B8:7F:70:F6:A7:7F:C4:92:67:35:07:3E:32 alt names: ["DNS:puppetmaster", "DNS:puppetmaster", "DNS:puppetserver", "DNS:puppetmaster"] authorization extensions: [pp_cli_auth: true]
puppetclient (SHA256) 71:80:13:23:4F:30:18:32:05:01:80:52:F7:C2:48:BE:7B:89:AE:E6:DD:87:C4:6B:4C:4F:07:47:7D:D8:14:A2 alt names: ["DNS:puppet", "DNS:puppetclient"] authorization extensions: [pp_cli_auth: true]
Firma qualsiasi certificato in sospeso:
sudo /opt/puppetlabs/bin/puppetserver ca sign --all
Il Burattinaio ora dovrebbe essere in grado di comunicare con il nodo agente e di controllarlo. Conferma eseguendo il comando seguente sull'agente:
$ sudo /opt/puppetlabs/bin/puppet agent --test
Info: Using configured environment 'production'
Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Caching catalog for puppetmaster
Info: Applying configuration version '1624883476'
Notice: Applied catalog in 0.01 seconds
Aggiungi la cartella Puppet Binary a ` PATH
I file binari di Puppet si trovano in /opt/puppetlabs/bin. Per impostazione predefinita, questa directory non è nel tuo ` PATH. Come si può confermare con:
$ ls /opt/puppetlabs/bin/
facter hiera puppet puppetserver
$ which puppet
/usr/bin/which: no puppet in (/home/vagrant/.local/bin:/home/vagrant/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin)
Aggiungilo al PERCORSO:
$ vim ~/.bashrc
export PATH=$PATH:/opt/puppetlabs/bin
$ source ~/.bashrc
$ which puppet
/opt/puppetlabs/bin/puppet
Divertiti ad automatizzare la gestione della tua infrastruttura e la distribuzione delle applicazioni con lo strumento di gestione della configurazione Puppet.