Automatiser son
              infrastructure avec Chef


                               Olivier Gutknecht
                ...
Orage, ô désespoir


 X     X   X   X X
CHEF
http://www.brooklynstreetart.com/theBlog/wp-content/uploads/2008/12/swedish_chef_bork-sleeper-cell.jpg
Mar 06, 2008

Born




       6 mars 2008
Jan 05, 2009

Released
Apr 24, 2009

Funded
Chef en 2 lignes


• Définir un état stable souhaité pour son
  infrastructure
• ... et laisser Chef l’y amener
Vu de loin
Vu de loin


• Un système de gestion de configuration
Vu de loin


• Un système de gestion de configuration
• Une bibliothèque Ruby pour l’implémenter
Vu de loin


• Un système de gestion de configuration
• Une bibliothèque Ruby pour l’implémenter
• Une API REST pour intera...
Principes

• Idempotent
• Extensible
• Introspectable
• Validable
Infrastructure is Code

• Du code, pas des lignes de commandes
• Réutilisable, versionable, commenté
• À un niveau global ...
Chef
                     Server


                      Polling




           Synchronisation des recettes
         Echa...
Le Serveur Chef

Chef
Client
                               Search index (solr, ferret)

Chef
Client       Chef Server   C...
Chef - Web UI
Chef - Web UI
chef-client

• S’authentifie auprès du Chef Server
• Envoie sa configuration locale (via Ohai)
• Exécute les recettes transm...
chef-server

• Garde trace de la configuration des clients
  (dans CouchDB et dans le search index)
• Maintient le livre de...
Un nœud

• Typiquement un système donné (un serveur)
• ... avec une liste de recettes et d’attributs
• ... qui lance régul...
Cookbooks
activemq         erlang        lvm         postfix        stompserver
apache2          fail2ban      man         ...
Resources
 Meta                          HTTP Request                    Route
 Cron                          Ifconfig     ...
Un cookbook
attributes                             Valeurs par défaut, abstractions, customisation
     server.rb
metadata...
Un exemple

le cookbook
 memcached
Meta-data
maintainer         "Opscode, Inc."                             cookbooks/memcached/metadata.rb
maintainer_email ...
Attributes
                                           cookbooks/memcached/attributes/memcached.rb
