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
4. We’re hiring! We’re hiring!
Vojtěch Hýža Karel Minařík
Social Insider elasticsearch.com
@vhyza @karmiq
Shell’s Kitchen
5.
6. 1 README 15 mins
2 “Hello World” 15 mins
3 “Hello Cloud” 30 mins
Shell’s Kitchen
7. “Enable the reconstruction of the business
from nothing but a source code repository,
an application data backup, and bare metal
resources”
— Jesse Robins, Opscode
Shell’s Kitchen
8. “SSH and a for loop
is not a solution”
Luke Kanies, inventor of Puppet
2
9 7
3 .1 -
. 18 s u
1 29 udo
4. s
17 er "
in erv
v e r @$ s y es tart p
s er ser -- res r/
a
e a
f or h $u pdat inx al/v
ss m
u ng oc
10. # Install Nginx from package
#
package "nginx"
# Create user and group for Nginx
#
user node[:nginx][:user] do
comment "Nginx User"
system true
add .
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
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. Chef Concepts
database
database-‐1
Servers
Roles Nodes
directory "/tmp/something" do
owner "root"
group "root"
mode "0755"
action :create
{version: "1"} end
Attributes Recipes
Templates, Data Bags, Static files, Libraries, ...
Cookbooks contains resources & providers
Shell’s Kitchen
13. 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
Shell’s Kitchen
15. Chef Server
Chef $ chef-‐client
Server database-‐1
Servers
Nodes
…"
* "
ata
Cookbooks
Roles
e:d
Nodes
nam
Data bags
$ knife status
sh
Full Text Search
… $ knife search node …
e s
$ knife cookbook upload …
nif
$ k
Cookbooks Workstation
Shell’s Kitchen
16.
17. Load Balancer
Application 1 Application 1 Application 1
Database elasticsearch A
Redis | PostgreSQL
elasticsearch B
Shell’s Kitchen
19. Demo 2: “Hello Cloud” with Chef Server
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 elasticsearch nodes
‣ 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
Shell’s Kitchen
20. INFRASTRUCTURE AS CODE, DEVOPS, CHEF
Resources
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