Les logiciels d'administration système V 1.2. Présentation Comment gérer de multiples...

Preview:

Citation preview

Les logiciels d'administration système

V 1.2

Présentation

Comment gérer de multiples serveurs de type Unix ?

Solution classique : ssh + rsync + scripts shell => pose problème si le parc est étendu et hétérogène

Cfengine est une tentative de réponse à cette problématique : il permet de décrire la configuration d'un ensemble de serveurs/ordinateurs (DNS, NTP, ...)

Puppet est également un outil de ce type

Cfengine

Marc Burgess - University College – Oslo -1993

Permet de configurer des logiciels à partir de modèles/classes et de déployer des configuration

Effectue « toutes » les actions de base d'un administrateur systeme

Cfengine – Installation

Paquets disponibles pour l'ensemble des distributions Linux et des Unix pas trop anciens (Solaris, Aix, …)

Des versions Windows existent (??)

Cfengine – caractéristiques cfengine s'appuie essentiellement sur 4

programmes : cfkey, cfagent, cfservd et cfrun. cfagent : analyse et exécute les fichiers de

configuration. cfrun : lance les cfagent à distance ; cfservd est un « daemon » serveur de fichiers

intégré à cfengine. Il permet également de lancer cfagent sur une sollicitation réseau ;

cfkey génère une bi-clé utilisée pour sécuriser la connexion entre cfagent/cfrun et cfservd ;

Cfengine - les classes

Définies par l'OS, la date, l'adresse IP, adresse MAC, nom DNS, .....

exemple

control: Actionsequence = ( shellcommands )

shellcommands: redhat.Hr01:: "/usr/local/bin/backup" linux.!redhat.Hr23:: "/usr/local/bin/backup" (aix|sun).Hr02:: "/usr/local/bin/backup"

Cfengine -exemple d'utilisation

# cat /var/cfengine/inputs/cfagent.conf

control: actionsequence = ( shellcommands tidy )

shellcommands: "/usr/bin/id"

tidy: /tmp pattern=*~ recurse=inf age=2

Puppet

se présente comme le successeur de cfengine - récent

écrit en Ruby par Luke Kanies Site reductivelabs.com utilisé par Google et de

nombreuses autres entreprises

Puppet – Caractéristiques 1 serveur : PuppetMaster contenant

les configurations communes Des machines ou noeuds qui

exécutent le démon puppetd appliquent la configuration vérifient par défaut toutes les 20

mn Communication chiffrée utilisant

HTTPS (certificats)

Puppet : le langage Il permet de définir

classes (permet de définir les confs de chaque service)

héritage (permet de regrouper les confs communes)

types d’objets particuliers (définis par puppet, ou par des modules ruby utilisateur)

fonctions utilisateur ...

Puppet – Facter disponible sur les noeuds utilisant

Puppetd, il fournit des variables utilisables dans les templates puppet :

Adresse ip Hostname Distribution et version Toutes autres variables locales

définies par l’utilisateur.

Facter : exemple de sortiemarge:~# facterarchitecture => i386domain => lecastel.lanfacterversion => 1.5.1fqdn => marge.lecastel.lanhardwaremodel => i686hostname => margeinterfaces => eth0,venet0ipaddress => 172.16.0.2ipaddress_eth0 => 172.16.0.2kernel => Linuxkernelrelease => 2.6.24-7-pvekernelversion => 2.6.24macaddress => 00:18:51:af:57:20

Les objets - 1

File, permet de demander qu’un fichier existe, dispose de certains droits, et corresponde éventuellement à un certain contenu, fournit statiquement, ou à travers un modèle (template) avec substitution de variables

Service, permet de déclarer un service, de s’assurer qu’il fonctionne, de le redémarrer dans certaines conditions

Les objets – 2

Package, permet de demander l’installation, la mise à jour ou la désinstallation d’un package, en utilisant le système de packaging natif de l’OS utilisé (ports, deb, packages MacOsX etc.)

User, permet de gérer les utilisateurs unix (dans /etc/passwd) indépendamment de l’OS utilisé.

Exemple 1:

Configuration des résolveurs DNSclass resolv {

file { "/etc/resolv.conf": owner => root, group => root, mode => 644, # Le contenu de ce fichier est servi par l'hôte

puppet dans son partage files/etc/resolv.conf source =>

"puppet://puppet/files/etc/resolv.conf" }}

Exemple 2 : fichier dhcp.ppclass dhcp { package { dhcp3-server: ensure => installed, } file { "/etc/dhcp3/dhcpd.conf": owner => root, group => root, mode => 644, source => [

"puppet://puppet/files/dhcpd/dhcpd.conf" ] } service { dhcp3-server: ensure => running, subscribe => [Package[dhcp3-server],

File["/etc/dhcp3/dhcpd.conf]] }}

Mise en oeuvre

Sur Debian : sur le serveur :apt-get install puppetmaster

Sur le client : apt-get install puppet

Pour le détail voir http://www.debian-administration.org/articles/526

Ou sur Howtoforge

L'ecosystème Puppet

Des applications ont été développées

Puppet dashboard : interface Web à Puppet Foreman : gestion web de parc avec Puppet

Remarques

Il est très intéressant d'utiliser un outil de gestion de version comme svn ou encore git pour gérer les fichiers (templates, recettes, …) du fichier puppetmaster

Ceci permet de revenir en arrière et de disposer d'information (quoi ? qui ? Quand ? Pourquoi ?) sur les modification

Pour Debian, il est possible d'utiliser du pre-seeding pour répondre automatiquement aux questions de l'installateur de paquets.

Puppet et Git Installer les paquets Debian git-core

# cd /etc/puppet

# git-init-db Le dépot git est créé dans /etc/puppet. Il servira

à stocker les versions des fichiers de configuration

# git commit -a -c "Chgt DNS" effectue une MAJ du dépôt

# git show log affiche l'historique des MAJ

Git et etckeeper

Git peut être utilisé pour gérer le répertoire /etc Il suffit d'installer le paquet etckeeper qui prend

en charge l'installation

Puppet/Cfengine

Apprentissage plus facile : fichiers de configuration moins complexes

Très puisssant et très expressif Utilisation de Ruby = > empreinte mémoire

supérieure Encore quelques incertitudes pour les sites à

grande échelle (1 serveur gère actuellement jusqu'à 30 clients)

En conclusion

Puppet permet de définir les configurations logicielles utilisées => maîtrise des « bonnes pratiques »

Ne fait pas le déploiement : il faut utiliser des outils comme FAI ou SystemImager. Ces outils sont souvent paramétrés pour utiliser cfengine/puppet dans la foulée de l'installation

Recommended