SlideShare a Scribd company logo
Automating CloudStack with Puppet



      Puppet Camp Silicon Valley
             David Nalley
           david@gnsa.us
              @ke4qqq
#whoami

    Recovering sysadmin

    Committer on Apache CloudStack

    Fedora Project Contributor

    Fan of “The Phoenix Project”
The plan

    Overview of Apache CloudStack

    Using puppet to manage your CloudStack-based VMs

    Using puppet to manage your VM deployment.
What is CloudStack?

    Open source IaaS platform

    ASLv2 licensed

    History tl;dr
    −   began development in 2008
    −   production deployments by 2009
    −   open sourced in 2010
    −   moved to ASF in 2012
Design goals

    Integrate with untold number of yet to be identified hardware.

    Provide an API platform on which to run cloud operations.

    Orchestrate hardware resources that may be protected by a
    firewall.

    Horizontally scalable management layer.

    Enable the best data paths to accomplish cloud operations.

    A beautiful and functional UI
Architectural Overview

    Division of physical resources

    Storage

    Borg drones VMs

    Networking

    Management and orchestration
Physical hosts

    Hypervisors
    −   KVM
    −   Xenserver
    −   XCP
    −   VMware

    Baremetal (with IPMI)
Clusters

    Collections of hosts

    Typically 1-15 hosts in a cluster

    Homogenity
    −   Network
    −   Hypervisor
    −   CPU type
Clusters

    Hosts share storage

    Fault domain for individual VM availability

    Lowest level for allocation decisions
Pods

    Collection of clusters

    Typically a rack or row of racks

    Can contain multiple types of hypervisors

    Largely just an arbitrary division
Zones

    Typically a datacenter

    Single networking model within a zone

    Visible to the end user
Storage

    CloudStack doesn't really provide storage, but does consume
    and orchestrate it.
Local Storage

    Typically faster than SAN/NAS

    Failure of a host means loss of a VM

    Can be far more scalable than trying to scale a large traditional
    storage platform
Primary (shared) storage

    Shared at the cluster level

    Where running disk images live

    All hosts in the cluster can write to the resource

    Most commonly NFS and iSCSI, but essentially anything the
    hypervisor can mount

    'New' storage types like Ceph RBD
Secondary Storage

    Primary storage is focused on running VMs, Secondary
    storage is focused on immutable items.
    −   Snapshots
    −   Disk images
    −   ISOs

    Zone wide storage resource

    Can employ object storage
Borg drone VMs
Console Proxy VM

    AJAX-based VNC console access

    Allows CloudStack to deal with auth{n,z} for console access.

    Abstracts away hypervisor access

    Not a replacement for ssh/RDP but no more painful than
    DRAC/iLO

    Stateless; horizontally scalable
Secondary Storage VM

    Secondary Storage is the resource, the SSVM that handles the following operations:
    −   Copying snapshots from primary to secondary storage
    −   Copying disk images from secondary to primary storage
    −   Making all items stored in secondary storage downloadable and a place to
        transfer items into secondary storage
    −   Aging the snapshots according to policy
Networking Model: VLANs

    Traditional L2 isolation

    CloudStack given a block of VLANs and allocates them on
    demand

    Each account gets allocated at least one VLAN.

    Inherent limitations of VLANs
Networking model: L3 Isolation

    L3 isolation; aka Security Groups

    Pushes ACLs down to each hypervisor host

    Far more scalable, decentralized (more Borg)

    Filter at the bridge device
Security Groups
Security Groups
Network Model: SDN

    OVS (GRE overlay tunnels)

    Nicira NVP

    Others rapidly appearing:
    −   BigSwitch
    −   Midokura
Virtual networking hardware

    DHCP

    VLAN allocation

    Firewall

    NAT/Port forwarding

    Routing

    VPN

    Load Balancing
Virtual networking hardware

    Cisco Nexus 1000v

    NetScaler VPX

    F5 Big IP virtual edition
Physical networking hardware

    Juniper SRX

    F5 BigIP LB

    NetScaler
Management Server

    Management server is stateless, horizontally scalable platform
    for orchestrating all of the resources.

    Provides isolation in what is assumed to be a multi-tenant
    environment
UI
API

    EC2/S3 translation layer

    CloudStack native API:
    −   http://incubator.apache.org/cloudstack/docs/api
More info

    http://incubator.apache.org/cloudstack

    #cloudstack on irc.freenode.net

    cloudstack-users-subscribe@incubator.apache.org
Using puppet to manage VMs

    Being able to deploy 500 VMs in 10 minutes means you need
    some method to classify and apply configuration management.

    Most of the work for this awesomeness was done by Jason
    Hancock (@jsnby)
A couple of upfront goals

    Minimize the number of templates

    Have all instances receive config via Puppet

    Zero manual intervention
Make one API call to launch a VM, and get out of the way and
 watch the automation do wonderful things.
A word about auto-signing

    You can use auto-signing.

    Automatically signs any cert from a given domain

    Potential security issues if folks can connect to your
    puppetmaster

    You can pre-seed templates with a signed key - but there are
    gotchas
Run puppet ASAP

    Turn off splay - you want to minimize the time that the box
    remains unconfigured.

    Make sure puppet is configured to start on boot (enable the
    service, not cron)
Classifying nodes - options

    {site,node}.pp

    hostname-based regex

    PE/Dashboard

    ENC

    facts

    $other_things
facts
What to base a fact on...
           http://incubator.apache.org/cloudstack/docs/api/apidocs-4.0.0/user/deployVirtualMachine.html


userdata                                                 an optional binary data that can be sent to the virtual
                                                         machine upon a successful deployment. This binary data
                                                         must be base64 encoded before adding it to the request.
                                                         Currently only HTTP GET is supported. Using HTTP GET
                                                         (via querystring), you can send up to 2KB of data after
                                                         base64 encoding.
Sample userdata
role=webserver
location=datacenter1
environment=production
Custom fact for userdata

    http://s.apache.org/acs_userdata
Implementing ::role in puppet
Everyone is a default node.
No need to add nodes to site.pp or use an ENC.
Sample, skeletonized, site.pp
import 'base'


node default {
    include base
}
Sample, skeletonized, base.pp
class base.pp {
 # Includes that apply to all machines


