Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Shell's Kitchen: Infrastructure As Code (Webexpo 2012)

4e515deb518e9195f0dc45ec2af6a541?s=47 Karel Minarik
September 21, 2012

Shell's Kitchen: Infrastructure As Code (Webexpo 2012)

Slides for the tutorial by Karel Minarik and Vojtech Hyza at the Webexpo 2012 conference.

Please see the GitHub repositories for the code:

* http://git.io/chef-solo-hello-world
* http://git.io/chef-hello-cloud


Karel Minarik

September 21, 2012


  1. Shell’s Kitchen Ano, Chefe! Karel Minařík & Vojtěch Hýža

  2. Shell’s Kitchen Karel Minařík elasticsearch @karmiq Vojtěch Hýža Social Insider

  3. 2 separate deployments 2 dev|ops > 20 servers in EC2

  4. Shell’s Kitchen Karel Minařík elasticsearch.com @karmiq Vojtěch Hýža Social Insider

    @vhyza We’re hiring! We’re hiring!
  5. None
  6. Shell’s Kitchen 1 2 3 README “Hello World” “Hello Cloud”

    15 mins 15 mins 30 mins
  7. Shell’s Kitchen “Enable the reconstruction of the business from nothing

    but a source code repository, an application data backup, and bare metal resources” — Jesse Robins, Opscode
  8. “SSH and a for loop is not a solution” Luke

    Kanies, inventor of Puppet for server in 2 ssh $user@$server "sudo su - m update --yes nginx restart ocal/var/ap
  9. Shell’s Kitchen Infrastructure As Code Automation Repeatability Agility Scalability Disaster

    Recovery Stephen Nelson-Smith, Test-Driven Infrastructure with Chef, p. 3-4
  10. # Install Nginx from package # package "nginx" # Create

    user and group for Nginx # user node[:nginx][:user] do comment "Nginx User" system true shell "/bin/false" end group node[:nginx][:user] do members ['ec2-user', node[:nginx][:user]] end # Create service for Nginx (/sbin/service nginx) # service "nginx" do supports :status => true, :restart => true, :reload => true action [ :enable, :start ] end # Create log directory # directory node[:nginx][:log_dir] do mode 0755 owner 'root' recursive true end # Create Nginx main configuration file # template "nginx.conf" do path "#{node[:nginx][:dir]}/nginx.conf" source "nginx.conf.erb" owner 'root' mode 0644 add  .
  11. What is Chef? An open-source framework, tool and API for

    infrastructure provisioning and management, maintained and supported by Opscode. You can use it to maintain a single server for your Wordpress blog, or a cluster of machines in production with equal ease. You can re-use knowledge and code from the larger #devops community and use the tooling provided by surrounding ecosystem.
  12. Shell’s Kitchen Chef Concepts Recipes Cookbooks contains resources & providers

    {version:  "1"} Attributes Templates, Data Bags, Static files, Libraries, ... Nodes database-­‐1 directory "/tmp/something" do owner "root" group "root" mode "0755" action :create end database Roles Servers
  13. Shell’s Kitchen Demo 1: “Hello World” with Chef Solo http://git.io/chef-solo-hello-world

    1. Install Nginx 2. Add a simple website for Nginx 3. Use node attributes in the template 4. Launch the node in Amazon EC2
  14. http://vagrantup.com

  15. Shell’s Kitchen Chef Server Cookbooks Nodes database-­‐1 Servers Workstation Cookbooks

    Roles Nodes Data bags Full Text Search … Chef Server $  knife  ssh  name:data*  "…" $  knife  status $  knife  search  node  … $  knife  cookbook  upload  … $  chef-­‐client
  16. None
  17. Shell’s Kitchen Load Balancer Application 1 Application 1 Application 1

    Database Redis | PostgreSQL elasticsearch A elasticsearch B
  18. https://rubygems.org

  19. Shell’s Kitchen Demo 2: “Hello Cloud” http://git.io/chef-hello-cloud ‣ Deploy a

    Ruby On Rails application on EC2 from a “zero state” ‣ 1 load balancer (HAproxy), 3 application servers (Thin+Nginx) ‣ 1 database node (PostgreSQL, Redis) ‣ 2-nodes elasticsearch cluster ‣ Install Ruby 1.9.3 via RVM ‣ Clone the application from (forked) GitHub repository ‣ init.d scripts and full configuration for every component ‣ Restore data from backup (database and search index) ‣ Monitor every part of the stack ‣ Under 30 minutes
  20. Thanks! d

  21. Resources INFRASTRUCTURE AS CODE, DEVOPS, CHEF http://wiki.opscode.com/display/chef/Guides http://wiki.opscode.com/display/chef/Resources http://wiki.opscode.com/display/chef/Chef+Solo http://wiki.opscode.com/display/chef/Architecture+Introduction

    http://agilesysadmin.net/ec2-outage-lessons http://www.aosabook.org/en/puppet.html http://devopsanywhere.blogspot.it/2011/10/puppet-vs-chef-fight.html http://www.opinionatedprogrammer.com/2011/06/chef-solo-tutorial-managing-a-single-server-with-chef/ http://blog.nistu.de/2012/03/04/reusability-in-configuration-management-systems/ http://www.slideshare.net/infochimps/chefconf-2012-13016159/23 http://vagrantup.com/v1/docs/provisioners.html