puppet – torne seu datacenter ágil
TRANSCRIPT
Puppet
Puppet Torne seu datacenter gil
Jeferson Rodrigues
Breve apresentao
Quiz:
- Quandos sysadmin temos aqui?
- Quantos sysadmin tem alguma afinidade com programao?
- E se a configurao fosse vista como programavel?
Bom, a nossa paletra tem duas partes. Uma breve indroduo ao Puppet e como utilzamos o Puppet no ambiente do Terra.
Puppet
Como surgiu?
A que se destina?
Pra quem se destina?
www.puppetlabs.com/company/overview/Surge como sucessor do
cfengine para administrar um ou milhares de servidores, ou 10000
servidores conforme a idia do idealizador. um framework open-source
robusto, flexivel e estensivel.
Destina-se a automao e gerencia de configurao, tambem utilizado
como soluo para execuo de tarefas repetitivas. Por exemplo ...
Se destina especialmente para administradores de sistemas
(sysadmin).
5 minutos falando da historia
Puppet: Modelo
Componentes
Manifest
Classes
Resource Types
Defines
Templates
Facter
Irei demostrar na sequencia o que cada item e qual sua funcionalidade.
Puppet: Componentes
Puppetmasterd o servidor central da soluo.
Puppetd o cliente da soluo que busca o catlogo compilado e reporta informaes do sistema para servidor.
Puppet um aplicativo, em especial, para teste do catlogo.
Puppetmasterd is a central management daemon. In most installations, youll have one puppetmasterd server and each managed machine will run puppetd. By default, puppetmasterd runs a certificate authority, which you can read more about in the security section.Puppetmasterd will automatically serve up puppet orders to managed systems, as well as files and templates.
Puppetd runs on each managed node. By default, it will wake up every 30 minutes (configurable), check in with puppetmasterd, send puppetmasterd new information about the system (facts), and then recieve a compiled catalog containing the desired system configuration that should be applied as ordered by the central server.
When running Puppet locally (for instance, to test manifests, or in a non-networked disconnected case), puppet is run instead of puppetd. It then uses local files, and does not try to contact the central server. Otherwise, it behaves the same as puppetd.
Puppet: Manifest
O Manifest uma declarao de expresses para controlar o Puppet.
uma linguagem de domnio especfica.
Catalogo que tem como responsabilidade de agrupar os facter, classes e seus resources.
Puppet: Manifest
Catalogo que tem como responsabilidade de agrupar os facter, classes e seus resources
Puppet: Classe e Resource Types
Classe uma estrutura lgica para agrupar recursos.
Resource a unidade fundamental do Puppet. O resource representa aspectos do sistema, por exemplo, um servio, um arquivo ou diretrio, um pacote ou qualquer outro resource customizado e relacionados.
Puppet: Classe e Resource Types
class nginx {
package { "nginx":
ensure => "installed";
}
file { "/etc/nginx/nginx.conf":
owner => "root",
group => "root",
mode => 644,
require => Package["nginx"],
notify => Service["nginx"],
source => "puppet://$server/files/$platform/etc/nginx/nginx.conf";
}
service { "nginx":
restart => "/usr/sbin/nginx -s reload > /dev/null",
binary => "nginx",
ensure => "running",
require => File["/etc/nginx/nginx.conf"];
}
}
Criando uma classe para instalar e configurar de maneira automaitzada o webserver nginx
Explicar com calma cada passo do exemplo...
Puppet: Resource Types
exec { "nginx-reload":
path => "/usr/bin:/usr/sbin:/bin",
command => "nginx -s reload > /dev/null",
onlyif => "nginx -t -c /etc/nginx/nginx.conf > /dev/null",
subscribe => File["/etc/nginx/nginx.conf"],
refreshonly => true,
require => File["/etc/nginx/nginx.conf"];
}
user { "www":
provider => useradd,
comment => 'Web User',
ensure => 'present',
home => '/var/www',
shell => '/sbin/nologin';
}
idem
Puppet: Resource Types
cron { "tmpwatch-varnish":
command => "/usr/sbin/tmpwatch -qm 6 /var/log/varnish",
user => "root",
minute => 30;
}
group { "www":
gid => 503;
}
idem
Puppet: Define
Define muito semelhante a uma classe, mas possvel reaproveitar um codigo e manipul-lo por criterios.
Ponte com resolv.conf. Exemplo em multiplos datacenters
Definitions, on the other hand, can be reused many times on the same node. They essentially work as if you created your own Puppet type just by using the language. They are meant to be evaluated multiple times, with different inputs each time. This means you can pass variable values into the defines.Both classes and defines are very useful and you should make use of them when building out your puppet infrastructure.
ClassesClasses are introduced with the class keyword, and their contents are wrapped in curly braces. The following simple example creates a simple class that manages two seperate files:
Puppet: Define
define resolv_conf ($domainname = "$domain", $searchpath, $nameservers) {
case $operatingsystem {
FreeBSD: { $group = "wheel" }
default: { $group = "root" }
}
file { "/etc/resolv.conf":
owner => root,
group => $group,
mode => 444,
content => template('header.erb', 'resolv.conf.erb')
}
}
Por exemplo, o resolv.conf de um servidor em uma determinada localidade consulta servidores de DNS especificos.
Explicar para criana....
Puppet: Define
class resolv::client {
case $datacenter {
MIA: {
resolv_conf { "resolv.conf":
domainname => 'terra.com',
searchpath => ['terra.com', 'tpn.terra.com'],
nameservers => ['10.253.120.200', '10.253.120.201', '10.253.120.202'];
}
}
default: {
resolv_conf { "resolv.conf":
domainname => 'terra.com.br',
searchpath => ['tpn.terra.com', 'terra.com.br'],
nameservers => ['10.225.54.200', '10.225.54.201', '10.225.54.202'];
}
}
}
}
Idem.... Explicar para criana
Puppet: Template resolv.conf.erb
domain
search
nameserver
options rotate
############################### By Puppet##############################
domain terra.com.brsearch tpn.terra.com terra.com.brnameserver 10.225.54.200nameserver 10.225.54.201nameserver 10.225.54.202options rotate
Header.erb
resolv.conf.erbcat /etc/resolv.conf
Puppet: Nodes
node basenode {
include ntp::client include puppet::client include resolv::client include host::ssh
}
node_terminus = plainBasenode um modelo padro que adotamos que todo o servidor deve ter.
J o monit-web-poa classe que herda caracteriscas de basenode e
constroe um servidor do frontend da monitoracao ....
Puppet: Nodes
class monit-web-poa inherits basenode {
$platform = 'monit-web-poa'
$datacenter = 'POA'
include apache
include php
include semon::web
include semon::util
include oracle::client
nfs::mount { "/nfs/semon-rrd01" : }
nfs::mount { "/nfs/semon-rrd02" : }
}
node_terminus = ldap
Facter!Basenode um modelo padro que adotamos que todo o servidor deve ter.
J o monit-web-poa classe que herda caracteriscas de basenode e
constroe um servidor do frontend da monitoracao ....
Facter
Facter uma biblioteca em ruby destina a reunir informaes do sistemas para tomada de deciso do Puppet.
Reune informaes de sistema operacional, por exemplo, verso do kernel, distribuio, numero de interfaces de redes e outras.
Facter is an independent, cross-platform Ruby library designed to gather information on all the nodes you will be managing with Puppet. It is available on all platforms that Puppet is available.
Quick information gathering on nodesFacter is a lightweight program that gathers basic node information about the hardware and operating system. Facter is especially useful for retrieving things like operating system names, hardware characteristics, IP addresses, MAC addresses, and SSH keys.
Facter
[root@puppet-master01-poa ~]# facter
architecture => x86_64
domain => tpn.terra.com
facterversion => 1.5.7
fqdn => puppet-master01-poa.tpn.terra.com
hardwareisa => x86_64
hostname => puppet-master01-poa
interfaces => eth0
ipaddress => 200.176.14.72
ipaddress_eth0 => 200.176.14.72
is_virtual => false
kernel => Linux
kernelmajversion => 2.6
kernelversion => 2.6.18
lsbdistdescription => CentOS release 5.5 (Final)
lsbdistid => CentOS
lsbdistrelease => 5.5
lsbmajdistrelease => 5
Aqui a saida dos facter que podemos utilizar para tomada de decisso, por exemplo, a construo de um define...
Facter
# Dell Agent
smuxpeer .1.3.6.1.4.1.674.10892.1
# HP Agent
dlmod cmaX /usr/lib64/libcmaX64.so
dlmod cmaX /usr/lib/libcmaX.so
snmpd.conf com facter
Exemplo de uso do facter. O proprio resolve $operationsystem
Documentao
http://docs.puppetlabs.com/
http://github.com/lak/puppet
Visite a documentao muito boa e bem completa
Terra: Automao da Infraestrutura
Instalar 1 servidor manualmente pode at ser divertido
Instalar 100 servidores no !
O tempo o fator crtico
A qualidade prejudicada
Terra: Processo de Deploy
Terra: Objetivos projeto Automao
Deploy Automatizado de Servio
Deploy Automatizado da Configurao
Integrao das transies de deploy
Histrico de Mudana
Fatores Crticos de Sucesso
Prova de conceito
Planejamento
Apoio da diretoria
Apoio dos formadores de opinio
De o doce para a criana
Terra: Desafios do Projeto
Resistncia a mudana
normal existir algum nvel de resistncia
uma oportunidade de crescimento
Vena os por qus?
Nova maneira de administrar
Configurao vista como programvel
Arquitetura
Desenho da Arquitetura
Apachemod_sslmod_passengerRack: /puppet/rack/puppetmasterdLoad
BalanceSVNpuppet-manifest
puppet-factspuppet-filespuppet-templatesLDAPLDAPLDAPpuppetclassMySQLreportssysadminpuppet
client
Integrao
Monitoramento
Repositrios de pacotes
Inventario Bsico
Deploy do SO
Gesto de Identidade
Webservices
Webservices
Mtodo para configurar PuppetClass
Mtodo para configurar VLAN
Mtodo para configurar DNS (em construo)
Webservice PuppetClass
Webservice SetVLAN
Gesto de Identidade
Integre com soluo de autenticao
Centralize toda a autenticao
Automatize a configurao da autenticao
Deploy de sistema operacional
Utilize PXE e KS
Use pre e post install do KS
Repositrios de pacotes
Crie repositrios de pacotes com YUM
Automatize os repositrios
class yumrepos { case $datacenter { MIA: { $server = "terralinux-mia.tpn.terra.com" } default: { $server = "terralinux-poa.tpn.terra.com" } } trrnoarch": name => "trrnoarch", baseurl => "http://$server/yum/sistemas/centos/$lsbmajdistrelease/noarch/", descr => "Terra-NoArch", enabled => 1; }}
Inventario Bsico
Faa uso da base de reports
Faa uso dos facters
mysql> select b.name, a.value from fact_values a, fact_names bwhere a.host_id = (select id from hosts where name like 'osborne.%')and a.fact_name_id = b.id and a.value = "monit-web-poa" order by b.name;+-------------+---------------+| name | value |+-------------+---------------+| puppetclass | monit-web-poa |+-------------+---------------+1 row in set (0.00 sec)
Monitorao
Categorize seu servidor por plataforma
Integre com SNMP
Smart Discovery
snmpget -v2c -c xxxxxx 127.0.0.1 1.3.6.1.4.1.7803.3.1.20TERRA-SYSTEM-MIB::CorePuppetClass = STRING: "monit-web-poa"
Puppet e o Terra
358 resource Package
248 plataformas
39 defines
10267 files
Terra: Tecnologia
Puppet Torne seu datacenter gil
Jeferson Rodrigues
Muito Obrigado!!!Perguntas?www.terra.com.br/trabalhenoterra
Clique para editar os estilos do texto mestre
Segundo nvel
Terceiro nvel
Quarto nvel
Quinto nvel
Clique para editar o estilo do ttulo mestre
Clique para editar o estilo do subttulo mestre
Clique para editar o estilo do ttulo mestre
Clique para editar os estilos do texto mestre
Segundo nvel
Terceiro nvel
Quarto nvel
Quinto nvel
Clique para editar o estilo do ttulo mestre
Clique para editar os estilos do texto mestre
Clique para editar o estilo do ttulo mestre
Clique para editar os estilos do texto mestre
Segundo nvel
Terceiro nvel
Quarto nvel
Quinto nvel
Clique para editar os estilos do texto mestre
Segundo nvel
Terceiro nvel
Quarto nvel
Quinto nvel
Clique para editar o estilo do ttulo mestre
Clique para editar os estilos do texto mestre
Clique para editar os estilos do texto mestre
Segundo nvel
Terceiro nvel
Quarto nvel
Quinto nvel
Clique para editar os estilos do texto mestre
Clique para editar os estilos do texto mestre
Segundo nvel
Terceiro nvel
Quarto nvel
Quinto nvel
Clique para editar o estilo do ttulo mestre
Clique para editar o estilo do ttulo mestre
Clique para editar os estilos do texto mestre
Segundo nvel
Terceiro nvel
Quarto nvel
Quinto nvel
Clique para editar os estilos do texto mestre
Clique para editar o estilo do ttulo mestre
Clique para editar os estilos do texto mestre
Clique para editar o estilo do ttulo mestre
Clique para editar os estilos do texto mestre
Segundo nvel
Terceiro nvel
Quarto nvel
Quinto nvel
Clique para editar o estilo do ttulo mestre
Clique para editar os estilos do texto mestre
Segundo nvel
Terceiro nvel
Quarto nvel
Quinto nvel