puppetCommencer avec la marionnette

Remarques

Cette section fournit une vue d'ensemble de ce qu'est une marionnette et pourquoi un développeur peut vouloir l'utiliser.

Il devrait également mentionner tous les grands sujets de la marionnette et établir un lien avec les sujets connexes. La documentation de la marionnette étant nouvelle, vous devrez peut-être créer des versions initiales de ces rubriques connexes.

Versions

Marionnette Open Source

Version Date de sortie
4.7.0 2015-09-22
4.6.0 2015-08-10
4.5.0 2015-05-17
4.4.0 2016-03-16
4.3.0 2015-11-17
4.2.0 2015-06-24
4.1.0 2015-05-19
4.0.0 2015-04-15
3.8.0 2015-04-28
3.7.0 2014-09-04
3.6.0 2014-05-15
3.5.0 2014-04-03
3.4.0 2013-12-19
3.3.0 2013-09-12
3.2.0 2013-05-14
3.1.0 2013-02-04
3.0.0 2012-09-28
2.7.0 2011-06-17
2.6.0 2010-07-20
0,25,0 2009-09-05
0,24,0 2007-12-13
0.23.0 2007-01-20
0.22.0 2007-01-06
0,20.0 2006-10-18
0.19.0 2006-09-07
0.18.0 2006-06-14
0,17,0 2006-05-16
0,16,0 2006-04-21
0,15,0 2006-03-13
0,14,0 2006-03-06
0.13.0 2006-02-09
0.12.0 2006-01-26
0.11.0 2006-01-17
0.10.0 2006-01-09
0.9.3 2006-01-03
0.9.2 2005-11-22

Qu'est-ce que la marionnette et pourquoi devrais-je m'en soucier?

Puppet est une solution de gestion de configuration. Les utilisateurs décrivent l'état souhaité d'un serveur ou d'un logiciel et la gestion de la configuration atteint cet état. Cela apporte les avantages suivants:

  • Les configurations peuvent être reproduites exactement de la même manière, autant de fois que nécessaire
  • Les configurations de tous les logiciels et serveurs sont stockées dans un emplacement central. Cela rend le contrôle des versions et des sauvegardes facilement réalisable
  • Les modifications apportées à tous les serveurs se propagent à l'ensemble de l'infrastructure en quelques minutes, sans qu'il soit nécessaire de se connecter directement à une machine.
  • Tout est décrit dans la même langue, ce qui facilite la configuration de nouveaux logiciels
  • Les modules sont similaires aux bibliothèques et permettent de consolider les configurations. Des modules pour tous les principaux progiciels existent déjà, ce qui les rend extrêmement faciles à installer
  • Les serveurs peuvent partager des informations entre eux, influençant la configuration des autres serveurs. Par exemple, un nouveau serveur peut s'inscrire automatiquement à la solution d'équilibrage de charge et de surveillance

Puppet utilise Ruby pour décrire l'état souhaité d'un serveur, appelé nœud . Il le fait avec l'utilisation de primitives appelées types de ressources . Par défaut, toutes les 30 minutes, l' agent de la marionnette s'authentifie auprès du serveur de marionnettes. Il envoie ensuite une liste de propriétés de lui-même appelées faits . Le serveur examine les faits et les fichiers de configuration appelés manifestes et compile l'état souhaité pour le noeud. Il renvoie ensuite cette configuration au nœud, où l'agent l'applique.

Pour vous donner une idée de sa puissance, voici quelques exemples de complexité croissante qui mettent en évidence ce que la marionnette peut faire pour vous.

Exemple: utilisateur

Cet exemple crée le nom d' utilisateur sur le noeud myserver et l'ajoute à la roue de groupe.

node 'myserver' {
    user { 'username':
      ensure => 'present',
      groups => ['wheel'],
    }
}

Ce fichier qui serait stocké sur le serveur de marionnettes est le manifeste . Le type de ressource dans cet exemple est utilisateur . Chaque type de ressource a des propriétés facultatives et obligatoires. Dans cet exemple, assurez -vous que obligatoire et que les groupes sont facultatifs. Cette configuration spécifique ne serait appliquée qu'à myserver . Vous pouvez appliquer des configurations à tous les nœuds en les plaçant en dehors d'une définition de nœud.

Il est possible de prendre quelques définitions de ressources et de les stocker en tant que modules . Un module est similaire à une bibliothèque. Ces modules peuvent être partagés en ligne et vous en trouverez généralement un pour chaque logiciel majeur. Le moyen officiel de partager des modules est la forge de marionnettes: https://forge.puppet.com/

Exemple: Postgres

Cet exemple installe un serveur postgres sur le noeud mon_serveur et crée une base de données db, propriété de nom d' utilisateur, identifié par mot de passe. Il le fait en utilisant le module postgresql.

node 'myserver' {
    class { 'postgresql::server': }
    
    postgresql::server::db { 'db':
        user     => 'username',
        password => 'password',
    }
}

Dans ce cas, postgresql est un module. Le module lui-même prend soin d'identifier le système d'exploitation, de télécharger et d'installer le programme, puis de le configurer en fonction du manifeste. Ceci est un exemple de base, mais le module permet beaucoup de personnalisation.

Notez qu'il n'est pas nécessaire de connaître SQL ou comment installer un serveur postgres pour le faire. Les modules officiels sont bien entretenus et fournissent une configuration de base saine et sécurisée.

Il est également possible d'utiliser les faits dans les manifestes. Les faits agissent comme des variables.

