Jean-Luc Picard
SVDevOps, June 12, 2012
Robert Harker
Sr. Service Engineer, Yahoo! Sports, harker@harker.com
This talk is extracted from "The Puppet Show, Managing Servers with Puppet"
http://harker.com/OpenStack/ThePuppetShowYahoo-20100930.pdf
(Up arrow, down arrow to move between slides)
Robert Harker
Currently a Sr. Service Engineer at Yahoo! Sports
On a team of 4 SEs managing ~3,000 hosts
Active in the OpenStack and cloud computing community
Puppet is a configuration management tool Written by Luke Kanies Supported by Puppet Labs (formerly Reductive Labs) Written in Ruby but Ruby skills not needed
Client/Server model: puppetmasterd is the central management daemon puppetd runs on each managed system (node)
The goal of Puppet is to define the end state of the managed system (node)
This end state is defined by a set of related class data that build up a node specific manifest
The node uploads this information to the puppetmaster
This may include files and templates that are available on the puppetmaster
The node then uses this manifest to compare its current configuration to the configuration defined in the manifest
Puppetmasterd listens to port 8140 Puppet uses SSL for security The puppetmaster includes a SSL certificate server
Puppet Language
The decoupling allows Puppet to define a high level idea like user, application, or service
The Puppet RAL will translate that in to the commands required by the client OS
Resources describe some aspect of a system Each resource has a type, a title, and a list of attributes
Resource Types - Each resource is modeled as a type Resources include services, packages, files, users, permissions, run state Resource Types are independent of the underlying OS semantics
Providers how to implement a resource Providers hide the underlying differences between OSes Providers for the type package include apt, yum, pkgadd
Resource providers actually perform the management functions
Puppet creates a graph based structure to define the relationships between resources: What resources depend on another What order the resources should be evaluated Whether a change in one resource requires an action by another resource I.e. restarting a service if a config file changes
Puppet has a tool to print out these dependency graphs
FOOBAR
Pros: Buzz in the Linux systems management community OpenSource Active development community New features and modules added weekly
Cons: Scalability Factor running on the client is expensive Manifest generation on the puppetmaster is expensive Many desirable features missing Dashboard is a commercial product Many systems administration tasks missing (still true?)
Differences in approaches between configuration management systems?
How much configuration management?
OS apps only, host configuration, custom applications, bare metal restores?
Integration with Continuous Integration (CI) systems?
Production only or the whole tool chain?
Devel integration -> QA -> staging -> production
Automatically pull the changes or manual push of changes?
Integration with other systems?
Tips or techniques which have lead to success.
Problems you have encountered.