Ricerca nel sito web

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:

  1. Compila un catalogo.
  2. 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.

Articoli correlati: