Deploy/Puppet

De TartareFR
Aller à la navigation Aller à la recherche

Introduction

Ce document décrit le déroulement de l'installation pas à pas de puppet.

Puppet permet d'automatiser un grand nombre de tache d'administration, comme l'installation de logiciels, de services ou encore de modifier des fichiers.Puppet permet de faire cela de manière centralisée ce qui permet d'administrer et de mieux contrôler un grand nombre de serveur hétérogènes ou homogènes.Puppet fonctionne en mode Client / Serveur. Sur chaque machine un client va être installé et c'est lui qui va contacter le PuppetMaster, le serveur, par le biais de communication HTTPS, et donc SSL, un système pki est fourni.

Puppet a été développé en Ruby le rendant multiplateforme : bsd (free, MACos ...) ,linux (redhat, debian, suse ...), sun (opensolaris ...)

Reductive Labs, la société éditant Puppet, a développé un produit complémentaire, nommé Facter.Cette application permet de lister des éléments propres aux systèmes administrés, comme le nom de machine, l'adresse ip, la distribution, des variables d'environnement utilisables dans les templates de puppet. Puppet gère les templates.

Installation

Installation du serveur ( puppetmaster )

yum install puppet puppet-server

Installation des clients

yum install puppet

Configuration

Configuration du Serveur

Il est à noter que puppetca.conf et puppetmasterd.conf sont des liens symboliques sur le fichier puppetd.conf

Fichier <path>puppetd.conf</path>

[puppet]
    # Where Puppet stores dynamic and growing data.
    # The default value is '/var/puppet'.
    vardir = /var/lib/puppet

    # The Puppet log directory.
    # The default value is '$vardir/log'.
    logdir = /var/log/puppet

    # Where Puppet PID files are kept.
    # The default value is '$vardir/run'.
    rundir = /var/run/puppet

    # Where SSL certificates are kept.
    # The default value is '$confdir/ssl'.
    ssldir = $vardir/ssl

#    factpath = $vardir/lib/facter
#    pluginsync = true
 
[puppetd]
    # The file in which puppetd stores a list of the classes
    # associated with the retrieved configuratiion.  Can be loaded in
    # the separate ``puppet`` executable using the ``--loadclasses``
    # option.
    # The default value is '$confdir/classes.txt'.
    classfile = $vardir/classes.txt

    # Where puppetd caches the local configuration.  An
    # extension indicating the cache format is added automatically.
    # The default value is '$confdir/localconfig'.
    localconfig = $vardir/localconfig

    templatedir = $vardir/templates

Puppet utilise des certificats et est donc sensible à la résolution de nom. Il faut éditer le fichier /etc/hosts afin de renseigner tous les hosts qui vont se servir de puppet.

On va maintenant autoriser les hôtes distants à se connecter au puppetmaster en ajoutant une ligne par host géré celui-ci au fichier <path>fileserver.conf</path>

allow 192.168.0.1

On créer l'arborescence nécessaire au puppetmaster

mkdir /etc/puppet/manifests/classes
mkdir /var/lib/puppet/facter
mkdir /var/lib/puppet/files
mkdir /var/lib/puppet/templates
chown puppet:puppet /var/lib/puppet/*

Il faut maintenant créer la configuration initiale de puppet, sans cela, le daemon ne se lance pas.

Fichier <path>/etc/puppet/manifests/site.pp</path>

import "classes/*"

node default {
        include sudo
}

Fichier <path>/etc/puppet/manifests/classes/sudo.pp</path>

# /etc/puppet/manifests/classes/sudo.pp

class sudo {
        file { "/etc/sudoers":
                owner => "root",
                group => "root",
                mode  => 440,
                content => template("sudoers.erb")
        }
}

et on place une copie du fichier /etc/sudoers dans le répertoire de templates

cp /etc/sudoers /var/lib/puppet/templates/sudoers.erb

On peut maintenant lancer le serveur.

/etc/init.d/puppetmaster start

le fichier <path>/etc/sysconfig/puppetmaster</path> n'a pas besoin d'être modifié

Configuration des clients

Fichier <path>/etc/sysconfig/puppet</path>

# The puppetmaster server
PUPPET_SERVER=ld1.b2pweb.com

# If you wish to specify the port to connect to do so here
#PUPPET_PORT=8140

# Where to log to. Specify syslog to send log messages to the system log.
PUPPET_LOG=/var/log/puppet/puppet.log

# You may specify other parameters to the puppet client here
#PUPPET_EXTRA_OPTS=--waitforcert=500

Mais avant de lancer le daemon, on va l'essayer :

puppetd --test --waitforcert 60 --verbose --debug --server=ld1.bdfweb.com

Le programme bloque sur un problème de certificat non-signé. En effet celui-ci généré au premier lancement de puppetd, et n'a pas encore été signer par le serveur. On arrête le programme avec un petit [Ctrl-C].

Firewall

Les ports 8139 et 8140 doivent être ouverts sur le serveur et les clients.

Démarrage du service

Acceptation des clients par le serveur

Sur le serveur, on lance

puppetca --list

pour visualiser tous les hosts qui n'ont pas encore de certificat signé par le serveur.

On les signe un par un avec

puppetca --sign CERTIFICAT-NAME

ou tous en même temps

puppetca --sign --all

Maintenant on peut lancer le daemon puppetd sur tous les clients.

Problèmes éventuels

Lors de la réinstallation d'un hôte, les certificats ne correspondent plus.

err: Could not request certificate: Retrieved certificate does not match private key; please remove certificate from server and regenerate it with the current key

Il faut donc purger cet hôte sur le serveur

puppetca --clean HOST

Sur le client, il faut effacer récursivement tous les fichiers du répertoire /var/lib/puppet/ssl, puis lancer le daemon en mode standalone.

puppetd --test --waitforcert 60 --verbose --debug --server=ld1.bdfweb.com