Comment installer Puppet 4 dans une configuration d’agent principal sur CentOS 7

introduction

Puppet, de Puppet Labs, est un outil de gestion de la configuration qui aide les administrateurs système à automatiser l’approvisionnement, la configuration et la gestion d’une infrastructure de serveur. En planifiant à l’avance et en utilisant des outils de gestion de la configuration tels que Puppet, vous réduirez le temps consacré à la répétition des tâches de base et garantissez la cohérence et la précision de vos configurations sur l’ensemble de votre infrastructure. Une fois que vous aurez maîtrisé vos serveurs avec Puppet et d’autres outils d’automatisation, vous disposerez de plus de temps libre qui pourra être utilisé pour améliorer d’autres aspects de votre configuration.

Il existe deux types de marionnettes: Puppet Enterprise et Open Source Puppet. Il fonctionne sur la plupart des distributions Linux, diverses plates-formes UNIX et Windows.

Dans ce didacticiel, nous expliquerons comment installer Open Source Puppet 4 dans une configuration agent / maître sur CentOS 7. Dans cette configuration, le serveur * Puppet master *, qui exécute le logiciel Puppet Server, peut être utilisé pour contrôler tous vos autres serveurs, ou nœuds * Agent de marionnettes *. Notez que nous utiliserons le package Puppet Server au lieu de Passenger ou de tout autre environnement d’exécution.

Conditions préalables

Pour suivre ce didacticiel, vous devez avoir un accès root ou superutilisateur à tous les serveurs avec lesquels vous souhaitez utiliser Puppet. * Vous devrez également créer un nouveau serveur CentOS 7 qui agira en tant que serveur maître Puppet *. Si vous n’avez pas d’infrastructure de serveur existante, n’hésitez pas à recréer l’exemple d’infrastructure (décrit ci-dessous) en suivant le tutoriel d’installation DNS requis.

Avant de commencer à installer Puppet, assurez-vous que les conditions préalables suivantes sont remplies:

  • * DNS de réseau privé: * Les DNS inverses et inverses doivent être configurés et chaque serveur doit avoir un nom d’hôte unique. Voici un tutoriel pour configurez votre propre réseau privé Serveur dns. Si vous n’avez pas configuré DNS, vous devez utiliser votre fichier + hosts + pour la résolution du nom. Nous supposerons que vous utiliserez votre réseau privé pour la communication au sein de votre infrastructure.

  • * Ports ouverts du pare-feu: * Le maître de marionnettes doit être accessible sur le port 8140. Si votre pare-feu est trop restrictif, consultez ce FirewallD Tutoriel pour des instructions sur la façon d’autoriser les demandes entrantes sur le port 8140.

Exemple d’infrastructure

Nous utiliserons l’infrastructure suivante pour montrer comment configurer Puppet:

Hostname Role Private FQDN

host1

Generic CentOS 7 server

host1.nyc3.example.com

host2

Generic CentOS 7 server

host2.nyc3.example.com

ns1

Primary nameserver

ns1.nyc3.example.com

ns2

Secondary nameserver

ns2.nyc3.example.com

L’agent de marionnettes sera installé sur tous ces hôtes. Ces hôtes seront référencés par leurs interfaces réseau privées, qui sont mappées sur le sous-domaine «.nyc3.example.com» dans le système DNS. Il s’agit de la même infrastructure que celle décrite dans le didacticiel relatif aux prérequis: https://www.digitalocean.com/community/tutorials/how-to-configure-bind-as-a-private-network-dns-server-on-centos. -7 [Comment configurer BIND en tant que serveur DNS de réseau privé sous CentOS 7].

Une fois toutes les conditions préalables remplies, passons à la création du serveur maître Puppet!

Créer un serveur maître de marionnettes