 case $::role {
  'somerole': {
      include somemodule
  }
  'otherrole': {
      include someothermodule
  }
This is only the beginning...

    Setting environment, purging terminated instances, and more.

    Check out Jason's blog: http://geek.jasonhancock.com
Making puppet deploy your infrastructure in
                   CloudStack

    Most of the real work that follows was done by Dan Bode.
deployVirtualMachine API

    CloudStack provides an API for provisioning machines.
Puppet...

    converts freshly provisioned VMs into functional machines
    ready to do work.
When combined....
you can start from nothing, deploy the machines and wind up
 with a completely automated deployment system.
CloudStack resources in puppet
https://github.com/bodepd/cloudstack_resources


Still a bit raw....potentially unstable, use with caution, file bug
 reports and patches.
Defining application stacks
class my_app_stack {
 cloudstack_instance {'web1':
     ensure => present,
     group   => 'role=web',
 }
 cloudstack_instance {'db1':
     ensure => present,
     group   => 'role=db',
 }
Setting defaults
Cloudstack_instance {
    image    => 'Fedora18_x86_64',
    flavor   => 'm1.medium',
    zone     => 'SanJose',
    network => 'default own',
    keypair => 'my_secret_keypair',
}
cloudstack_instance { 'web1':
    ensure => $::ensure,
Now machines and their configuration are deployable all from
 puppet.


(This also exists for GCE and OpenNebula.)
Automating Your CloudStack Cloud with Puppet

More Related Content

PPT
Building FOSS clouds
PPT
Intro to CloudStack Build a Cloud Day
PDF
Aplura virtualization slides
ODP
Cloudstack networking2
PPTX
Automating CloudStack and hypervisor installation and configuration
PPTX
Cloudstack vs Openstack
PPTX
BACD July 2012 : The Xen Cloud Platform
PPTX
The HaLVM: A Simple Platform for Simple Platforms
Building FOSS clouds
Intro to CloudStack Build a Cloud Day
Aplura virtualization slides
Cloudstack networking2
Automating CloudStack and hypervisor installation and configuration
Cloudstack vs Openstack
BACD July 2012 : The Xen Cloud Platform
The HaLVM: A Simple Platform for Simple Platforms

What's hot (20)

PPTX
Devoxx France 2015 - The Docker Orchestration Ecosystem on Azure
PDF
Cloud party 2014 - Deploy your infrastructure with Saltstack - Salt Cloud wit...
PDF
CloudStack-Developer-Day
PPTX
Docker Ecosystem on Azure
PDF
Ironic - A modern approach to machine deployment
PDF
Unikernels: Rise of the Library Hypervisor
PDF
Isn't it ironic - managing a bare metal cloud (OSL TES 2015)
PDF
Scaling Xen within Rackspace Cloud Servers
PDF
Scaling and Managing Cassandra with docker, CoreOS and Presto
PDF
Cloud stack for_beginners
PDF
Red Hat Enterprise Linux OpenStack Platform 7 - VM Instance HA Architecture
PPTX
Apache CloudStack from API to UI
PDF
Introduction to Docker and deployment and Azure
PDF
Scalable Object Storage with Apache CloudStack and Apache Hadoop
PPTX
Xen and Apache cloudstack
PPT
Introduction to Apache CloudStack by David Nalley
PDF
Andrija Panic - Ceph with CloudStack
PDF
Cassandra and docker
PDF
Bare Metal to OpenStack with Razor and Chef
Devoxx France 2015 - The Docker Orchestration Ecosystem on Azure
Cloud party 2014 - Deploy your infrastructure with Saltstack - Salt Cloud wit...
CloudStack-Developer-Day
Docker Ecosystem on Azure
Ironic - A modern approach to machine deployment
Unikernels: Rise of the Library Hypervisor
Isn't it ironic - managing a bare metal cloud (OSL TES 2015)
Scaling Xen within Rackspace Cloud Servers
Scaling and Managing Cassandra with docker, CoreOS and Presto
Cloud stack for_beginners
Red Hat Enterprise Linux OpenStack Platform 7 - VM Instance HA Architecture
Apache CloudStack from API to UI
Introduction to Docker and deployment and Azure
Scalable Object Storage with Apache CloudStack and Apache Hadoop
Xen and Apache cloudstack
Introduction to Apache CloudStack by David Nalley
Andrija Panic - Ceph with CloudStack
Cassandra and docker
Bare Metal to OpenStack with Razor and Chef
Ad

Similar to Automating Your CloudStack Cloud with Puppet (20)

PDF
Automating CloudStack with Puppet - David Nalley
PDF
Chef and Apache CloudStack (ChefConf 2014)
PPTX
Dockerization of Azure Platform
PDF
Deltacloud API
PPT
LOAD BALANCING OF APPLICATIONS USING XEN HYPERVISOR
PPTX
vBACD - Deploying Infrastructure-as-a-Service with CloudStack - 2/28
PPT
Docker Based Hadoop Provisioning
PPTX
CloudStack vs OpenStack vs Eucalyptus: IaaS Private Cloud Brief Comparison
PPSX
CloudStack + KVM: Your Local Cloud Lab
PDF
The lies we tell our code, LinuxCon/CloudOpen 2015-08-18
PPTX
CloudStack Build A Cloud Day (SCaLE 2013)
PDF
The Lies We Tell Our Code (#seascale 2015 04-22)
PPTX
Getting Started with Apache CloudStack
PDF
CloudStack - LinuxFest NorthWest
PDF
Containerization is more than the new Virtualization: enabling separation of ...
PPT
aws.ppt
PPTX
Silicon Valley CloudStack User Group - Introduction to Apache CloudStack
PDF
Txlf2012
PDF
Kubernetes
PPT
Docker based Hadoop provisioning - Hadoop Summit 2014
Automating CloudStack with Puppet - David Nalley
Chef and Apache CloudStack (ChefConf 2014)
Dockerization of Azure Platform
Deltacloud API
LOAD BALANCING OF APPLICATIONS USING XEN HYPERVISOR
vBACD - Deploying Infrastructure-as-a-Service with CloudStack - 2/28
Docker Based Hadoop Provisioning
CloudStack vs OpenStack vs Eucalyptus: IaaS Private Cloud Brief Comparison
CloudStack + KVM: Your Local Cloud Lab
The lies we tell our code, LinuxCon/CloudOpen 2015-08-18
CloudStack Build A Cloud Day (SCaLE 2013)
The Lies We Tell Our Code (#seascale 2015 04-22)
Getting Started with Apache CloudStack
CloudStack - LinuxFest NorthWest
Containerization is more than the new Virtualization: enabling separation of ...
aws.ppt
Silicon Valley CloudStack User Group - Introduction to Apache CloudStack
Txlf2012
Kubernetes
Docker based Hadoop provisioning - Hadoop Summit 2014
Ad

More from buildacloud (20)

PDF
The Future of SDN in CloudStack by Chiradeep Vittal
PPTX
Policy Based SDN Solution for DC and Branch Office by Suresh Boddapati
PDF
L4-L7 services for SDN and NVF by Youcef Laribi
POTX
Jenkins, jclouds, CloudStack, and CentOS by David Nalley
PPTX
Intro to Zenoss by Andrew Kirch
ODP
Guaranteeing Storage Performance by Mike Tutkowski
PDF
Cloud Application Blueprints with Apache Brooklyn by Alex Henevald
PDF
Managing infrastructure with Application Policy by Mike Cohen
PPTX
Intro to Zenoss by Andrew Kirch
PPTX
Monitoring CloudStack in context with Converged Infrastructure by Mike Turnlund
PDF
Rest api design by george reese
PPTX
Enterprise grade firewall and ssl termination to ac by will stevens
PDF
State of the cloud by reuven cohen
PDF
Securing Your Cloud With the Xen Hypervisor by Russell Pavlicek
PPTX
DevCloud - Setup and Demo on Apache CloudStack
PDF
Cloud Network Virtualization with Juniper Contrail
PPTX
Ian rae panel cloud stack & cloud storage where are we at, and where do we ne...
PDF
Troubleshooting Strategies for CloudStack Installations by Kirk Kosinski
PPT
CloudStack University by Sebastien Goasguen
PDF
Building Scalable, Resilient Infrastructure on CloudStack by Sebastian Stadil
The Future of SDN in CloudStack by Chiradeep Vittal
Policy Based SDN Solution for DC and Branch Office by Suresh Boddapati
L4-L7 services for SDN and NVF by Youcef Laribi
Jenkins, jclouds, CloudStack, and CentOS by David Nalley
Intro to Zenoss by Andrew Kirch
Guaranteeing Storage Performance by Mike Tutkowski
Cloud Application Blueprints with Apache Brooklyn by Alex Henevald
Managing infrastructure with Application Policy by Mike Cohen
Intro to Zenoss by Andrew Kirch
Monitoring CloudStack in context with Converged Infrastructure by Mike Turnlund
Rest api design by george reese
Enterprise grade firewall and ssl termination to ac by will stevens
State of the cloud by reuven cohen
Securing Your Cloud With the Xen Hypervisor by Russell Pavlicek
DevCloud - Setup and Demo on Apache CloudStack
Cloud Network Virtualization with Juniper Contrail
Ian rae panel cloud stack & cloud storage where are we at, and where do we ne...
Troubleshooting Strategies for CloudStack Installations by Kirk Kosinski
CloudStack University by Sebastien Goasguen
Building Scalable, Resilient Infrastructure on CloudStack by Sebastian Stadil

Automating Your CloudStack Cloud with Puppet

  • 1. Automating CloudStack with Puppet Puppet Camp Silicon Valley David Nalley [email protected] @ke4qqq
  • 2. #whoami  Recovering sysadmin  Committer on Apache CloudStack  Fedora Project Contributor  Fan of “The Phoenix Project”
  • 3. The plan  Overview of Apache CloudStack  Using puppet to manage your CloudStack-based VMs  Using puppet to manage your VM deployment.
  • 4. What is CloudStack?  Open source IaaS platform  ASLv2 licensed  History tl;dr − began development in 2008 − production deployments by 2009 − open sourced in 2010 − moved to ASF in 2012
  • 5. Design goals  Integrate with untold number of yet to be identified hardware.  Provide an API platform on which to run cloud operations.  Orchestrate hardware resources that may be protected by a firewall.  Horizontally scalable management layer.  Enable the best data paths to accomplish cloud operations.  A beautiful and functional UI
  • 6. Architectural Overview  Division of physical resources  Storage  Borg drones VMs  Networking  Management and orchestration
  • 7. Physical hosts  Hypervisors − KVM − Xenserver − XCP − VMware  Baremetal (with IPMI)
  • 8. Clusters  Collections of hosts  Typically 1-15 hosts in a cluster  Homogenity − Network − Hypervisor − CPU type
  • 9. Clusters  Hosts share storage  Fault domain for individual VM availability  Lowest level for allocation decisions
  • 10. Pods  Collection of clusters  Typically a rack or row of racks  Can contain multiple types of hypervisors  Largely just an arbitrary division
  • 11. Zones  Typically a datacenter  Single networking model within a zone  Visible to the end user
  • 12. Storage  CloudStack doesn't really provide storage, but does consume and orchestrate it.
  • 13. Local Storage  Typically faster than SAN/NAS  Failure of a host means loss of a VM  Can be far more scalable than trying to scale a large traditional storage platform
  • 14. Primary (shared) storage  Shared at the cluster level  Where running disk images live  All hosts in the cluster can write to the resource  Most commonly NFS and iSCSI, but essentially anything the hypervisor can mount  'New' storage types like Ceph RBD
  • 15. Secondary Storage  Primary storage is focused on running VMs, Secondary storage is focused on immutable items. − Snapshots − Disk images − ISOs  Zone wide storage resource  Can employ object storage
  • 17. Console Proxy VM  AJAX-based VNC console access  Allows CloudStack to deal with auth{n,z} for console access.  Abstracts away hypervisor access  Not a replacement for ssh/RDP but no more painful than DRAC/iLO  Stateless; horizontally scalable
  • 18. Secondary Storage VM  Secondary Storage is the resource, the SSVM that handles the following operations: − Copying snapshots from primary to secondary storage − Copying disk images from secondary to primary storage − Making all items stored in secondary storage downloadable and a place to transfer items into secondary storage − Aging the snapshots according to policy
  • 19. Networking Model: VLANs  Traditional L2 isolation  CloudStack given a block of VLANs and allocates them on demand  Each account gets allocated at least one VLAN.  Inherent limitations of VLANs
  • 20. Networking model: L3 Isolation  L3 isolation; aka Security Groups  Pushes ACLs down to each hypervisor host  Far more scalable, decentralized (more Borg)  Filter at the bridge device
  • 23. Network Model: SDN  OVS (GRE overlay tunnels)  Nicira NVP  Others rapidly appearing: − BigSwitch − Midokura
  • 24. Virtual networking hardware  DHCP  VLAN allocation  Firewall  NAT/Port forwarding  Routing  VPN  Load Balancing
  • 25. Virtual networking hardware  Cisco Nexus 1000v  NetScaler VPX  F5 Big IP virtual edition
  • 26. Physical networking hardware  Juniper SRX  F5 BigIP LB  NetScaler
  • 27. Management Server  Management server is stateless, horizontally scalable platform for orchestrating all of the resources.  Provides isolation in what is assumed to be a multi-tenant environment
  • 28. UI
  • 29. API  EC2/S3 translation layer  CloudStack native API: − http://incubator.apache.org/cloudstack/docs/api
  • 30. More info  http://incubator.apache.org/cloudstack  #cloudstack on irc.freenode.net  [email protected]
  • 31. Using puppet to manage VMs  Being able to deploy 500 VMs in 10 minutes means you need some method to classify and apply configuration management.  Most of the work for this awesomeness was done by Jason Hancock (@jsnby)
  • 32. A couple of upfront goals  Minimize the number of templates  Have all instances receive config via Puppet  Zero manual intervention
  • 33. Make one API call to launch a VM, and get out of the way and watch the automation do wonderful things.
  • 34. A word about auto-signing  You can use auto-signing.  Automatically signs any cert from a given domain  Potential security issues if folks can connect to your puppetmaster  You can pre-seed templates with a signed key - but there are gotchas
  • 35. Run puppet ASAP  Turn off splay - you want to minimize the time that the box remains unconfigured.  Make sure puppet is configured to start on boot (enable the service, not cron)
  • 36. Classifying nodes - options  {site,node}.pp  hostname-based regex  PE/Dashboard  ENC  facts  $other_things
  • 37. facts
  • 38. What to base a fact on... http://incubator.apache.org/cloudstack/docs/api/apidocs-4.0.0/user/deployVirtualMachine.html userdata an optional binary data that can be sent to the virtual machine upon a successful deployment. This binary data must be base64 encoded before adding it to the request. Currently only HTTP GET is supported. Using HTTP GET (via querystring), you can send up to 2KB of data after base64 encoding.
  • 40. Custom fact for userdata  http://s.apache.org/acs_userdata
  • 41. Implementing ::role in puppet Everyone is a default node. No need to add nodes to site.pp or use an ENC.
  • 42. Sample, skeletonized, site.pp import 'base' node default { include base }
  • 43. Sample, skeletonized, base.pp class base.pp { # Includes that apply to all machines case $::role { 'somerole': { include somemodule } 'otherrole': { include someothermodule }
  • 44. This is only the beginning...  Setting environment, purging terminated instances, and more.  Check out Jason's blog: http://geek.jasonhancock.com
  • 45. Making puppet deploy your infrastructure in CloudStack  Most of the real work that follows was done by Dan Bode.
  • 46. deployVirtualMachine API  CloudStack provides an API for provisioning machines.
  • 47. Puppet...  converts freshly provisioned VMs into functional machines ready to do work.
  • 48. When combined.... you can start from nothing, deploy the machines and wind up with a completely automated deployment system.
  • 49. CloudStack resources in puppet https://github.com/bodepd/cloudstack_resources Still a bit raw....potentially unstable, use with caution, file bug reports and patches.
  • 50. Defining application stacks class my_app_stack { cloudstack_instance {'web1': ensure => present, group => 'role=web', } cloudstack_instance {'db1': ensure => present, group => 'role=db', }
  • 51. Setting defaults Cloudstack_instance { image => 'Fedora18_x86_64', flavor => 'm1.medium', zone => 'SanJose', network => 'default own', keypair => 'my_secret_keypair', } cloudstack_instance { 'web1': ensure => $::ensure,
  • 52. Now machines and their configuration are deployable all from puppet. (This also exists for GCE and OpenNebula.)