les logiciels d'administration système v 1.2. présentation comment gérer de multiples...
TRANSCRIPT
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
Cfengine : liens
http://2001.jres.org/actes/cfengine.pdf
http://cfengine.org http://cfwiki.org
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