Créez un nouveau serveur * CentOS 7 * x64, en utilisant «marionnette» comme nom d’hôte. La configuration matérielle requise dépend du nombre de nœuds d’agents que vous souhaitez gérer. Deux cœurs de processeur et 1 Go de mémoire sont minimum requis pour gérer quelques nœuds, mais vous aurez besoin de davantage de ressources si votre infrastructure de serveur est plus grande. Puppet Server est configuré pour utiliser 2 Go de RAM par défaut.

Hostname Role Private FQDN

puppet

Puppet master

puppet.nyc3.example.com

Si vous venez de configurer votre DNS et que vous ne savez pas comment inclure de nouveaux hôtes, consultez le https://www.digitalocean.com/community/tutorials/how-to-configure-bind-as-a-private-network-dns -server-on-centos-7 #keeping-dns-records [Maintenance des enregistrements DNS] du didacticiel DNS. Pour l’essentiel, vous devez ajouter un enregistrement "A" et "PTR" et permettre au nouvel hôte d’effectuer des requêtes récursives. Assurez-vous également de configurer votre domaine de recherche de sorte que vos serveurs puissent utiliser des noms d’hôte abrégés pour se rechercher.

Installer NTP

Parce qu’il agit en tant qu’autorité de certification pour les nœuds d’agent, le serveur maître Puppet doit conserver une heure système précise pour éviter tout problème éventuel lorsqu’il émet des certificats d’agent. Les certificats peuvent sembler expirés s’il existe des écarts de temps. Nous utiliserons le protocole NTP (Network Time Protocol) à cette fin.

Tout d’abord, jetez un coup d’œil aux fuseaux horaires disponibles avec cette commande:

timedatectl list-timezones

Cela vous donnera une liste des fuseaux horaires disponibles pour votre serveur. Lorsque vous trouvez que le paramètre région / fuseau horaire est correct pour votre serveur, définissez-le avec cette commande (remplacez votre région et votre fuseau horaire préférés):

sudo timedatectl set-timezone

Installez NTP via yum avec cette commande:

sudo yum -y install ntp

Effectuez une synchronisation ponctuelle à l’aide de la commande + ntpdate +:

sudo ntpdate pool.ntp.org

