puppet: orchestration framework?
DESCRIPTION
This presentation covers the architecture of PupTRANSCRIPT
Puppet:Orchestration Framework?
Tuesday, February 26, 13
Dan Bodedan@puppetlabs
bodepd on <twitter,freenode>
Tuesday, February 26, 13
Puppet
Tuesday, February 26, 13
ensures consistency...
PuppetMaster
DB1 DB2 Tomcat1 Tomcat2
Tuesday, February 26, 13
With Resources
Tuesday, February 26, 13
Describe the configuration state of elements
user { ‘dan’: ensure => present, shell => ‘/bin/bash’, }
Tuesday, February 26, 13
user { ‘dan’: # a user named dan ...
Tuesday, February 26, 13
user { ‘dan’: # a user named dan ensure => present, # should exist ...
Tuesday, February 26, 13
user { ‘dan’: # a user named dan ensure => present, # should exist shell => ‘/bin/bash’, # with this shell}
Tuesday, February 26, 13
Properties
user { ‘dan’: ensure => present, # existence shell => ‘/bin/bash’, # shell}
Tuesday, February 26, 13
ImplementingProperties
retrieve current state
converge to desired state
Tuesday, February 26, 13
Puppet’sModel
Tuesday, February 26, 13
desired state
current state
package { ‘git’: ensure => present}
dpkg-query --search git
rpm -q git
Tuesday, February 26, 13
desired state
current state
==?
package { ‘git’: ensure => present}
dpkg-query --search git
rpm -q git
absent present
Idempotent
Tuesday, February 26, 13
desired state
current state
==?
Sync Event
package { ‘git’: ensure => present}
dpkg-query --search git
rpm -q git
absent present
apt-get install git
yum install git
transition
absent -> present
Events
Tuesday, February 26, 13
Noopdesired state
current state
==?
Event
package { ‘git’: ensure => present}
dpkg-query --search git
rpm -q git
absent present
potential transition
absent -> present
Tuesday, February 26, 13
Puppet DSL andResources
Tuesday, February 26, 13
Puppet DSL
Composes collections of resources.
Tuesday, February 26, 13
Package/File/Service
class webserver { package { ‘apache2’: ... } file { ‘/etc/apache2/apache2.conf’: ... require => Package[‘apache2’], } service { ‘apache2’: ... subscribe => File[‘/etc/apache2/apache2.conf’] }}
Tuesday, February 26, 13
configure a node
include webserver
Tuesday, February 26, 13
Catalogs
Package
File
Service
(refresh)
Tuesday, February 26, 13
Text is awesome
Tuesday, February 26, 13
Integrates with version control
Easy to share/collaborate
Text is awesome
Tuesday, February 26, 13
Application stacks
Tuesday, February 26, 13
ensure consistency?
Puppet
IaaSEndpoint
Tuesday, February 26, 13
With Resources?
Tuesday, February 26, 13
Express stacks as:
* VM Instances
* Networks
* Firewalls
* Disks
GCE example
Tuesday, February 26, 13
GCE as resources?
Tuesday, February 26, 13
class app_stack {...
Tuesday, February 26, 13
class app_stack { gce_network { ‘dansnetwork’: ensure => present, gateway => '10.0.1.1', range => '10.0.1.0/24’, } ->...
Tuesday, February 26, 13
class app_stack { gce_network { ‘dansnetwork’: ensure => present, gateway => '10.0.1.1', range => '10.0.1.0/24’, } -> gce_firewall { ‘webhttp’: ensure => present, allowed => 'tcp:80’, network => ‘appnet’, } ->...
Tuesday, February 26, 13
class app_stack { gce_network { ‘dansnetwork’: ensure => present, gateway => '10.0.1.1', range => '10.0.1.0/24’, } -> gce_firewall { ‘webhttp’: ensure => present, allowed => 'tcp:80’, network => ‘appnet’, } -> gce_instance { ‘server1’: ensure => present, network => ‘appnet’ }}
Tuesday, February 26, 13
infrastructure only
exists to be consumed
Tuesday, February 26, 13
Puppet assigns roles
Tuesday, February 26, 13
gce_instance { ‘dansinstance’: ensure => present, … modules => [‘mysql’, ‘memcached’]}
Step 1: distribute content
Tuesday, February 26, 13
forge.puppetlabs.com
I get all of my content from the
forge!
Tuesday, February 26, 13
gce_instance { ‘dansinstance’: ensure => present, …
classes => { ‘mysql’ => {bind_address => 0.0.0.0} },
}
Step 2: classify
Tuesday, February 26, 13
Awesomeness
Tuesday, February 26, 13
ComposableStandard
ConfigurationLanguage
Tuesday, February 26, 13
Idempotency
Tuesday, February 26, 13
Noop
Tuesday, February 26, 13
Limitations/unknowns
Tuesday, February 26, 13
VLAN
VM1 VM2 VM2 VMN...
DB1 DB1
LB
Parallel processing of Catalogs
Tuesday, February 26, 13
Proxy Nodes (credential
management)
Tuesday, February 26, 13
Application Stacksare
Persistent
Tuesday, February 26, 13
Master vs. Masterless?
Tuesday, February 26, 13