Comment installer Puppet 4 dans un programme d’installation de Master-Agent sous Ubuntu 14.04

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 tutoriel, nous expliquerons comment installer Open Source Puppet 4 dans une configuration d'agent principal sous Ubuntu 14.04. Dans cette configuration, le serveurPuppet master, qui exécute le logiciel Puppet Server, peut être utilisé pour contrôler tous vos autres serveurs ou nœudsPuppet agent. 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. You will also be required to create a new Ubuntu 14.04 server to act as the Puppet master server. 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:

  • Private Network DNS: Les DNS directs et inversés doivent être configurés et chaque serveur doit avoir un nom d'hôte unique. Voici un tutoriel surconfigure your own private network DNS server. Si vous n'avez pas configuré DNS, vous devez utiliser votre fichierhosts pour la résolution de noms. Nous supposerons que vous utiliserez votre réseau privé pour la communication au sein de votre infrastructure.

  • Firewall Open Ports: Le maître Puppet doit être accessible sur le port 8140. Si votre pare-feu est trop restrictif, consultez ceUFW tutorial pour savoir comment autoriser les requêtes entrantes sur le port 8140.

Exemple d'infrastructure

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

Nom d'hôte Role FQDN privé

hôte1

Serveur Ubuntu 14.04 générique

host1.nyc3.example.com

host2

Serveur Ubuntu 14.04 générique

host2.nyc3.example.com

ns1

Serveur de noms principal

ns1.nyc3.example.com

ns2

Serveur de noms secondaire

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 des prérequis:How To Configure BIND as a Private Network DNS Server on Ubuntu 14.04.

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 x64Ubuntu 14.04, en utilisant «puppet» comme nom d'hôte. La configuration matérielle requise dépend du nombre de nœuds d'agent que vous souhaitez gérer; deux cœurs de processeur et 1 Go de mémoire est la condition requise deminimumpour gérer une poignée de nœuds, mais vous aurez besoin de plus de ressources si votre infrastructure de serveur est plus grande. Puppet Server est configuré pour utiliser 2 Go de RAM par défaut.

Ajoutez son réseau privé à votre DNS avec les détails suivants:

Nom d'hôte Role FQDN privé

fantoche

Maître de la marionnette

puppet.nyc3.example.com

Si vous venez de configurer votre DNS et que vous ne savez pas comment inclure de nouveaux hôtes, reportez-vous à la sectionMaintaining DNS Records 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.

[.Remarque]##

Note: Ce didacticiel suppose que le nom d'hôte de votre maître de marionnettes est "puppet". Si vous utilisez un nom différent, vous devrez faire quelques écarts par rapport à ce didacticiel. Plus précisément, vous devez spécifier le nom d'hôte de votre maître de marionnettes dans les fichiers de configuration de vos nœuds d'agent de marionnettes, et vous devez régénérer le certificat SSL de votre maître de marionnettes avant de signer tout certificat d'agent. Sinon, vous recevrez cette erreur:Error: Could not request certificate: The certificate retrieved from the master does not match the agent's private key..

La configuration de ce paramètre n'est pas couverte dans ce didacticiel.

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 allons utiliser 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 America/New_York

Installez NTP via apt-get avec ces commandes:

sudo apt-get update
sudo apt-get -y install ntp

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 auxNTP Pool Project et recherchez unpool zone qui ferme géographiquement le centre de données que vous utilisez. Nous utiliserons le pool É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.

Ouvrezntp.conf pour l'édition:

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 excerpt

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 service ntp restart

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 collection officiel de Puppet Labs avec les commandes suivantes:

cd ~ && wget https://apt.puppetlabs.com/puppetlabs-release-pc1-trusty.deb
sudo dpkg -i puppetlabs-release-pc1-trusty.deb
sudo apt-get update

Installez le packagepuppetserver:

sudo apt-get -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

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/default/puppetserver dans votre éditeur de texte préféré. Nous utiliseronsvi:

sudo vi /etc/default/puppetserver

