Une gestion efficace du changement de vos structures de données relationnelle...
Chef - Paris BlockCamp - Nov 09
1. Automatiser son
infrastructure avec Chef
Olivier Gutknecht
Fotonauts, Inc.
olg@fotonauts.com - twitter.com/olg
An impromptu session @
Blockcamp Paris - 28/11/2009
14. Infrastructure is Code
• Du code, pas des lignes de commandes
• Réutilisable, versionable, commenté
• À un niveau global de l’infrastructure
• “Quasi” déclaratif
15. Chef
Server
Polling
Synchronisation des recettes
Echange de l’état de configuration
Chef Chef
Client Client
16. Le Serveur Chef
Chef
Client
Search index (solr, ferret)
Chef
Client Chef Server Cookbooks repository (filesystem)
Nodes status repository (couchdb)
Chef
Client
19. chef-client
• S’authentifie auprès du Chef Server
• Envoie sa configuration locale (via Ohai)
• Exécute les recettes transmises par le serveur
20. chef-server
• Garde trace de la configuration des clients
(dans CouchDB et dans le search index)
• Maintient le livre de recettes (les cookbooks)
• Fournit aux clients leur configuration et leurs
recettes
21. Un nœud
• Typiquement un système donné (un serveur)
• ... avec une liste de recettes et d’attributs
• ... qui lance régulièrement chef-client pour
appliquer les recettes
23. Resources
Meta HTTP Request Route
Cron Ifconfig Ruby Block
Deploy Link SCM
Directory Mount Script
Execute Package Service
File Remote Directory Template
Group Remote File User
Un provider compare l’état voulu d’une resource
avec l’état du système et prend les actions nécessaires
Par exemple, il existe des “providers” rpm, apt-get ou gem pour les resources “Package”
24. Un cookbook
attributes Valeurs par défaut, abstractions, customisation
server.rb
metadata.rb Description, documentation des attributs
metadata.json
recipes
default.rb Recette par défaut pour le cookbook
server.rb Variante spécialisée
client.rb Variante spécialisée
templates
default Fichiers génériques de templates de configuration
my.cfn.erb
redhat Fichiers spécifiques à un système remplaçant les génériques
my.cfn.erb
libraries Bibliothèque de fonctions Ruby arbitraires
my_specific_code.rb
28. Recipe
package "memcached" do cookbooks/memcached/recipes/default.rb
action :upgrade
end
package "libmemcache-dev" do
action :upgrade
end
service "memcached" do
action :nothing
end
template "/etc/memcached.conf" do
source "memcached.conf.erb"
owner "root"
group "root"
mode "0644"
variables(
:ipaddress => node[:ipaddress],
:user => node[:memcached][:user],
:port => node[:memcached][:port],
:memory => node[:memcached][:memory]
)
notifies :restart, resources(:service => "memcached"), :immediately
end
29. Template
# cookbooks/memcached/templates/default/memcached.conf.erb
# Configured by Chef. Local changes will be lost.
#
# Log memcached's output to /var/log/memcached
logfile /var/log/memcached.log
# Start with a cap of 64 megs of memory. It's reasonable, and the daemon default
# Note that the daemon will grow to this size, but does not start out holding this much
# memory
-m <%= @memory %>
# Default connection port is 11211
-p <%= @port %>
# Run the daemon as root. The start-memcached will default to running as root if no
# -u command is present in this config file
-u <%= @user %>
# Specify which IP address to listen on. The default is to listen on all IP addresses
# This parameter is one of the only security measures that memcached has, so make sure
# it's listening on a firewalled interface.
-l <%= @ipaddress %>
32. Exemple: le monitoring
• Doit être intégré avec le déploiement/développement
http://www.flickr.com/photos/jiathwee/2870629436/sizes/l/
33. Exemple: le monitoring
• Doit être intégré avec le déploiement/développement
• Utilisation du search index de Chef pour configurer
dynamiquement le monitoring
http://www.flickr.com/photos/jiathwee/2870629436/sizes/l/