Puppet est un outil de gestion de configuration open source qui vous aide à gérer les configurations de centaines de systèmes clients à partir d'un emplacement central.
Puppet facilite la vie de l'administrateur en réduisant le temps consacré aux tâches répétitives et lui permet de se concentrer sur d'autres travaux, garantit également que la configuration déployée est cohérente sur l'ensemble de l'infrastructure.
Puppet est disponible pour les systèmes informatiques basés sur Linux, Mac, BSD, Solaris et Windows, publié sous licence Apache, écrit en langage "Ruby".
Ce guide vous aide à installer Puppet 6.x sur CentOS 7 / RHEL 7.
Architecture
Agent / Maître
Dans cette architecture, les nœuds gérés exécutent le logiciel de l'agent de marionnettes, en tant que service d'arrière-plan. D'autre part, un ou plusieurs serveurs exécutent l'application maître, c'est-à-dire. Serveur de marionnettes.
L'agent de marionnettes envoie périodiquement des faits au maître de marionnettes et demande un catalogue. Le maître compile et renvoie le catalogue de ce nœud particulier, en utilisant les sources d'informations auxquelles il a accès.
L'architecture autonome
Dans cette architecture, chaque nœud géré a sa copie des informations de configuration et compile son catalogue. Il exécute l'application d'application de marionnettes en tant que tâche cron.
Environnement
Ici, nous allons configurer une marionnette en architecture serveur/agent.
Maître des marionnettes
Nom d'hôte : serveur.itzgeek.local
Adresse IP : 192.168.1.10
Système d'exploitation : CentOS 7.6
Client marionnette
Nom d'hôte : client.itzgeek.local
Adresse IP : 192.168.1.20
Système d'exploitation : CentOS 7.6
Prérequis
Installer NTP
Les horaires des nœuds maître et client doivent être synchronisés avec précision avec les serveurs de temps en amont, car le maître du serveur maître Puppet agira en tant qu'autorité de certification.
(Si l'heure est incorrecte, il peut émettre par erreur des certificats d'agent à partir d'une date passée ou future lointaine, que d'autres nœuds traiteront comme expirés.)
Installez le package NTP et effectuez la synchronisation de l'heure avec les serveurs NTP en amont.
yum -y install ntpdatentpdate 0.centos.pool.ntp.orgAssurez-vous que tous les nœuds sont dans le même fuseau horaire en utilisant date commande. S'il y a des écarts, modifiez-le en conséquence.
LIRE :Comment changer le fuseau horaire dans CentOS 7 / RHEL 7
DNS
L'agent Puppet utilise le nom d'hôte pour communiquer avec le serveur Puppet. Assurez-vous donc que les nœuds d'agent peuvent résoudre le nom d'hôte de Puppet Server à l'aide de /etc/hosts
fichier ou serveur DNS.
Configurer le référentiel de marionnettes
Pour installer le serveur/les agents Puppet, nous aurions besoin d'ajouter un référentiel de marionnettes sur tous les nœuds.
Configurez le référentiel de Puppet sur les nœuds maître et agent.rpm -Uvh https://yum.puppet.com/puppet6-release-el-7.noarch.rpm
Installer le serveur de marionnettes
Puppet Server est le logiciel serveur qui s'exécute sur le nœud maître de marionnettes. Puppetmaster envoie les configurations aux nœuds gérés (puppet-agent).
Installez le serveur Puppet en utilisant la commande ci-dessous.
yum install -y puppetserver
Le serveur de marionnettes est maintenant installé, ne démarrez pas encore le service de serveur de marionnettes.
Configurer le serveur de marionnettes
Allocation de mémoire
Par défaut, la JVM Puppet Server est configurée pour utiliser 2 Go de mémoire. Vous pouvez le modifier en fonction de la quantité de mémoire disponible sur votre nœud maître ; assurez-vous qu'il est suffisant pour gérer tous les nœuds qui y sont connectés.
Pour modifier la valeur de l'allocation de mémoire, modifiez le fichier ci-dessous.
vi /etc/sysconfig/puppetserver
Modifiez la valeur.
De :
JAVA_ARGS="-Xms2g -Xmx2g -Djruby.logger.class=com.puppetlabs.jruby_utils.jruby.Slf4jLogger"
À :
Pour 512 Mo, utilisez les paramètres ci-dessous.
JAVA_ARGS="-Xms512m -Xmx512m -Djruby.logger.class=com.puppetlabs.jruby_utils.jruby.Slf4jLogger"
Serveur Web intégré
Puppet Server utilise un serveur Web basé sur Jetty intégré dans le processus JVM du service. Vous n'avez pas besoin de configurer ou d'activer le serveur Web ; cela fonctionne hors de la boîte. Il fonctionne bien sous des charges de niveau de production.
Les paramètres du serveur Web intégré peuvent être modifiés dans webserver.conf. Vous devrez peut-être modifier ce fichier si vous utilisez une autorité de certification externe ou si vous exécutez Puppet Server sur un port non standard.
Configuration des marionnettes
Configurations simples
Puppet Server ne nécessite aucune configuration. Vous pouvez simplement démarrer le service de serveur Puppet. Il utilisera les paramètres par défaut.
Le nom d'hôte par défaut de Puppet Server (dns_alt_names) est puppet, vous devez donc utiliser server =puppet dans le fichier de configuration puppet-agent.Si vous souhaitez modifier le nom d'hôte du maître de marionnettes, suivez la procédure ci-dessous.
Configurations avancées (facultatif)
Ici, je vais modifier les paramètres de Puppet Master pour nos besoins.
vi /etc/puppetlabs/puppet/puppet.conf
Placez les lignes ci-dessous. Modifiez-le en fonction de votre environnement.
[master]dns_alt_names =server.itzgeek.local,server[main]certname =server.itzgeek.localserver =server.itzgeek.localenvironment =productionruninterval =1h
Démarrer le serveur de marionnettes
Générez une autorité de certification de signature racine et intermédiaire pour Puppet Server.
configuration de puppetserver ca
Sortie :
Génération réussie. Trouvez vos fichiers dans /etc/puppetlabs/puppet/ssl/caSi vous obtenez puppetserver:command not found, exécutez la source /etc/profile.d/puppet-agent.sh dans le terminal ou déconnectez-vous de la session en cours et reconnectez-vous.
Démarrez et activez le serveur Puppet.
systemctl start puppetserversystemctl enable puppetserver
Pare-feu
Le Puppet Master écoute sur le port 8140, configurez donc le pare-feu de manière à ce que les nœuds gérés puissent se connecter au maître.
firewall-cmd --permanent --add-port=8140/tcpfirewall-cmd --reload
Installer l'agent de marionnettes
Installez l'agent marionnette sur votre client à l'aide de la commande ci-dessous.
yum install -y puppet-agent
L'agent marionnette utilise également certains des paramètres par défaut pour se connecter au nœud maître. Cependant, nous devons modifier le fichier de configuration de la marionnette et définir les informations du maître de la marionnette.
Définir le serveur valeur selon votre nom de nœud maître. Dans mon cas, le serveur est server.itzgeek.local , et nomcertificat est mon nom d'hôte client (client.itzgeek.local ).vi /etc/puppetlabs/puppet/puppet.conf
Réglez comme ci-dessous.
[main]certname =client.itzgeek.localserver =server.itzgeek.localenvironment =productionruninterval =1h
Vous pouvez modifier la valeur de runinterval dépend de l'exigence. Vous pouvez définir la valeur en secondes (10 ou 10s), minutes (10m) et heures (1h). Ce paramètre contrôle la durée d'attente de l'agent entre les deux demandes de catalogue.
Démarrez l'agent marionnette sur le nœud et faites-le démarrer automatiquement au démarrage du système.
marionnette du service de ressources de marionnettesassure=running enable=true
Sortie :
Remarque : /Service[puppet]/ensure : assurez-vous que 'stopped' est remplacé par 'running'service { 'puppet' : assure => 'running', enable => 'true',}Si vous obtenez puppet:command not found, exécutez la source /etc/profile.d/puppet-agent.sh dans le terminal ou déconnectez-vous de la session en cours et reconnectez-vous.
Signer le certificat de nœud d'agent sur le serveur maître
Dans un déploiement agent/maître, un administrateur doit approuver une demande de certificat provenant de chaque nœud afin qu'il puisse récupérer les configurations. Les nœuds d'agent demanderont des certificats pour la première fois s'ils tentent de s'exécuter.
Connectez-vous au serveur maître de marionnettes et exécutez la commande ci-dessous pour afficher les demandes en attente.
liste ca puppetserver
Sortie :
client.itzgeek.local (SHA256) A6:0E:93:51:FF:53:C8:FA:63:70:72:53:B6:1E:1B:A8:49:79:37:7E :57:00:02:AE:32:44:22:BE:97:F5:08:09
Exécutez la commande puppet cert sign pour signer une demande.
puppetserver ca signe --certname client.itzgeek.local
Sortie :
Demande de certificat signée avec succès pour client.itzgeek.local
Le marionnettiste peut maintenant communiquer avec la machine cliente et contrôler le nœud.
Si vous avez plusieurs demandes de signature provenant de nœuds, vous pouvez signer toutes les demandes en une seule commande.
puppetserver ca signe --all
Parfois, vous devrez peut-être révoquer le certificat d'un nœud particulier pour le relire.
Remplacez le
puppetserver peut révoquer --certname <AGENT_NAME>Vous pouvez lister toutes les requêtes signées et non signées avec la commande ci-dessous.
liste ca de puppetserver --allSortie :
server.itzgeek.local (SHA256) 6E:90:94:6F:31:4F:8C:2A:28:90:D5:C0:6D:71:18:65:5E:86:DE:1C :16:9C:7C:30:8F:BF:DA:87:2D:F7:2C:26 noms alternatifs :["DNS:server.itzgeek.local", "DNS:server", "DNS:server.itzgeek .local"]client.itzgeek.local (SHA256) A6:08:36:5C:DB:73:0D:16:BA:5B:0D:72:76:FD:C7:31:DD:87:6F :EC:D4:4F:7A:87:E9:4F:73:70:D0:09:6E:61Vérifier le client Puppet
Une fois que le serveur Puppet a signé votre certificat client, exécutez la commande suivante sur la machine cliente pour le tester.
agent marionnette --testSortie :
Info :Utilisation de l'environnement configuré 'production'Info :Récupération de pluginfactsInfo :Récupération de pluginInfo :Récupération de localesInfo :Mise en cache du catalogue pour client.itzgeek.localInfo :Application de la version de configuration '1558878523'Notice :Catalogue appliqué en 0,03 secondeCréation de notre premier manifeste
Manifest est un fichier de données qui contient la configuration du client, écrit dans le langage déclaratif de Puppet ou un Ruby DSL. Cette section couvre certains manifestes de base pour créer un répertoire ainsi qu'un fichier sur le nœud géré.
Le fichier manifeste principal de la marionnette se trouve dans /etc/puppetlabs/code/environments/production/manifests/site.pp.
vi /etc/puppetlabs/code/environments/production/manifests/site.ppAjoutez maintenant les lignes suivantes au manifeste pour créer un répertoire sur le nœud géré.
Si la variable node n'est pas définie, ce manifeste s'appliquera à tous les nœuds connectés au puppet master.nœud 'client.itzgeek.local ' { # S'applique uniquement au nœud mentionné ; si rien n'est mentionné, s'applique à tous. Mode de nom de groupe => '0755', # autorisations de répertoire}}Maintenant, exécutez la commande suivante sur le nœud client pour récupérer les configurations.
agent marionnette --testSortie :
Info :Utilisation de l'environnement configuré 'production'Info :Récupération de pluginfactsInfo :Récupération de pluginInfo :Catalogue de mise en cache pour client.itzgeek.localInfo :Application de la version de configuration '1472165498'Notice :/Stage[main]/Main/Node[client.itzgeek. local]/File[/tmp/puppetesttdir]/ensure :createdNotice :Catalogue appliqué en 0,03 secondeVérifiez que le répertoire a été créé sur le nœud géré.
[root@client ~]# ls -ld /tmp/puppetesttdirdrwxr-xr-x. 2 root root 6 26 mai 09:57 /tmp/puppetesttdirRefaisons le test une fois de plus en écrivant le manifeste pour créer un fichier avec du contenu.
node 'client.itzgeek.local' { # S'applique uniquement au nœud mentionné ; si rien n'est mentionné, s'applique à tous. Group Name mode => '0644', # File permissions content => "Ce fichier est créé par Puppet Server"}}Vous pouvez accéder à la machine cliente et récupérer le catalogue comme indiqué dans l'exemple précédent ou l'agent Puppet obtiendra périodiquement le manifeste de Puppet Server en fonction de l'intervalle d'exécution que vous définissez dans le fichier de configuration.
Conclusion
J'espère que vous avez appris à installer Puppet Server et Agent sur CentOS 7 / RHEL 7. De plus, vous avez appris à créer un fichier manifeste simple pour créer un répertoire sur le nœud client. Veuillez partager vos commentaires dans la section des commentaires.