Recherchez ensuite la ligneJAVA_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="-Xms3g -Xmx3g"

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 service puppetserver restart

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

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

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 Ubuntu 14.04. Les instructions d'installation de l'agent Puppet sur les serveurs CentOS 7 sont disponibles àhere.

Effectuez ces étapes sur tous vos serveurs d'agents.

Activez le référentiel de collection officiel de Puppet Labs avec les commandes suivantes:

cd ~ && wget https://apt.puppetlabs.com/puppetlabs-release-pc1-trusty.deb
sudo dpkg -i puppetlabs-release-pc1-trusty.deb

Ensuite, installez le packagepuppet-agent:

sudo apt-get update
sudo apt-get install puppet-agent

Maintenant que l'agent Puppet est installé, démarrez-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.

[.note] #Note: S'il s'agit de votre premier agent Puppet, il est recommandé d'essayer de signer le certificat sur le maître Puppet, ce qui est traité à l'étape suivante, avant d'ajouter vos autres agents. Une fois que vous avez vérifié que tout fonctionne correctement, vous pouvez revenir en arrière et ajouter les nœuds d'agent restants en toute confiance.
#

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 Puppet. 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 lui. Cela indique qu'il n'a pas encore été signé.

Signer une demande

Pour signer une demande de certificat, utilisez la commandepuppet cert sign, avec le nom d'hôte du certificat que vous souhaitez signer. Par exemple, pour signer le certificat dehost1.nyc3.example.com, vous utiliseriez la commande suivante:

sudo /opt/puppetlabs/bin/puppet cert sign host1.nyc3.example.com

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

Output:Notice: Signed certificate request for host1.nyc3.example.com
Notice: Removing file Puppet::SSL::CertificateRequest host1.nyc3.example.com at '/etc/puppetlabs/puppet/ssl/ca/requests/host1.nyc3.example.com.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 requêtes en cours, utilisez l'option--all, comme ceci:

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'actionclean:

sudo /opt/puppetlabs/bin/puppet cert clean hostname

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` and unsigned requests do not have the `.

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. Ou vous pouvez déterminer que la distribution de votre serveur est «Ubuntu», vous devez donc exécuter le serviceapache2 au lieu dehttpd. 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 manifeste principal par défaut se trouveon your Puppet master server à/etc/puppetlabs/code/environments/production/manifests/site.pp. Nous allons créer 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 de marionnettes vérifie régulièrement avec le serveur de marionnettes (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 commandepuppet 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 lesapply. Voici un exemple:

sudo /opt/puppetlabs/bin/puppet apply /path/to/your/manifest/init.pp

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 manifeste principal sur le maître Puppet se trouve à/etc/puppetlabs/code/environments/production/manifests/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:

site.pp example

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 à/tmp/example-ip avec les autorisations-rw-r--r--, avec un contenu qui inclut l'adresse IP publique du nœud.

Vous pouvez soit attendre que l'agent s'enregistre automatiquement auprès du maître, soit exécuter la commandepuppet 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: 128.131.192.11.

Spécifier un nœud

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

Sur le maître, éditezsite.pp:

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

Maintenant, ajoutez les lignes suivantes:

site.pp example

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.

Désormais, Puppet s'assurera qu'un fichier à/tmp/dns existera surns1 etns2. Vous pouvez exécuter la commandepuppet agent --test (à partir de ns1 ou ns2), si vous ne souhaitez pas attendre l'extraction programmée de l'agent Puppet.

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 qu'il supprime les fichiers, remplacezensure parabsent.

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 Puppet, installez le modulepuppetlabs-apache de forgeapi:

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

[.warning] #Warning: n'utilisez pas ce module sur une configuration Apache existante. Il purgera toutes les configurations Apache qui ne sont pas gérées par Puppet.
#

Maintenant, éditezsite.pp:

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

Ajoutez maintenant les lignes suivantes pour installer Apache surhost2:

site.pp example

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. Désormais, la prochaine fois que Puppet mettra à jour host2, il installera le package 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.

Surhost2, 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:Getting Started With Puppet Code: Manifests and Modules.

Related