Il est courant de mettre à jour la configuration NTP pour utiliser des «zones de pools» géographiquement plus proches de votre serveur NTP. Dans un navigateur Web, accédez au NTP Project Pool et recherchez une zone de pool située à proximité du centre de données que vous utilisez. Nous allons utiliser le pool des États-Unis (http://www.pool.ntp.org/zone/us) dans notre exemple, car nos serveurs sont situés dans un centre de données de New York.

Ouvrez + ntp.conf + pour le modifier:

sudo vi /etc/ntp.conf

Ajoutez les serveurs de temps de la page Projet de pool NTP en haut du fichier (remplacez-les par les serveurs de votre choix):

/etc/ntp.conf extrait

server 0.us.pool.ntp.org
server 1.us.pool.ntp.org
server 2.us.pool.ntp.org
server 3.us.pool.ntp.org

Sauvegarder et quitter.

Démarrez NTP pour ajouter les nouveaux serveurs de temps:

sudo systemctl restart ntpd

Enfin, activez le démon NTP:

sudo systemctl enable ntpd

Maintenant que notre serveur garde l’heure exacte, installons le logiciel Puppet Server.

Installer le serveur de marionnettes

Puppet Server est le logiciel qui s’exécute sur le serveur maître Puppet. C’est le composant qui transmettra les configurations à vos autres serveurs, qui exécuteront le logiciel de l’agent Puppet.

Activez le référentiel de la collection officielle de Puppet Labs avec cette commande:

sudo rpm -ivh https://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm

Installez le paquet + puppetserver +:

sudo yum -y install puppetserver

Le serveur de marionnettes est maintenant installé sur votre serveur maître, mais il n’est pas encore en cours d’exécution.

Configurer l’allocation de mémoire (facultatif)

Par défaut, Puppet Server est configuré pour utiliser 2 Go de RAM. Vous devez personnaliser ce paramètre en fonction de la quantité de mémoire disponible de votre serveur maître et du nombre de nœuds d’agent qu’il va gérer.

Tout d’abord, ouvrez + / etc / sysconfig / puppetserver + dans votre éditeur de texte préféré. Nous allons utiliser + vi +:

sudo vi /etc/sysconfig/puppetserver

Recherchez ensuite la ligne + JAVA_ARGS + et utilisez les paramètres + -Xms + et + -Xmx + pour définir l’allocation de mémoire. Par exemple, si vous souhaitez utiliser 3 Go de mémoire, la ligne devrait ressembler à ceci:

Allocation de mémoire

JAVA_ARGS="-Xms -Xmx"

Enregistrez et quittez lorsque vous avez terminé.

Démarrer le serveur de marionnettes

Nous sommes maintenant prêts à démarrer Puppet Server avec cette commande:

sudo systemctl start puppetserver

Ensuite, activez Puppet Server pour qu’il démarre au démarrage de votre serveur maître:

sudo systemctl enable puppetserver

Puppet Server est en cours d’exécution, mais il ne gère pas encore de nœud d’agent. Apprenons comment installer et ajouter des agents Puppet!

Installer l’agent de marionnettes

Le logiciel agent Puppet doit être installé sur tout serveur géré par le maître Puppet. Dans la plupart des cas, cela inclura tous les serveurs de votre infrastructure. Comme indiqué dans l’introduction, l’agent Puppet peut s’exécuter sur toutes les principales distributions Linux, certaines plates-formes UNIX et Windows. Comme l’installation varie légèrement d’un système d’exploitation à l’autre, nous ne couvrirons que l’installation sur les serveurs CentOS 7. Des instructions sur l’installation de l’agent Puppet sur des serveurs Ubuntu 14.04 sont disponibles à l’adresse https://www.digitalocean.com/community/tutorials/how-to-install-puppet-4-in-a-master-agent-setup-on-ubuntu. -14-04 # install-puppet-agent [ici].

  • Effectuez ces étapes sur tous vos serveurs d’agent. *

Activez le référentiel de la collection officielle de Puppet Labs avec cette commande:

sudo rpm -ivh https://yum.puppetlabs.com/puppetlabs-release-pc1-el-7.noarch.rpm

Installez le paquet + puppet-agent:

sudo yum -y install puppet-agent

Maintenant que l’agent Puppet est installé, lancez-le avec cette commande:

sudo /opt/puppetlabs/bin/puppet resource service puppet ensure=running enable=true

La première fois que vous exécutez l’agent Puppet, il génère un certificat SSL et envoie une demande de signature au maître Puppet. Une fois que le maître de marionnettes a signé le certificat de l’agent, il sera en mesure de communiquer avec le nœud de l’agent et de le contrôler.

N’oubliez pas de répéter cette section pour tous vos nœuds d’agents Puppet.

Signer des certificats sur le maître de marionnettes

La première fois que Puppet s’exécute sur un nœud d’agent, il envoie une demande de signature de certificat au maître de marionnettes. Avant que Puppet Server puisse communiquer avec le nœud agent et le contrôler, il doit signer le certificat de ce nœud agent particulier. Nous allons décrire comment signer et vérifier les demandes de signature.

Liste des demandes de certificats en cours

Sur le maître de marionnettes, exécutez la commande suivante pour répertorier toutes les demandes de certificat non signé:

sudo /opt/puppetlabs/bin/puppet cert list

Si vous venez de configurer votre premier noeud d’agent, vous verrez une demande. Cela ressemblera à ce qui suit, avec le nom d’hôte du noeud de l’agent:

Output:  "host1.nyc3.example.com" (SHA256) 15:90:C2:FB:ED:69:A4:F7:B1:87:0B:BF:F7:DD:B5:1C:33:F7:76:67:F3:F6:23:AE:07:4B:F6:E3:CC:04:11:4C

Notez qu’il n’y a pas de + devant. Cela indique qu’il n’a pas encore été signé.

Signer une demande

Pour signer une demande de certificat, utilisez la commande + puppet cert sign +, avec le nom d’hôte du certificat que vous souhaitez signer. Par exemple, pour signer le certificat + host1.nyc3.example.com + `, utilisez la commande suivante:

sudo /opt/puppetlabs/bin/puppet cert sign

Vous verrez la sortie suivante, qui indique que la demande de certificat a été signée:

Output:Notice: Signed certificate request for
Notice: Removing file Puppet::SSL::CertificateRequest  at '/etc/puppetlabs/puppet/ssl/ca/requests/.pem'

Le maître de marionnettes peut maintenant communiquer et contrôler le nœud auquel appartient le certificat signé.

Si vous souhaitez signer toutes les demandes en cours, utilisez l’option + - all +, comme suit:

sudo /opt/puppetlabs/bin/puppet cert sign --all

Révoquer des certificats

Vous voudrez peut-être supprimer un hôte de Puppet ou reconstruire un hôte puis le rajouter à Puppet. Dans ce cas, vous souhaiterez révoquer le certificat de l’hôte du maître des marionnettes. Pour ce faire, vous pouvez utiliser l’action + clean +:

sudo /opt/puppetlabs/bin/puppet cert clean

Les certificats associés à l’hôte spécifié seront supprimés de Puppet.

Afficher toutes les demandes signées

Si vous souhaitez afficher toutes les demandes, signées et non signées, exécutez la commande suivante:

sudo /opt/puppetlabs/bin/puppet cert list --all

Vous verrez une liste de toutes les demandes. Les demandes signées sont précédées d’un ` et les demandes non signées n'ont pas le `.

Output:+ "puppet"    (SHA256) 5A:71:E6:06:D8:0F:44:4D:70:F0:BE:51:72:15:97:68:D9:67:16:41:B0:38:9A:F2:B2:6C:BB:33:7E:0F:D4:53 (alt names: "DNS:puppet", "DNS:puppet.nyc3.example.com")
+ "host1.nyc3.example.com" (SHA256) F5:DC:68:24:63:E6:F1:9E:C5:FE:F5:1A:90:93:DF:19:F2:28:8B:D7:BD:D2:6A:83:07:BA:FE:24:11:24:54:6A
+ "host2.nyc3.example.com" (SHA256) CB:CB:CA:48:E0:DF:06:6A:7D:75:E6:CB:22:BE:35:5A:9A:B3:93:63:BF:F0:DB:F2:D8:E5:A6:27:10:71:78:DA
+ "ns2.nyc3.example.com" (SHA256) 58:47:79:8A:56:DD:06:39:52:1F:E3:A0:F0:16:ED:8D:40:17:40:76:C2:F0:4F:F3:0D:F9:B3:64:48:2E:F1:CF

Félicitations! Votre infrastructure est maintenant prête à être gérée par Puppet!

Débuter avec Puppet

Maintenant que votre infrastructure est configurée pour être gérée avec Puppet, nous allons vous montrer comment utiliser Puppet pour effectuer quelques tâches de base.

Comment sont rassemblés les faits

Puppet rassemble des faits sur chacun de ses nœuds avec un outil appelé facter. Facter, par défaut, rassemble des informations utiles pour la configuration du système (par exemple, Noms de système d’exploitation, noms d’hôte, adresses IP, clés SSH, etc.). Il est possible d’ajouter des faits personnalisés qui ne font pas partie de l’ensemble de faits par défaut.

Les faits rassemblés peuvent être utiles dans de nombreuses situations. Par exemple, vous pouvez créer un modèle de configuration de serveur Web et renseigner automatiquement les adresses IP appropriées pour un hôte virtuel particulier. Vous pouvez également déterminer que la distribution de votre serveur est «CentOS». Vous devez donc exécuter le service + apache2 + au lieu de + httpd +. Ce sont des exemples basiques, mais ils devraient vous donner une idée de la manière dont les faits peuvent être utilisés.

Pour afficher une liste des faits collectés automatiquement sur votre noeud d’agent, exécutez la commande suivante:

/opt/puppetlabs/bin/facter

Fichier manifeste principal

Puppet utilise un langage spécifique au domaine pour décrire les configurations système. Ces descriptions sont enregistrées dans des fichiers appelés «manifestes», qui ont une extension de fichier .pp. Le fichier de manifeste principal par défaut se trouve * sur votre serveur maître Puppet * dans + / etc / puppetlabs / code / environnements / production / manifestes / site.pp +. Créons un fichier d’espace réservé pour le moment:

sudo touch /etc/puppetlabs/code/environments/production/manifests/site.pp

Notez que le manifeste principal est vide pour le moment, donc Puppet n’effectuera aucune configuration sur les nœuds de l’agent.

Comment le manifeste principal est-il exécuté?

L’agent Puppet s’enregistre périodiquement auprès du serveur Puppet (généralement toutes les 30 minutes). Lors de son enregistrement, il envoie au maître des faits sur lui-même et extrait un catalogue actuel: une liste compilée de ressources et leurs états souhaités, pertinents pour l’agent, déterminés par le manifeste principal. Le nœud d’agent tentera ensuite d’apporter les modifications appropriées pour atteindre l’état souhaité. Ce cycle se poursuivra tant que le maître de marionnettes est en cours d’exécution et communique avec les nœuds d’agent.

Exécution immédiate sur un nœud d’agent particulier

Il est également possible de lancer manuellement la vérification d’un noeud d’agent particulier en exécutant la commande suivante (sur le noeud d’agent en question):

/opt/puppetlabs/bin/puppet agent --test

Cette opération appliquera le manifeste principal à l’agent exécutant le test. Vous pouvez voir une sortie comme celle-ci:

Output:Info: Using configured environment 'production'
Info: Retrieving pluginfacts
Info: Retrieving plugin
...
Info: Loading facts
Info: Caching catalog for host1
Info: Applying configuration version '1457389302'
Notice: /Stage[main]/Main/File[/tmp/example-ip]/ensure: defined content as '{md5}dd769ec60ea7d4f7146036670c6ac99f'
Notice: Applied catalog in 0.04 seconds

Cette commande est utile pour voir comment le manifeste principal affectera immédiatement un seul serveur.

Manifestes ponctuels

La commande + puppet apply + vous permet d’exécuter des manifestes qui ne sont pas liés au manifeste principal, à la demande. Il applique uniquement le manifeste au nœud à partir duquel vous exécutez le apply. Voici un exemple:

sudo /opt/puppetlabs/bin/puppet apply

L’exécution de manifestes de cette manière est utile si vous souhaitez tester un nouveau manifeste sur un nœud d’agent ou si vous souhaitez simplement exécuter un manifeste une fois (par exemple, pour initialiser un noeud d’agent à l’état souhaité).

Un exemple de manifeste

Comme vous vous en souvenez peut-être, le fichier de manifeste principal sur le maître Puppet se trouve dans + / etc / puppetlabs / code / environnements / production / manifestes / site.pp +.

Sur le serveur maître de Puppet, modifiez-le maintenant:

sudo vi /etc/puppetlabs/code/environments/production/manifests/site.pp

Ajoutez maintenant les lignes suivantes pour décrire une ressource de fichier:

exemple site.pp

file {'/tmp/example-ip':                                            # resource type file and filename
 ensure  => present,                                               # make sure it exists
 mode    => '0644',                                                # file permissions
 content => "Here is my Public IP Address: ${ipaddress_eth0}.\n",  # note the ipaddress_eth0 fact
}

Maintenant, enregistrez et quittez. Les commentaires en ligne doivent expliquer la ressource que nous définissons. En clair, cela garantira que tous les nœuds d’agent auront un fichier situé à + ​​/ tmp / example-ip + avec + -rw-r - r - +, avec un contenu incluant l’adresse IP publique du nœud. .

Vous pouvez soit attendre que l’agent se connecte automatiquement au maître, soit exécuter la commande + puppet agent --test + (à partir de l’un de vos nœuds d’agent). Puis exécutez la commande suivante pour imprimer le fichier:

cat /tmp/example-ip

Vous devriez voir un résultat ressemblant à ce qui suit (avec l’adresse IP de ce nœud):

Output:Here is my Public IP Address: .

Spécifier un nœud

Si vous souhaitez définir une ressource pour des nœuds spécifiques, définissez un + nœud dans le manifeste.

Sur le maître, éditez + site.pp +:

sudo vi /etc/puppetlabs/code/environments/production/manifests/site.pp

Ajoutez maintenant les lignes suivantes:

exemple site.pp

node 'ns1', 'ns2' {    # applies to ns1 and ns2 nodes
 file {'/tmp/dns':    # resource type file and filename
   ensure => present, # make sure it exists
   mode => '0644',
   content => "Only DNS servers get this file.\n",
 }
}

node default {}       # applies to nodes that aren't explicitly defined

Sauvegarder et quitter.

Maintenant, Puppet s’assurera qu’un fichier situé sous + / tmp / dns + existera sur ns1 et ns2. Vous voudrez peut-être exécuter la commande + puppet agent --test + (à partir de ns1 ou ns2), si vous ne souhaitez pas attendre le tirage planifié de l’agent de marionnette.

Notez que si vous ne définissez pas de ressource, Puppet fera de son mieux pour ne pas y toucher. Donc, si vous supprimez ces ressources du manifeste, Puppet ne supprimera pas les fichiers qu’il a créés. Si vous voulez que les fichiers soient supprimés, remplacez + assure + par + absent +.

Ces exemples ne servent à rien, mais ils prouvent que Puppet fonctionne correctement.

Utiliser un module

Maintenant, utilisons un module. Les modules sont utiles pour regrouper des tâches. De nombreux modules sont disponibles dans la communauté Puppet et vous pouvez même écrire les vôtres.

Sur le maître de marionnettes, installez le module + puppetlabs-apache + de forgeapi:

sudo /opt/puppetlabs/bin/puppet module install puppetlabs-apache

Maintenant, éditez + site.pp +:

sudo vi /etc/puppetlabs/code/environments/production/manifests/site.pp

Ajoutez maintenant les lignes suivantes pour installer Apache sur host2:

exemple site.pp

node 'host2' {
 class { 'apache': }             # use apache module
 apache::vhost { 'example.com':  # define vhost resource
   port    => '80',
   docroot => '/var/www/html'
 }
}

# node default {}       # uncomment this line if it doesn't already exist in your manifest

Sauvegarder et quitter. À présent, lors de la prochaine mise à jour de l’hôte2, Puppet installera le paquet Apache et configurera un hôte virtuel appelé «example.com», à l’écoute sur le port 80 et avec une racine de document + / var / www / html +.

Sur * host2 *, exécutez la commande suivante:

sudo /opt/puppetlabs/bin/puppet agent --test

Vous devriez voir un tas de résultats indiquant qu’Apache est en cours d’installation. Une fois l’opération terminée, ouvrez l’adresse IP publique de l’hôte2 dans un navigateur Web. Vous devriez voir une page servie par Apache.

Félicitations! Vous avez utilisé votre premier module de marionnettes!

Conclusion

Maintenant que vous disposez d’une installation de base de puppet agent / maître, vous êtes maintenant prêt à en apprendre davantage sur l’utilisation de Puppet pour gérer votre infrastructure de serveur. Consultez le didacticiel suivant: Démarrez avec le code de marionnette: Manifestes et modules.

Related