Puppet - Automagically Manage your Configuration

  • 2,628 views
Uploaded on

Puppet's presentation at DevOps Days Brasil …

Puppet's presentation at DevOps Days Brasil
Dec 2010 @ São Paulo - SP

More in: Technology
  • 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
2,628
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
129
Comments
0
Likes
4

Embeds 0

No embeds

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. Puppet
    AutomagicallyManageYour
    Configuration
    12/04/2010
    Carla Souza
    DevOps 2010 Brazil © Carla Souza
  • 2. 12/04/2010
    DevOps 2010 Brazil © Carla Souza
  • 3. 12/04/2010
    DevOps 2010 Brazil © Carla Souza
  • 4. 12/04/2010
    DevOps 2010 Brazil © Carla Souza
  • 5. Typical Sysadmin Job
    Repetitive
    Manual
    Tedious
    12/04/2010
    DevOps 2010 Brazil © Carla Souza
  • 6. Typical Sysadmin Job
    Installation
    12/04/2010
    DevOps 2010 Brazil © Carla Souza
  • 7. Typical Sysadmin Job
    Installation
    Configuration
    12/04/2010
    DevOps 2010 Brazil © Carla Souza
  • 8. Typical Sysadmin Job
    Installation
    Updates
    Fixes
    Audits
    Configuration
    12/04/2010
    DevOps 2010 Brazil © Carla Souza
  • 9. Typical Sysadmin Job
    Installation
    Updates
    Fixes
    Audits
    Configuration
    12/04/2010
    DevOps 2010 Brazil © Carla Souza
  • 10. After Configuration...
    Whatwas itconfigured?
    How?
    Why?
    12/04/2010
    DevOps 2010 Brazil © Carla Souza
  • 11. After Configuration...
    Whatwas itconfigured?
    How?
    Why?
    WeneedDocumentation!
    12/04/2010
    DevOps 2010 Brazil © Carla Souza
  • 12. Documentation
    Whenwas it configured?
    Who configured it?
    What were the configuration's objectives?
    12/04/2010
    DevOps 2010 Brazil © Carla Souza
  • 13. Documentation
    Whenwas itconfigured?
    Who configured it?
    What were the configuration's objectives?
    Beconsistent
    12/04/2010
    DevOps 2010 Brazil © Carla Souza
  • 14. After configuration...
    Is it wellconfigured?
    12/04/2010
    DevOps 2010 Brazil © Carla Souza
  • 15. After configuration...
    Is it wellconfigured?
    Badconfiguration is worsethan no configuration
    12/04/2010
    DevOps 2010 Brazil © Carla Souza
  • 16. After configuration...
    Is it wellconfigured?
    Badconfiguration is worsethen no configuration
    Wemakemistakes!
    12/04/2010
    DevOps 2010 Brazil © Carla Souza
  • 17. After configuration...
    Is it wellconfigured?
    Badconfiguration is worsethen no configuration
    Wemakemistakes!
    WeneedTests!
    12/04/2010
    DevOps 2010 Brazil © Carla Souza
  • 18. Tests
    Is the configuration correct?
    Is it correctlyconfigured?
    12/04/2010
    DevOps 2010 Brazil © Carla Souza
  • 19. After Configuration...
    How to ensurethat it willstayconfiguredcorrectly over time?
    12/04/2010
    DevOps 2010 Brazil © Carla Souza
  • 20. After Configuration...
    How to ensure that it will stay configured correctly over time?
    We need Maintenance!
    12/04/2010
    DevOps 2010 Brazil © Carla Souza
  • 21. Maintenance
    Repetitive work
    Every time yourepeatonejob, youwaste time
    12/04/2010
    DevOps 2010 Brazil © Carla Souza
  • 22. Maintenance
    Repetitive work
    Every time you repeat onejob, you waste time
    MONEY
    12/04/2010
    DevOps 2010 Brazil © Carla Souza
  • 23. Documentation + Tests + Maintenance
    12/04/2010
    DevOps 2010 Brazil © Carla Souza
  • 24. Documentation + Tests + Maintenance
    =
    Spend more time then you think
    12/04/2010
    DevOps 2010 Brazil © Carla Souza
  • 25. Documentation + Tests + Maintenance
    =
    Spend more time then you think
    =
    Less time for real important work
    12/04/2010
    DevOps 2010 Brazil © Carla Souza
  • 26. The more applications I have
    12/04/2010
    DevOps 2010 Brazil © Carla Souza
  • 27. The more applications I have
    =
    More Risks
    12/04/2010
    DevOps 2010 Brazil © Carla Souza
  • 28. The more applications I have
    =
    More Risks
    +
    More need for documentation
    12/04/2010
    DevOps 2010 Brazil © Carla Souza
  • 29. Cumulative Effect
    The time left will be only for fire fighting
    12/04/2010
    DevOps 2010 Brazil © Carla Souza
  • 30. Cumulative Effect
    The time left will be only for fire fighting
    Important tasks will be left behind
    12/04/2010
    DevOps 2010 Brazil © Carla Souza
  • 31. Cumulative Effect
    The time left will be only for fire fighting
    Important tasks will be left behind
    Backups
    Documentation update
    User’s tickets
    12/04/2010
    DevOps 2010 Brazil © Carla Souza
  • 32. Automation
    Good admins write their own tools
    12/04/2010
    DevOps 2010 Brazil © Carla Souza
  • 33. Automation
    Good admins write their own tools
    Install:
    Kickstart, jumpstart, imaging
    Configuration + maintenance:
    SSH in a for loop
    Ssh keys distributed over the network = lack of secutiry
    12/04/2010
    DevOps 2010 Brazil © Carla Souza
  • 34. Automation tools
    Great for ad-hoc or one time only tasks
    Can be pushed out via cron
    12/04/2010
    DevOps 2010 Brazil © Carla Souza
  • 35. Automation tools
    But do you always write scripts that are:
    12/04/2010
    DevOps 2010 Brazil © Carla Souza
  • 36. Automation tools
    But do you always write scripts that are:
    Concurrent safe?
    Testable?
    Reversible?
    Legible?
    Full of good logging?
    Portable?
    12/04/2010
    DevOps 2010 Brazil © Carla Souza
  • 37. Wish list
    Simple solutions
    12/04/2010
    DevOps 2010 Brazil © Carla Souza
  • 38. Wish list
    Simplesolutions
    ElegantDomainSpecificLanguage (DSL)
    Manageyourserversbywritingcode, notrunningcommands
    Platformindependent
    Centralized
    Version Controlled
    12/04/2010
    DevOps 2010 Brazil © Carla Souza
  • 39. Wish list
    Simplesolutions
    Easy to extend
    Selfdocumenting
    Commercial support and trainning
    Open source
    12/04/2010
    DevOps 2010 Brazil © Carla Souza
  • 40. Puppet
    A Puppet Labs product
    Since 2005
    Written in Ruby
    Extensible by modules
    Client-server architecture (client pull)
    12/04/2010
    DevOps 2010 Brazil © Carla Souza
  • 41. Puppet
    File server
    SSL Certificates
    Very active and helpful community
    Mailing lists, #puppet @ freenode
    Open Source hosted on Github (GPL)
    https://github.com/puppetlabs
    Book
    12/04/2010
    DevOps 2010 Brazil © Carla Souza
  • 42. Puppet
    12/04/2010
    DevOps 2010 Brazil © Carla Souza
  • 43. Puppet
    Installation
    Updates
    Fixes
    Audits
    Configuration
    12/04/2010
    DevOps 2010 Brazil © Carla Souza
  • 44. Components
    puppetmaster
    Server daemon
    Run as ‘puppet’ user
    12/04/2010
    DevOps 2010 Brazil © Carla Souza
  • 45. Components
    puppetmaster
    Server daemon
    Run as ‘puppet’ user
    puppetd
    Client daemon
    Run as root
    Pulling every 30min (default value)
    12/04/2010
    DevOps 2010 Brazil © Carla Souza
  • 46. Components
    puppetca
    Puppet’s Certificate Authority
    12/04/2010
    DevOps 2010 Brazil © Carla Souza
  • 47. Components
    puppetca
    Puppet’s Certificate Authority
    Facter
    Gathers basic information about node’s hardware and operation system
    12/04/2010
    DevOps 2010 Brazil © Carla Souza
  • 48. Elements
    Types
    A type is a particular element that Puppet knows how to configure
    12/04/2010
    DevOps 2010 Brazil © Carla Souza
  • 49. Elements
    Types
    A type is a particular element that Puppet knows how to configure
    Classes
    A named collection of type objects
    12/04/2010
    DevOps 2010 Brazil © Carla Souza
  • 50. Elements
    Providers
    Specific implementation of a given resource type
    12/04/2010
    DevOps 2010 Brazil © Carla Souza
  • 51. Elements
    Providers
    Specific implementation of a given resource type
    type: package
    12/04/2010
    DevOps 2010 Brazil © Carla Souza
  • 52. Elements
    Providers
    Specific implementation of a given resource type
    type: package
    providers: yum, dpkg, aptitude, apple, rpm, gem, freebsd
    12/04/2010
    DevOps 2010 Brazil © Carla Souza
  • 53. Puppet’s installation
    yum install puppet-server puppet
    apt-get install puppetmaster puppet
    gem install puppet-2.6.4.gem
    12/04/2010
    DevOps 2010 Brazil © Carla Souza
  • 54. Sample CodeInstall, Configure and Start Apache
    12/04/2010
    DevOps 2010 Brazil © Carla Souza
    package {“httpd”:
    ensure => present,
    }
    file {“/etc/httpd/conf/httpd.conf”:
    owner => root, group => root, mode => 644,
    source => puppet:///modules/apache/httpd.conf,
    }
    service {“httpd”:
    ensure => running,
    enable => true,
    }
  • 55. Sample CodeResource Types
    12/04/2010
    DevOps 2010 Brazil © Carla Souza
    package {“httpd”:
    ensure => present,
    }
    file {“/etc/httpd/conf/httpd.conf”:
    owner => root, group => root, mode => 644,
    source => puppet:///modules/apache/httpd.conf,
    }
    service {“httpd”:
    ensure => running,
    enable => true,
    }
  • 56. Sample CodeResource Titles
    12/04/2010
    DevOps 2010 Brazil © Carla Souza
    package {“httpd”:
    ensure => present,
    }
    file {“/etc/httpd/conf/httpd.conf”:
    owner => root, group => root, mode => 644,
    source => puppet:///modules/apache/httpd.conf,
    }
    service {“httpd”:
    ensure => running,
    enable => true,
    }
  • 57. Sample CodeResources Parameters
    12/04/2010
    DevOps 2010 Brazil © Carla Souza
    package {“httpd”:
    ensure => present,
    }
    file {“/etc/httpd/conf/httpd.conf”:
    owner => root, group => root, mode => 644,
    source => puppet:///modules/apache/httpd.conf,
    }
    service {“httpd”:
    ensure => running,
    enable => true,
    }
  • 58. Sample CodeResources Parameters
    12/04/2010
    DevOps 2010 Brazil © Carla Souza
    package {“httpd”:
    ensure => present,
    }
    file {“/etc/httpd/conf/httpd.conf”:
    owner => root, group => root, mode => 644,
    source => puppet:///modules/apache/httpd.conf,
    require => Package[“httpd”]
    }
    service {“httpd”:
    ensure => running,
    enable => true,
    require => File[“/etc/httpd/conf/httpd.conf”]
    }
  • 59. Sample CodeResponding to change
    12/04/2010
    DevOps 2010 Brazil © Carla Souza
    file{“/etc/httpd/conf/httpd.conf”:
    .
    .
    notify => Service[“httpd”]
    }
    OR
    service{“httpd”:
    .
    .
    subscribe => File[“/etc/httpd/conf/httpd.conf”]
    }
  • 60. Sample CodeResource collections
    class apache {
    include apache::install
    include apache::config
    include apache::service
    }
    class apache::install {
    package{.....}, package{.....}
    }
    class apache::config {
    file{.....
    require => Class[“apache::install”],
    notify => Class[“apache::service”],
    }
    }
    class apache::service {
    service{.....
    require => Class[“apache::config”]
    }
    }
    12/04/2010
    DevOps 2010 Brazil © Carla Souza
  • 61. Sample CodeResource collections
    class apache {
    include apache::install
    include apache::config
    include apache::service
    }
    class apache::install {
    package{.....}, package{.....}
    }
    class apache::config {
    file{.....
    require => Class[“apache::install”],
    notify => Class[“apache::service”],
    }
    }
    class apache::service {
    service{.....
    require => Class[“apache::config”]
    }
    }
    12/04/2010
    DevOps 2010 Brazil © Carla Souza
  • 62. Sample CodeResource collections
    class apache {
    include apache::install
    include apache::config
    include apache::service
    }
    class apache::install {
    package{.....}, package{.....}
    }
    class apache::config {
    file{.....
    require => Class[“apache::install”],
    notify => Class[“apache::service”],
    }
    }
    class apache::service {
    service{.....
    require => Class[“apache::config”]
    }
    }
    12/04/2010
    DevOps 2010 Brazil © Carla Souza
  • 63. Elements
    Nodes
    A configuration block matching a client
    12/04/2010
    DevOps 2010 Brazil © Carla Souza
  • 64. Sample CodeNodes configuration
    node “web1.your.com” {
    include apache
    }
    12/04/2010
    DevOps 2010 Brazil © Carla Souza
  • 65. Elements
    Templates
    Apply code and variable substitution
    Uses ERB
    12/04/2010
    DevOps 2010 Brazil © Carla Souza
  • 66. Sample CodeTemplates
    file{“/etc/httpd/conf.d/servertag.conf”:
    .
    .
    content => template(“apache/servertag.erb”)
    }
    servertag.erb:
    Header set X-httpd<%= hostname %>
    12/04/2010
    DevOps 2010 Brazil © Carla Souza
  • 67. Sample CodeFile Source Selection
    file{“/etc/httpd/conf/httpd.conf”:
    source => [“puppet:///apache/httpd.conf.${fqdn}”,
    “puppet:///apache/httpd.conf.${domain}”,
    “puppet:///apache/httpd.conf”]
    }
    12/04/2010
    DevOps 2010 Brazil © Carla Souza
  • 68. Puppet
    puppetlabs.com
    github.com/puppetlabs
    Follow me:
    github.com/carlasouza
    carla.asouza@gmail.com
    12/04/2010
    DevOps 2010 Brazil © Carla Souza
  • 69. Thank you!
    12/04/2010
    DevOps 2010 Brazil © Carla Souza