• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content

Loading…

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

Like this presentation? Why not share!

Cuisiner ses infrastructures avec Chef

on

  • 1,676 views

 

Statistics

Views

Total Views
1,676
Views on SlideShare
1,662
Embed Views
14

Actions

Likes
3
Downloads
16
Comments
0

2 Embeds 14

https://inside.bluekiwi.net 13
https://inside.stagingbk.net 1

Accessibility

Categories

Upload Details

Uploaded via as Apple Keynote

Usage Rights

CC Attribution-NonCommercial LicenseCC Attribution-NonCommercial License

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />
  • <br />

Cuisiner ses infrastructures avec Chef Cuisiner ses infrastructures avec Chef Presentation Transcript

  • Cuisiner ses infrastructures avec Chef Olivier Gutknecht olg@no-distance.net / twitter @olg
  • Load Balancer WebApp WebApp DB DB master Slave Monitoring
  • Varnish Apache Apache Rails App Rails App MySQL MySQL master read slave Nagios
  • Varnish IP ? Ports ? Apache Apache Rails App Rails App IP ? Ports ? IP ? Ports ? Database ? Database ? MySQL MySQL master read slave Slave ? Master ? Nagios IPs ?
  • Le monde est plus compliqué que /etc
  • Comment coordonner déploiement “système” et applicatif ? Comment mettre à jour les configurations globales (multi-machines) ? Comment gérer les versions ? Adapter à l’OS ? Comment minimiser les temps de reconfiguration ?
  • Infrastructure is Code
  • http://www.brooklynstreetart.com/theBlog/wp-content/uploads/2008/12/swedish_chef_bork-sleeper-cell.jpg
  • CHEF *bork bork bork*
  • Vu de loin
  • Vu de loin • Une bibliothèque de contrôle de configurations
  • Vu de loin • Une bibliothèque de contrôle de configurations • Un système de gestion de configurations
  • Vu de loin • Une bibliothèque de contrôle de configurations • Un système de gestion de configurations • Une plateforme d’intégration système
  • Vu de loin • Une bibliothèque de contrôle de configurations • Un système de gestion de configurations • Une plateforme d’intégration système • Une API d’infrastructure
  • Mar 06, 2008 Born 6 mars 2008
  • Jan 05, 2009 Released
  • Client Chef Sur chaque serveur, responsable du maintien de l’état des configurations
  • Serveur Chef L’interlocuteur (unique) des clients chef Maintient la connaissance globale
  • Client Serveur Chef Chef Une API HTTP restful transportant des documents JSON
  • Chef Server Polling Chef Chef Client Client Echange de l’état de configuration Synchronisation des recettes
  • Principes • Idempotent • Logique • Non-crétin par défaut • Bidouillable • TMTOWTDI http://www.flickr.com/photos/gi/518613153/sizes/o/
  • Concepts
  • Nodes Un node == un serveur (en simplifiant) balancer1, webapp1, webapp2, db1, db2, monit1
  • Roles une première abstraction balancer, webapp, db-master, db-slave, monitor
  • Recipes apache ruby rails appdeuzero emacs Les recettes de configuration d’un système: un assemblage de ressources ordonnées définies par des providers utilisant des attributs découverts, préconfigurés ou spécialisés, connaissant leur contexte par l’index global.
  • Duh ?
  • Reprenons calmement
  • ohai !
  • { "dmi": { "bios": { "version": "6.00", "vendor": "Phoenix Technologies LTD" }, }, "kernel": { "machine": "x86_64", "release": "2.6.32-21-generic" }, "platform_version": "10.04", "fqdn": "ubuntu.no-distance.net", "ipaddress": "10.0.1.59", "domain": "no-distance.net", "os": "linux", "uptime": "1 day 12 hours 42 minutes 48 seconds", "platform": "ubuntu" "filesystem": { "/dev/sda1": { "kb_size": "19737268", "fs_type": "ext4", "mount": "/", "percent_used": "8%", }, },
  • Attributs Des informations du noeud ... découvertes par ohai ... rajoutées dans les recipes ... surchargées au besoin
  • default[:kernel][:machine] x86_64 default[:apache][:listen_ports] [80,443] default[:rsyslog][:protocol] tcp default[:mysql][:tunable][:max_conn] 800 default[:appdeuzero][:default_privacy] absolutely_none
  • La vie des nodes • L’état initial est découvert par ohai • Sa configuration est construite par une run list de recipes et de roles • Le chef-client obtient la description des configuration du serveur, l’applique, et renvoie son état • Chef-client gère directement les ressources sur le noeud
  • Une RunList Role Recipe Recipe Resources Recipe Recipe Resources Resources
  • % knife node run_list add i123456 "haproxy"
  • Les ressources Cron, Deploy, Directory, Deploy, Execute, File, Git, Group, Mount, Package, Ruby Block, Script, Service,Template, User, ... package "emacs" do action :install end
  • package "rabbitmq-server" do action :install end service "rabbitmq-server" do supports :status => true, :restart => true, :reload => true action [ :enable, :start ] end template "/etc/rabbitmq/rabbitmq.config" do source "rabbitmq.config.erb" owner "root" group "root" mode 0644 notifies :restart, resources(:service => "rabbitmq-server") end
  • (pour compléter) Chaque ressource est gérée par un provider package: apt, dpkg, freebsd, macports, yum, ... service: init, upstart, smf, launchd, ... group: unix, dscl, windows
  • Exemple: load balancer • Simple ! • Qui a le rôle/recipe de backend ? • Mettre à jour le rôle/recipe de load balancer
  • client_attributes = search(:node, "recipe:appdeuzero")   backends[:readwrite] = client_attributes.map{|cfg| {:hostname=> cfg["hostname"], :fqdn => cfg["fqdn"], :port => cfg["deuzero_port"], :weight => cfg["deuzero_backend_weight"]} } <% @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 %>
  • RecipeLes cookbooks details
  • Cookbooks Cookbooks
  • Pourquoi Chef ?
  • Exemple cloudesque obligatoire 1 1 2 1 Signals Moar! Monitoring Command & Bootstrapping System Updates Control Provisions 2 1 3 1 5 1 3 1 4 1 4 1 Configuration
  • Exemple cloudesque Le monitoring obligatoire signale un noeud down 1 1 2 1 Signals Moar! Monitoring Command & Bootstrapping System Updates Control Provisions 2 1 3 1 5 1 3 1 4 1 4 1 Configuration
  • Exemple cloudesque Démarrage d’une instance obligatoire Retrait d’un noeud EC2, avec role chef et metadata dans Chef 1 1 2 1 Signals Moar! Monitoring Command & Bootstrapping System Updates Control Provisions 2 1 3 1 5 1 3 1 4 1 4 1 Configuration
  • Exemple cloudesque obligatoire Préparation des Instances, EBS, Elastic IPs 1 1 2 1 Signals Moar! Monitoring Command & Bootstrapping System Updates Control Provisions 2 1 3 1 5 1 3 1 4 1 4 1 Configuration
  • Exemple cloudesque obligatoire 1 1 2 1 Signals Moar! Monitoring Command & Bootstrapping System Updates Control Provisions 2 1 3 1 5 1 3 1 4 1 4 1 Configuration Chef reconfigure les noeuds selon les Roles définis
  • Exemple cloudesque obligatoire 1 1 2 1 Signals Moar! Monitoring Command & Bootstrapping System Updates Control Provisions 2 Chef met à jour le 1 3 1 5 1 3 1 monitoring 4 1 4 1 Configuration
  • Global Full-Stack DevOps
  • Ressources www.opscode.com irc.freenode.net #chef lists.opscode.com @opscode