On Github BarthV / chef-first-step
Barthélemy Vessemont - Photobox
L'objectif est in fine de faciliter et d'accélérer les processus de configuration et de déploiement d'applications, tout en offrant l'avantage de distribuer et maintenir à jour très simplement les machines actuelles et futures.
Pour ce faire, il est conseillé d'amorcer une transition vers des outils de gestion centralisée de configuration, permettant une flexibilité et une réactivité hors d'atteinte des outils actuels.
Qu'est ce que la configuration, quelles sont ses qualités intrinsèques et qu'attend-on d'elle ?
Comment traduisons nous aujourd'hui techniquement le concept de configuration, où se trouve l'information ?
Quelles sont nos méthodes pour l'administrer ?
Configuration : description du comportement d'un service, de ses composants, de ses interfaces et backends Attentes : on doit pouvoir : la retrouver, la consulter, la comprendre, la regénerer, la versionner, la mettre à jour ... Technique : fichiers, bases de données, tableurs, wiki Administration : manuelle via SSH, traitement de masse RundeckComment configurer ...
... 1 serveur ?
... 100 serveurs ?
... 10000 serveurs ?
;-)
Attention ! :)Plusieurs stratégies peuvent être adoptées :
À la mimine
Via des scripts
Le gestionnaire de configuration
Aujourd'hui Photobox se situe entre la solution 1 et 2 grâce a son système PXE à base de scripts et à ses documentations disponibles
1. On peut maîtriser de manière unitaire toutes les installations et donc facilement identifier les problèmes 1. On dispose d'une connaissance précise et réelle des briques de ses machines. 2. Grosses problématiques quand on s'attaque à un parc multi-distribution / multi-rôle / multi-contexte ... 3. OKAAAYYYY FOOOOO !Concepts de convergence et de divergence dans les configurations d'un parc
On ne touche plus aux serveurs :on en fait la description et ils s'autogèrent !
Une conduite de changement sur les méthodes et les pratiques est donc à mener sur le long terme, car cette transition majeure ne peut être imposée aux équipes
Des outils facilitant l'utilisation et promouvant la gestion de configuration devront être mis à disposition et illustrés. La migration ne peut être au final que progressive et plébicitée
Prenons l'exemple sur l'une des dernières modification réalisée sur les scripts d'installation actuels :
######################## #---- Setup SWAP ----# ######################## if [ `free -tm | grep "Mem:" | awk {'print $2'}` -lt 16000 ] then dd if=/dev/zero of=/data/irenderer.swap bs=1024M count=8 sync mkswap /data/irenderer.swap chmod -v 600 /data/irenderer.swap if [ `grep -i irenderer.swap /etc/fstab -c` -eq 0 ] then echo "# Swap File Irenderer" >> /etc/fstab echo "/data/irenderer.swap swap swap defaults 0 0" >> /etc/fstab fi fi
La mise en place via un gestionnaire de configuration permet d'abstraire le côté système et ne s'interesser qu'à la description :
#------metadata-------# depends 'swap' #------attributes------# default['iprod']['core']['memlimit'] = 16777216 #kB #------description-----# swap_file '/data/irenderer.swap' do size 8192 # MBs persist only_if { node['memory']['total'].to_i < node['iprod']['core']['memlimit'] } end
Plus d'écriture dans fstab, plus besoin de dd/fallocate, plus de swapon ... C'est le script "swap_file" qui manage l'ensemble, gère tous les cas de figures et maintient à jour le fichier swap !
La majeure partie des besoins peuvent se décrire au sein de blocs descriptifs courts et compréhensibles :
directory "/data/" do not_if { Dir.exists?("/data") } owner "root" group "root" mode 0755 action :create end user_account 'root' do manage_home false ssh_keys node['ssh']['root']['authorized_keys'] + node['ssh']['root']['local_keys'] action :modify end template "/etc/perl/CPAN/Config.pm" do source "Config.pm.erb" mode 0644 owner "root" group "root" end node['iprod']['core']['packages'].each do |iprod| package iprod end
Si les primitives natives ou les jeux de scripts de la communauté ne sont pas suffisants pour écrire la description attendue, il faudra développer (ou améliorer) le comportement souhaité au travers d'un language de scripting spécifique.
Ces développements pourront, s'ils concernent des briques standard, être libérés pour profiter de l'expertise et de l'experience de la communauté.
# diff photobox.cfg nrpe-deployer-sart.cfg 20d19 < command[check_disk3]=/usr/lib/nagios/plugins/check_disk $ARG1$
But de l'opération : déployer une nouvelle règle sur les serveurs
include_recipe 'nagios::client' template '/etc/nagios/nrpe.d/photobox.cfg' do source 'photobox.cfg.erb' mode 0644 owner 'root' group 'root' end
Mise en pratique avec le module "globalinstaller" de la machine "deployer" PXE actuellement en production
Démontration avec Chef en mode local
Deux concepts existent au sein de la gestion de configuration et peuvent cohabiter pour profiter au maximum du templating :
Démonstration de la manipulation d'un serveur central
Conduite de changement, outils, spécificités du contexte Photobox, bouleversement des habitudes et des concepts standards, stratégie de migration, complexité et compétences, avantages et inconvénients, vision à long terme ... autre ?
Partagez votre avis !
Avec l'aide de Reveal.js