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

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

Avatar for Karel Minarik 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

Avatar for Karel Minarik

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