set_unless[:memcached][:...
Recipe
package "memcached" do                                    cookbooks/memcached/recipes/default.rb
  action :upgrade
...
Template
#                                              cookbooks/memcached/templates/default/memcached.conf.erb
# Configu...
Autres exemples
Exemple: le monitoring




                  http://www.flickr.com/photos/jiathwee/2870629436/sizes/l/
Exemple: le monitoring


•   Doit être intégré avec le déploiement/développement




                                     ...
Exemple: le monitoring


•   Doit être intégré avec le déploiement/développement

•   Utilisation du search index de Chef ...
(oui, tout automatiser)

    fotonauts[:admins] = {
      :kali     => { :sms =>   "3360xxxxxx"   },
      :olg      => { ...
Exemple: Load Balancing

• Simple !
• Chercher quels nœuds ont le rôle de
  backend rails
• Et construire le fichier de con...
# find all nodes with the "picor" (main app) and "search" recipes                         recipe
client_be_attributes = se...
Pratiques extrêmes


    Installation d’un varnish
  patché depuis le trunk SVN
One more thing
  Casserole
read-only 0.6 - WIP read-write 0.8
http://www.flickr.com/photos/jackol/1766679527/sizes/l/




    Q &A

         +
http://wiki.opscode.com
 irc.freenode.net ...
Chef - Paris BlockCamp - Nov 09
Chef - Paris BlockCamp - Nov 09
Upcoming SlideShare
Loading in...5
×

Chef - Paris BlockCamp - Nov 09

2,670

Published on

A short overview (in french) of Opscode Chef in an impromptu session @ Paris BlockCamp, Nov. 28 2009.

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,670
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
71
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide
  • Chef - Paris BlockCamp - Nov 09

    1. 1. Automatiser son infrastructure avec Chef Olivier Gutknecht Fotonauts, Inc. olg@fotonauts.com - twitter.com/olg An impromptu session @ Blockcamp Paris - 28/11/2009
    2. 2. Orage, ô désespoir X X X X X
    3. 3. CHEF
    4. 4. http://www.brooklynstreetart.com/theBlog/wp-content/uploads/2008/12/swedish_chef_bork-sleeper-cell.jpg
    5. 5. Mar 06, 2008 Born 6 mars 2008
    6. 6. Jan 05, 2009 Released
    7. 7. Apr 24, 2009 Funded
    8. 8. Chef en 2 lignes • Définir un état stable souhaité pour son infrastructure • ... et laisser Chef l’y amener
    9. 9. Vu de loin
    10. 10. Vu de loin • Un système de gestion de configuration
    11. 11. Vu de loin • Un système de gestion de configuration • Une bibliothèque Ruby pour l’implémenter
    12. 12. Vu de loin • Un système de gestion de configuration • Une bibliothèque Ruby pour l’implémenter • Une API REST pour interagir
    13. 13. Principes • Idempotent • Extensible • Introspectable • Validable
    14. 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. 15. Chef Server Polling Synchronisation des recettes Echange de l’état de configuration Chef Chef Client Client
    16. 16. Le Serveur Chef Chef Client Search index (solr, ferret) Chef Client Chef Server Cookbooks repository (filesystem) Nodes status repository (couchdb) Chef Client
    17. 17. Chef - Web UI
    18. 18. Chef - Web UI
    19. 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. 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. 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
    22. 22. Cookbooks activemq erlang lvm postfix stompserver apache2 fail2ban man postgresql subversion apparmor gems maradns python sudo apt git memcached quick_start teamspeak aws glassfish mercurial radiant thrift boost god munin rails tomcat6 bootstrap hadoop mysql redmine ubuntu buildessential haproxy nginx resolver varnish capistrano heartbeat nscd rsync xfs chef imagemagick ntp rsyslog zsh couchdb iptables openldap ruby ... django java openssh runit djbdns jira openvpn screen drbd keepalived packages solr dynomite kickstart passenger sqlite ec2 logrotate perl ssh emacs logwatch php known_hosts
    23. 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. 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
    25. 25. Un exemple le cookbook memcached
    26. 26. Meta-data maintainer "Opscode, Inc." cookbooks/memcached/metadata.rb maintainer_email "cookbooks@opscode.com" license "Apache 2.0" description "Installs memcached and provides a define to set up an instance of memcache via runit" long_description IO.read(File.join(File.dirname(__FILE__), 'README.rdoc')) version "0.8" depends "runit" %w{ ubuntu debian }.each do |os|   supports os end attribute "memcached/memory",   :display_name => "Memcached Memory",   :description => "Memory allocated for memcached instance",   :default => "64"   attribute "memcached/port",   :display_name => "Memcached Port",   :description => "Port to use for memcached instance",   :default => "11211"   attribute "memcached/user",   :display_name => "Memcached User",   :description => "User to run memcached instance as",   :default => "nobody"
    27. 27. Attributes cookbooks/memcached/attributes/memcached.rb set_unless[:memcached][:memory] = 64 set_unless[:memcached][:port] = 11211 set_unless[:memcached][:user] = "nobody"
    28. 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. 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 %>  
    30. 30. Autres exemples
    31. 31. Exemple: le monitoring http://www.flickr.com/photos/jiathwee/2870629436/sizes/l/
    32. 32. Exemple: le monitoring • Doit être intégré avec le déploiement/développement http://www.flickr.com/photos/jiathwee/2870629436/sizes/l/
    33. 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/
    34. 34. (oui, tout automatiser) fotonauts[:admins] = { :kali => { :sms => "3360xxxxxx" }, :olg => { :sms => "3360xxxxxx" }, :ber => { :sms => "3360xxxxxx" }, :aymerick => { :sms => "3360xxxxxx" }, :manu => { :sms => "3360xxxxxx" }, :fred => { :sms => "3360xxxxxx" }, }
    35. 35. Exemple: Load Balancing • Simple ! • Chercher quels nœuds ont le rôle de backend rails • Et construire le fichier de configuration en fonction
    36. 36. # find all nodes with the "picor" (main app) and "search" recipes recipe client_be_attributes = search(:node, "recipe:picor") client_sr_attributes = search(:node, "recipe:searchr")   backends[:mainapp] = client_be_attributes.map{|cfg| {:hostname=> cfg["hostname"], :fqdn => cfg["fqdn"], :port => cfg["picor_port"], :weight => cfg["picor_backend_weight"]}} backends[:searchr] = client_sr_attributes.map{|cfg| {:hostname=> cfg["hostname"], :fqdn => cfg["fqdn"], :port => cfg["searchr_port"], :weight => cfg["searchr_backend_weight"]}} <% template varnish.conf @backends.each do |backend_name, servers|   next if servers.blank?   servers.each do |server| %> backend <%= backend_name %>_<%= server[:hostname] %> {   .host = "<%= server[:fqdn] %>";   .port = "<%= server[:port] %>"; } <%   end end %> <% unless @backends[:searchr].empty? %>   if (req.http.host ~ "search") {     // search request     set req.backend = searchr;   } <% end %> ...
    37. 37. Pratiques extrêmes Installation d’un varnish patché depuis le trunk SVN
    38. 38. One more thing Casserole
    39. 39. read-only 0.6 - WIP read-write 0.8
    40. 40. http://www.flickr.com/photos/jackol/1766679527/sizes/l/ Q &A + http://wiki.opscode.com irc.freenode.net #chef
    1. A particular slide catching your eye?

      Clipping is a handy way to collect important slides you want to go back to later.

    ×