Stack kicker devopsdays-london-2013
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share

Stack kicker devopsdays-london-2013

  • 1,120 views
Uploaded on

 

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
1,120
On Slideshare
1,096
From Embeds
24
Number of Embeds
1

Actions

Shares
Downloads
4
Comments
0
Likes
1

Embeds 24

https://twitter.com 24

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. StackKickerCreate, provision, delete instances Zero overhead for small projects(or self-contained larger projects)
  • 2. The ChallengeMasterless Puppet – single repo for vagrant dev environment, AWS stage & production
  • 3. The ChallengeFull 8 role stack dev/stage/prod deploys to ourOpenStack environment, including Chef server
  • 4. Why another tool?Needed to easily & repeatedly build out an application stack – anti snowflake!
  • 5. Why another tool? Wanted to be able to build from nothing(or the overhead of getting on the “production” chef environment was too much)
  • 6. Why another tool?The entire stack config is in git, if you want it.
  • 7. Why another tool?Needed to build in different regions & AZ
  • 8. Why another tool? Leverage & enforce good CM Chef Server – it’s just another role Masterless Puppet, git baby.You can add other CM as you need..
  • 9. What’s in a stack?A collection of nodes that implement your application
  • 10. What’s in a stack config?• AWS/OpenStack/whoever details• DNS details – DNSaaS baby!• Hostname Template• Defaults – Region/AZ, flavor, image, ssh key, Chef Environment• Your roles
  • 11. Roles• A role as is used to create X nodes• Roles: haproxy, chef, yourapp, db, whatever – In our Chef environment, this matches our chef roles
  • 12. Roles• Roles have several properties – Name – matches chef role – Count – how many of these – Floating IP – attach known IP to this instance – Post Install script – run after instance create – Publish IP to DNS (public, private, wildcard) – Region/AZ – Custom cloud-init, flag as Chef Server, other special cases
  • 13. Stackfile – your stack config• Simple Ruby Hash based config – This may change, it’s a little too flexible – But allows for easy inheritance, template & overriding defaults & inherited settings – It’s not YAML (YAML is evil)
  • 14. Enough, show me alreadyrentpro-bmtw => { :provider => AWS, :aws_access_key_id => ENV[‘AWS_ACCESS_KEY’], :aws_secret_access_key => ENV[AWS_SECRET_KEY], :keypair => jobdoneright’, :region => eu-west-1, :availability_zone => eu-west-1a, :flavor_id => t1.micro, :image_id => ami-ffecde8b, :dns_domain => bmtw.net, :dns_id => Z2NT1FUYUEREUK, :roles => { rentpro-db => { :count => 1, :publish_private_ip => true, :flavor_id => m1.small }, rentpro-web => { :count => 0, :dns_wildcard => true } } }
  • 15. Multi-AZ, assign statics etcStacks[’my-template] = { # standard AUTH details, service endpoints, hostname templates name_template => %s-%s-%s%04d, # service-site-role0001 :roles => { :chef => { :chef_server => true, # we are the chef server mofo! :cloud_config_yaml => chef-cloud-config.yaml, .. } :powerdns => { :count => 3, :floating_ips => [NS1, NS2, NS3] }, :haproxy => { :count => 3, :floating_ips => [HAPROXY1, HAPROXY2, HAPROXY3] } .. }# use my-template as a template..Stacks[public-prod] = Marshal.load(Marshal.dump(Stacks[’my-template]))# tweak some stuff# default pattern for striping 3 nodes across 3x AZstripe_3az = [az-1.region-a.geo-1, az-2.region-a.geo-1, az-3.region-a.geo-1]Stacks[public-prod][az-1.region-a.geo-1] = { image_id => 75845 }Stacks[public-prod][az-2.region-a.geo-1] = { image_id => 67074 }Stacks[public-prod][az-3.region-a.geo-1] = { image_id => 48335 }
  • 16. No, really show me$ kicker --helpUsage: kicker [options] stackDeploy your stack to the cloudv0.0.3Options: -h, --help Show command line help --configfile configfile Specify an alternative to ./Stackfile (default: Stackfile) --show-stack Show the nodes defined in a stack --show-details Show the nodes defined in a stack in detail --show-running Show the running nodes --show-dns Show the current DNS config --deploy-all Deploy the stack, skipping existing nodes --replace-node NODE Replace a give node --delete-node NODE Destroy a node, including any shared CM & DNS --validate Validate the config, check as much as possiblewith out creating nodes --version Show help/version info --log-level LEVEL Set the logging level (debug|info|warn|error|fatal) (Default: info)
  • 17. A tail to of 2 tools• 2 concurrent, but very similar tools – aws-kicker – fog.io, masterless puppet, support for Ubuntu Hardy… (customers!!) – StackKicker – ruby-openstack, chef focussed – They are being merged, they share the same structure, philosophy & config, but different implementation
  • 18. Tools I wish I had found first• CloudEnvy – Pythony – fits with the OpenStack community – http://jake.ai/cloudenvy-development-in-the-cloud• MCCloud – of course I should have known Patrick has already solved most of this problem – https://github.com/jedi4ever/mccloud• Blimpy – https://github.com/rtyler/blimpy
  • 19. Tools I wish I had found first• Vagrant – With Vagrant 1.1, Mitchell blew away nearly everything….
  • 20. Thank you for listening!• https://github.com/simonmcc/aws-kicker• https://rubygems.org/gems/stacker• Twitter/IRC: simonmcc