Exemple: Conditions utilisant des faits

Cet exemple utilise le module rsyslog pour configurer rsyslog sur toutes les machines non Windows.

if $osfamily != 'windows' {
  class { 'rsyslog::client': }
}

$ osfamily est un fait. Ces faits sont rassemblés chaque fois que l'agent de marionnettes fonctionne. Notez que cette définition étant en dehors d'une définition de nœud, elle est appliquée à tous les nœuds. Cependant, rsyslog :: client ne sera exécuté que sur les noeuds qui n'exécutent pas Windows.

Puisque la marionnette utilise le ruby, des éléments programmatiques tels que les flux de contrôle et les variables peuvent être utilisés dans les manifestes.

Avec l'ajout de PuppetDB, vous pouvez partager des informations entre plusieurs nœuds. Cela permet à un nœud d'influencer la configuration sur un nœud différent. Les exemples classiques incluent les équilibreurs de charge ou les solutions de surveillance.

Exemple: Enregistrement d'un hôte avec surveillance à l'aide de ressources exportées

Cet exemple crée une ressource exportée sur un nœud, puis importe cette ressource sur le serveur de surveillance, en ajoutant l'hôte à la surveillance. Il utilise le module de marionnettes Icinga2.

@@icinga2::object::host { $::fqdn:
  display_name     => $::fqdn,
  ipv4_address     => $::ipaddress_eth0,
}

node 'icinga2' {
    Icinga2::Object::Host <<| |>> { }
}

@@ icinga2 :: object :: host crée un objet de définition de l'hôte. Cela est créé par chaque nœud qui exécute ce code. Le @@ le marque comme une ressource exportée . Généralement, les nœuds ne partagent pas les informations dans la marionnette. Les ressources exportées permettent de le faire.

Notez que toutes les valeurs de propriété dans la définition d'hôte sont des faits. Cela signifie qu'ils seront différents pour chaque nœud qui l'exécute.

Enfin, la ressource exportée est importée par le noeud icinga2 . Le module Icinga2 est chargé de s'assurer que les fichiers de configuration corrects sont créés et rechargés.

Est-ce pour vous?

Si vous effectuez des déploiements, configurez vos applications sur plusieurs serveurs et devez vous connecter à vos serveurs et apporter des modifications à l'infrastructure, aux applications, aux pré-requis, etc. La marionnette peut certainement vous aider.

À part tout cela, si vous manipulez une grande infrastructure et que vous souhaitez une gestion centralisée, vous pouvez également consulter.

Avant de démarrer

Avant de décider de travailler sur une marionnette, il y a peu de choses à savoir.

  1. le travail des marionnettes à la fois dans l'architecture client-serveur (largement utilisée) et dans les machines individuelles (spécialement à des fins de test)

  2. puppet master ne peut être configuré que sur une machine Linux (machine maître / nœud), Windows ne peut être utilisé qu'en tant que client (machine gérée / nœud)

  3. si vous configurez master, vous devez être conscient de l'utilisation de la machine Linux et des commandes de base

  4. la marionnette fournit son propre langage de configuration qui ressemble à json

Documentation officielle

Puppet fournit une documentation officielle à la fois pour les versions Open Source et Enterprise. vous pouvez le trouver ici

Installation

Configuration requise

Cependant, le service maître Puppet nécessite beaucoup de ressources et doit être installé sur un serveur dédié robuste.

  • Au minimum, votre serveur maître Puppet doit avoir deux cœurs de processeur et au moins 1 Go de RAM.
  • Pour desservir confortablement au moins 1 000 nœuds, il doit comporter 2 à 4 cœurs de processeur et au moins 4 Go de RAM.

Vérifiez votre configuration réseau:

Dans un déploiement agent / maître, vous devez préparer votre réseau pour le trafic de Puppet.

  • Pare-feu: le serveur maître Puppet doit autoriser les connexions entrantes sur le port 8140 et les noeuds d'agent doivent pouvoir se connecter au maître sur ce port.
  • Résolution de nom: chaque nœud doit avoir un nom d'hôte unique. Le DNS avant et arrière doit être configuré correctement.

Remarque: Le nom d'hôte maître Puppet par défaut est marionnette. Vos nœuds d'agent peuvent être prêts plus tôt si ce nom d'hôte est résolu par votre maître Puppet.

L'heure doit être définie avec précision sur le serveur maître Puppet qui agira en tant qu'autorité de certification. Vous devriez probablement utiliser NTP.


Installation du serveur de marionnettes

Puppet fournit des paquets officiels qui installent Puppet Server 2.4 et tous ses prérequis sur les plates-formes suivantes.

Red Hat Enterprise Linux

  • Enterprise Linux 6
  • Enterprise Linux 7

Debian

  • Debian 7 (Wheezy)
  • Debian 8 (Jessie)

Ubuntu

  • Ubuntu 12.04 (précis)
  • Ubuntu 14.04 (Trusty)
  • Ubuntu 15.10 (Wily)
  • Ubuntu 16.04 (Xenial)

Activer les référentiels de paquets de marionnettes

Enterprise Linux 7

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

Pour les autres versions, regardez ici

Installation du maître des marionnettes

yum install puppetserver

ou

apt-get install puppetserver

Puppet Server est configuré pour utiliser 2 Go de RAM par défaut. Pour changer de look ici

Démarrer le service Puppet Server:

systemctl start puppetserver

ou

service puppetserver start