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

Shell's Kitchen: Infrastructure As Code (Webexp...

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
Tweet

More Decks by Karel Minarik

Other Decks in Technology

Transcript

  1. 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
  2. “SSH and a for loop is not a solution” Luke

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

    Recovery Stephen Nelson-Smith, Test-Driven Infrastructure with Chef, p. 3-4
  4. # 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  .
  5. 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.
  6. 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
  7. 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
  8. 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
  9. Shell’s Kitchen Load Balancer Application 1 Application 1 Application 1

    Database Redis | PostgreSQL elasticsearch A elasticsearch B
  10. 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
  11. 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