You are on page 1of 169

Braslia/DF

Infraestrutura gil com Puppet por Guto Carvalho


CISL 2014
2014.04.07
Jos Augusto (Guto) Carvalho
Consultor/SysAdmin/DevOp (LPIC-3, RHCE e PCP-201);
14 anos de experincia com TI e FOSS;
Blogueiro TI/FOSS h 13 anos (gutocarvalho.net);
Atuao em vrios projetos de Governo no MDA, MINC, EBC/RADIOBRS,
MPS/DATAPREV, ITI/PR, CAIXA, MD/SIPAM, DETRAN/DF;
Entusiasta DevOps (sysadmin em recuperao) desde 2010.
whoami
FOSS => Free and Open Source Software
Plano de Trabalho
70 minutos de apresentao
25 minutos de demonstrao
25 minutos para perguntas
Faa perguntas quando quiser
Slidedeck disponvel em slideshare.com/gutocarvalho
Infraestrutura gil
Um modelo inteligente e economicamente vivel
Infraestrutura gil um conceito ainda em
formao, mas ele envolve principalmente
gerncia de conguraes, orquestrao,
provisionamento dinmico e metodologias
geis de trabalho em grupo.
Nesta apresentao focaremos na gerncia
de conguraes, uma de suas mais
importantes caractersticas.
Tendncias
Virtualizao
Hoje podemos rodar centenas
de servidores virtuais, com
d i f e r e n t e s s i s t e m a s
operacionais em um mesmo
host em nosso datacenter
Cloud Computing
Hoje podemos rodar todos os
nossos sistemas em nodes
(vms) em nuvens pblicas ou
privadas e nosso parque pode
aumentar ou diminuir de
forma dinmica e automtica
Diminuio de Custos
As empresas hoje buscam
aumentar a qualidade de seus
produtos e servios mas sem
aumentar os seus custos de
manuteno e operao
Agilidade e Flexibilidade
As empresas querem hoje
f e r r ame nt as que l he s
permitam atuar de forma gil
e exvel dentro do seu
negcio, algo que se adapte
as suas necessidades de
forma plena e concreta
Novo tipo de prossional
As empresas esto buscando
no mercado prossionais
mu l t i - d i s c i p l i n a r e s ,
dinmicos, criativos, com
dom ni o em di ferent es
tecnologias para dar vazo a
demandas e trabalhar com
inovao
Desaos
Desaos na TI de hoje
Como administrar parques crescentes?
Como manter nosso parque padronizado?
Como manter nosso parque seguro?
Como manter a qualidade do servio executado?
Como manter o custo de manuteno baixo, sem perder qualidade?
Como saber quantos prossionais eu preciso para administrar meu
ambiente?
Cenrio Virtual
Mjolnir Solutions Inc.
Possui um datacenter em sua sede com 750 VMs
Contratou 50 Nodes Cloud (IASS)
Precisa manter rodando 800 servidores virtuais
Dvidas
Dvidas comuns
Como fao mudanas rpidas em diversos ambientes e servidores?
Como fao para atender demandas em tempo hbil?
Como fao para manter a documentao atualizada?
Como evitar ao mximo downtime durante as mudanas?
Quantos sysadmins eu preciso para administrar 800 VMs?
Depende de como voc
faz a administrao!
Sysadmin Arteso
Hoje ainda comum encontrar
sysadmins que trabalham com
admi ni s t r a o manual ,
utilizando um mtodo quase
artesanal, executando tarefas
repetitivas cotidianamente
Atualizao de Pacotes?
ssh servidor001.dominio.local
ssh servidor002.dominio.local
ssh servidor003.dominio.local

ssh servidor800.dominio.local
Instalao de Apps?
ssh servidor001.dominio.local
ssh servidor002.dominio.local
ssh servidor003.dominio.local

ssh servidor800.dominio.local
Criao de Usurios?
ssh servidor001.dominio.local
ssh servidor002.dominio.local
ssh servidor003.dominio.local

ssh servidor800.dominio.local
Tarefas Repetitivas
Criao de usurio em servidores
Elaborao de scripts
Congurao de servios
Conguraes de monitoramento
Criao de imagens de ambientes
Congurao do sistema operacional
Instalao, atualizao e remoo de pacotes
Exemplo de processo 1
Atualizao de um agente de monitoramento (ubuntu)
ssh servidor001.dominio.local
sudo -i
apt-get install agente-monitoramento-2.0
vim /etc/agente-monitoramento/agent.conf
restart agente-monitoramento
exit
Exemplo de processo 2
Atualizao de um agente de monitoramento (centos)
ssh servidor002.dominio.local
su -
yum install agente-monitoramento-2.0
vim /etc/agente-monitoramento/agent.conf
service agente-monitoramento restart
exit
Exemplo de processo 3
Atualizao de um agente de monitoramento (debian)
ssh servidor003.dominio.local
su -
aptitude install agente-monitoramento-2.0
vim /etc/agente-monitoramento/agent.conf
/etc/init.d/agente-monitoramento restart
exit
Exemplo de processo 4
Atualizao de um agente de monitoramento (fedora)
ssh servidor004.dominio.local
sudo -i
yum install agente-monitoramento-2.0
vim /etc/agente-monitoramento/agent.conf
systemctl restart agente-monitoramento
exit
Cada sistema operacional lida de uma
forma muito particular com seus recursos,
e todas estas excees precisam ser
cuidadosamente avaliadas e tratadas.
O uso de scripts ajuda, mas o sysadmin vai
passar a dividir seu tempo administrando
VMs e ajustando seus scripts para atender
as mais diferentes excees.
Fatalmente uma das duas
atividades ser negligenciada,
i s t o vai ger ar f al has e
problemas.
Cada sysadmin executar demandas
de uma forma distinta, isto gera um
ambiente sem padres, impossvel
de rastear mudanas.
A medida que o parque aumentar
car cada vez mai s di f ci l
administrar, identicar e corrigir
problemas.
Mudanas est r ut ur ant es que
afetarem todo parque levaro mais
tempo para serem concludas pois
no percurso muitas coisas vo
quebrar.
Com o excesso de demandas e
ambiente crescendo cada vez mais,
documentar perder prioridade e
isto criar um ambiente de alto
risco, obscuro e desconhecido
Pausa
Sabe como o sysadmin se sente ao
atuar em um incidente em ambiente
no documentado? Acompanhe
Documentao importante
para voc saber lidar com
uma situao inesperada
Continuando
Percepes da empresa
Aumenta o custo de manuteno devido a retrabalho
Aumenta o desgaste fsico e psquico da equipe
A produtividade da equipe diminui (entregas)
A qualidade do servio oferecido diminui (uptime)
Ocorre uma grande rotatividade de funcionrios
Tarefas Repetitivas
Executadas manualmente signicam retrabalho
Retrabalho
Para a empresa signica maior custo e menor lucro
Retrabalho
Para o sysadmin signica menos tempo com a famlia
Retrabalho
Para ambos signica menor
pr odut i vi dade e menor
qualidade no que se faz e no
que se entrega.
Desperdcio de tempo
uma caracterstica comum
n e s t e m o d e l o d e
a d m i n i s t r a o d e
infraestrutura
Exemplo
O cliente deseja instalar um agente de monitoramento
em todas as 800 VMs, removendo qualquer trao do
produto antigo no nal do procedimento
Procedimento para instalar o agente
Acessar servidor via ssh
Adicionar repositrio APT/YUM
Instalar pacote
Ajustar arquivo de congurao
Reiniciar agente
Remover agente antigo
Instalao de
agente de
monitoramento
800 mquinas
10 minutos por mquina
8000 minutos ou 133 horas
16 dias trabalhando 8 h.p.d
Considerando o modelo manual de
admi ni s t r ao e o r et r abal ho
decorrente de falhas humanas, teremos
um analista focado em uma demanda
simples por cerca de 1 ms.
O modelo manual
um modelo caro e insustentvel
Como resolver
estes problemas?
Como obtenho controle e
padronizao em meu
ambiente ?
Gerncia de Conguraes
Gerncia de Conguraes
Padronizao
Controle
Integridade
Produtividade
Agilidade
Puppet
Ferramenta de nova gerao
que implementa gerncia de
conguraes para seu
ambiente.
Puppet em poucas palavras
documentao executvel
Nos permite parar de administrar e comear a desenvolver nossa infra
Sintaxe simples, prtica e natural para sysadmins
Oferece suporte a diversos tipos de sistemas operacionais unix, linux windows
Sobre a ferramenta
Ferramenta Open Source - Apache License
Ferramenta mantida pela empresa Puppetlabs
Suporte comercial
Criado por Luke Kaines (CEO e Fundador Puppetlabs)
Cases de uso com grandes players (HP, CISCO, VMWARE...)
Recebeu pesados investimentos em 2012/2013
Feito por um SysAdmin para SysAdmins
Desenhada para uso DevOps
Viso DevOps
Tech Specs
Escrito em Ruby
Extensvel usando cdigo Ruby
Funciona em modo autnomo (sem servidor)
Funciona em modo cliente e servidor
Usa RESTful API
Oferece comunicao segura com uso de certicados digitais
Clientes Puppet Enterprise
Parcerias
Parcerias
Alguns cases no Brasil
Arquitetura
Como funciona o Puppet?
O Puppet pode funcionar em modo
masterless, isto signica sem
servidor. Voc pode aplicar uma
congurao do Puppet diretamente a
um sistema operacional apenas com o
agente instalado.
O Puppet tambm funciona em modo
cliente e servidor. Isto signica que vic
instalar o puppet master em
alguma VMs e seus agentes iro se
comunicar com ele para obter
conguraes.
Existem cenrios de uso de Puppet
masterless distribudo, usando GIT.
Neste modelo as conguraes do
Puppet so obtidas via GIT e o agente
acionado via cron peridicamente
Tratamento de informaes
e o uso de dados pelo Puppet
Todas as informaes de uma sistema
operacional, seja um pacote, usurio,
arquivo ou servio so consideradas um
'dado' para o puppet.
Quando construmos conguraes,
estas so convertidas em catlogos
XML, estes por sua vez so lidos pelos
agentes e a congurao ento
aplicada ao sistema operacional.
Entenda como funciona
a relao cliente e servidor
Tudo feito pelo agente localmente, o
servidor no se conecta na mquina
para aplicar as conguraes.
O servidor puppet apenas o
repositrio de conguraes, ele tem
apenas o dever de construir e enviar o
catlogo quando isso for solicitado por
um agente.
Abstrao
menor preocupao e maior resultado
Resource Abstraction Layer
Camada de Abstrao de Recursos
Fale o que voc quer que seja feito
No se preocupe em como ser feito
O Puppet sabe como precisa fazer o que voc pediu
Instale Pacote X
Remova usurio Z
(Re)inicie servio Y
O Puppet orientado a estados, ns
criamos conguraes denindo estes
e s t a d o s , u ma v e r d a d e i r a
documentao executvel.
Idempotncia
Caracterstica exclusiva do Puppet, nenhum outro faz isto.
Puppet na rede
Entenda como funciona a comunicao com o Master
Modo cliente e servidor
O agente gera um certicado digital
O master precisa autorizar o certicado
Sem autorizao o agente no pode se comunicar
Toda a comunicao entre agente e master segura
Puppet Viso em Rede
Puppet Master
Puppet Agent
8140 TCP
puppet agent -t
SSL
envio do
catlogo
Fluxo Cliente/Servidor
Instalao do
node
Fluxo Cliente/Servidor
Instalao do
node
Inicializao
do puppet
Fluxo Cliente/Servidor
Instalao do
node
Gerao de
Certicado
Inicializao
do puppet
Fluxo Cliente/Servidor
Instalao do
node
Gerao de
Certicado
Envio de
Certicado
Inicializao
do puppet
Fluxo Cliente/Servidor
Instalao do
node
Gerao de
Certicado
Master Assina
Certicado
Envio de
Certicado
Inicializao
do puppet
Fluxo Cliente/Servidor
Instalao do
node
Gerao de
Certicado
Agente
Sincroniza
Master Assina
Certicado
Envio de
Certicado
Inicializao
do puppet
Fluxo Cliente/Servidor
Instalao do
node
Gerao de
Certicado
Agente
Sincroniza
Master Assina
Certicado
Envio de
Certicado
Inicializao
do puppet
Modalidades de Assinatura de Certicado
Assinatura pode ser manual

Assinatura pode ser automtica por domnio

Assinatura pode ser automtica em qualquer requisio

O agente se comunica com o
master a cada N minutos, voc congura N
Conguraes
Volteis e Dados
Puppet
Master
Mdulos Estticos
Viso ampla do Puppet
LDAP DNS MONIT SYSLOG
JBOSS APACHE MYSQL PGSQL
Puppet Agents
Camada de Aplicao
Camada de Servios Estruturantes
Quais recursos esto disponveis?
Recursos do Puppet
Resource Types
Parmetros e Meta-parmetros
Templates e Denies
Classes e Mdulos
Funes e Condicionais
Puppet Resource Types
Arquivos e Diretrios
Usurios
Alias
Pacotes
Servios

Yum Repos
Augeas
Hosts
SSH
Cron
O puppet oferece 38 tipos de recursos nativos, e voc pode estend-lo.
Resource Type: Packages
Suporte a 23 tipos de
provedores de pacotes
Faz a abstrao do OS
Declare se o pacote deve estar
presente ou ausente
Declare se o pacote deve
sempre estar em sua ltima
verso
Resource Type: Services
Suporta 11 tipos de sistemas
INIT para inicializar servios
Declare se um servio deve
estar sempre rodando
Declare se um servio deve ser
carregado no boot
Declare se um servio depende
de um pacote ou arquivo
Resource Type: File
Especique permisses e
owners
Declare arquivos,
diretrios e links
Controle de mudanas
usando at 15 tipos de
checksums
Exemplos
Instala, Congura e Inicia
instalar um pacote
ativar um servio no boot
copiar arquivo de congurao
iniciar servio instalado
o que queremos fazer?
Instala, Congura e Inicia
# aptitude install apache2
# insserv apache2
# cp ~/httpd.conf /etc/apache2/
# invoke-rc.d apache2 start
no debian seria assim:
Instala, Congura e Inicia
# yum install httpd
# chkcong httpd on
# cp ~/httpd.conf /etc/httpd/conf/
# service httpd start
no redhat/centos seria assim:
Como seria no Puppet?
Puppet Manifests
Arquivos com extenso.pp, neles expressamos nossas
necessidades utilizando a sintaxe declarativa do Puppet
package { 'apache2':
ensure => present,
}

service { 'apache2':
ensure => running,
enable => true,
}

le { '/etc/apache2/httpd.conf':
ensure => present,
mode => 0644,
owner => root,
group => root,
ensure => puppet:///les/apache/httpd.conf,
}
Instala, Congura e Inicia
package { 'apache2':
ensure => present,
}

service { 'apache2':
ensure => running,
enable => true,
}

le { '/etc/apache2/httpd.conf':
ensure => present,
mode => 0644,
owner => root,
group => root,
ensure => puppet:///les/apache/httpd.conf,
}
package { 'apache2':
ensure => present,
}

service { 'apache2':
ensure => running,
enable => true,
}

le { '/etc/apache2/httpd.conf':
ensure => present,
mode => 0644,
owner => root,
group => root,
ensure => puppet:///les/apache/httpd.conf,
}
resource type
parameter
title
value
A mesma congurao atende a
diversos sistemas operacionais, a
sintaxe simples e direta. uma
declarao de estados que o Puppet vai
interpretar e aplicar.
Documentao Executvel.
Mais exemplos
Declarando um node (site.pp)
node servidor.dominio {
include linux-server
include module
}
node balancer.dominio {
include linux-server
include cyrus::backend
include postx::hub
include haproxy::mailproxy
}
Apenas com as informaes do node, j
podemos entender o que ele faz e
quais ferramentas o puppet gerencia
nele, outro tipo de documentao.
Variveis e Fatos
Fatos (facter)
vimpackage => vim-puppet,

apacheservice => apache2,

ntpconfrhel => ntp.conf.rhel,

servername => $facts[fqdn],
Constantes e Variveis
domain
fqdn
hostname
interfaces
ipaddress_eth0
ipaddress_eth1
ipaddress_lo
lsbdistid
lsbdistrelease
=> hacklab,
=> puppetmaster.hacklab,
=> puppetmaster,
=> eth0,eth1,lo,
=> 10.0.2.15,
=> 192.168.56.150,
=> 127.0.0.1,
=> debian,
=> 6.0.5,
Condicionais
case $operatingsystem {
CentOS,RedHat: {
$package_name = 'ntp',
$service_name = 'ntpd',
$conf_le = 'ntp.conf.el',
}
Debian,Ubuntu: {
$package_name = 'ntp',
$service_name = 'ntp',
$conf_le = 'ntp.conf.debian',
}
}
....
Condicionais
if $operatingsystem == '"CentOS" {
$package_name = 'ntp',
$service_name = 'ntpd',
$conf_le = 'ntp.conf.el',
}
elseif $operatingsystem == 'Debian' {
$package_name = 'ntp',
$service_name = 'ntp',
$conf_le = 'ntp.conf.debian',
}
else {
notify { Sistema desconhecido: }
}
....
Condicionais
if ( $operatingsystem == 'Debian' ) and ( $lsbdistcodename == 'squeeze' ) {

bloco de cdigo

}
Denies
proxy { 'Filial' :
http_port
squid_mode
squid_hostname
cache_mem
maximum_object_size_in_memory
maximum_object_size
memory_replacement_policy
cache_replacement_policy
cache_dir
cache_mgr
cache_effective_user
cache_effective_group
dns_nameservers
ips_squid
}
=> '3128',
=> 'transparent',
=> 'proxy.hacklab',
=> '2 GB',
=> '6 MB',
=> '128 MB',
=> 'heap GDSF',
=> 'heap LFUDA',
=> 'aufs /var/spool/squid 1024 16 256',
=> monitora@hacklab.local,
=> 'proxy',
=> 'proxy',
=> '127.0.0.1 10.61.12.2 172.16.1.1',
=> '127.0.0.1 192.168.12.3',
Denies
proxy { 'Matriz' :
http_port
squid_mode
squid_hostname
cache_mem
maximum_object_size_in_memory
maximum_object_size
memory_replacement_policy
cache_replacement_policy
cache_dir
cache_mgr
cache_effective_user
cache_effective_group
dns_nameservers
ips_squid
}
=> '3128',
=> 'transparent',
=> 'proxy.hacklab',
=> '8 GB',
=> '6 MB',
=> '512 MB',
=> 'heap GDSF',
=> 'heap LFUDA',
=> 'aufs /var/spool/squid 8096 16 256',
=> monitora@hacklab.local,
=> 'proxy',
=> 'proxy',
=> '127.0.0.1 10.61.12.2 172.16.1.1',
=> '127.0.0.1 192.168.12.3',
Templates
myorigin = <%= hostname %>
mydestination = $myhostname, ..., localhost, <%= fqdn %>
Trecho do template postx/main.cf
myorigin = servidor.dominio
mydestination = $myhostname, ..., localhost, servidor.dominio
Substituio de variveis por fatos
Padronizando nodes
Base Class
class linux-server {
include sysadmin-utils
include zabbix-agent
include ntpconf
include locales
include hosts
include users
include localmta
include vimrc
include backup-agent
include apt-repos
}
Node default
node default {
include linux-server
}
Dashboards para Puppet
Puppet Dashboard
Foreman
Outros projetos Puppetlabs
Outros projetos Puppetlabs
PuppetDB (coletor de dados)
Razor (provisionador)
Hiera (separa dados de cdigo)
Facter (fatos do sistema)
Mcollective (orquestrador)
Gerenciadores Externos para o Puppet
Congr
Posso fazer mudanas em
tempo real?
Marionette Collective
Orquestrador de nodes
Execuo de Tarefas Paralelas
Interao com centenas de nodes
Inventrio descentralizado
Leitura de meta-dados do Puppet
Similar a Fabric e Capistrano
Provisionamento? possvel ?
Ferramentas de provisionamento VM

Foreman
Vagrant
Razor
Sprinkle
Puppet Enterprise
Ferramentas de provisionamento SW

Ansible
Salt
Capistrano
Fabric
Demonstrao
Qual o resultado concreto?
A o e s c r e v e r mo s a s n o s s a s
conguraes, estamos expressando o
que desejamos ter em nossos nodes,
com isto, j estamos construindo nossa
documentao.
Aos escrevermos uma congurao,
estamos denindo como aquilo de ser
instalado, congurado e como deve
funcionar. Toda a equipe passa a usar a
mesma receita, isto signica que
teremos processos padronizados.
O Puppet oferece recursos para voc
fazer backup e restore de arquivos
modicados, portanto, voc tem a
segurana de poder recuperar
ambientes caso precise.
Ao adotar Puppet voc no vai mais
sentir vontade de executar nada sem
ele, tudo j nascer automatizado e
c ont r ol ado, c om pr oc es s os e
documentao instantnea.
Respostas
Um sysadmin que no usa Puppet
consegue administrar no mximo 30
servidores, com alguma diculdade e
muito retrabalho.
Um sysadmin que usa Puppet consegue
administrar entre 250 e 1000
s er vi dor es c om f ac i l i dade, a
quantidade vai depender do nvel de
automatizao e maturidade do
prossional e sua equipe.
Para administrar 800 VMs, utilizando
Puppet, voc precisar de 4 sysadmins,
e armo que dependendo do nvel de
automao at menos.
Compare
Ambiente com 800 nodes
modo manual puppet
instalando agente 133 horas N minutos
Benefcios Reais
Maior produtividade em menor tempo
Poucos sysadmins para muitos nodes
Diminuio de falhas humanas
Maior controle de todo o seu parque
Diminuio do tempo gasto em mudanas
Diminuio do custo de manuteno
O sysadmin far jornadas de trabalho
normais, car mais tempo com a
famlia, ter mais qualidade de vida e
com isso ir produzir mais e melhor.
O negcio de sua empresa vai uir, ter
m e l h o r q u a l i d a d e , m a i o r
disponibilidade e menor custo
operacional, sendo gerido por uma
equipe qualicada e eciente.
Puppet Labs
Puppetlabs
Suporte Comercial (em ingls)
Programa de treinamento presencial
Programa de certicao para Sysadmins - PCP 201
Programa de certicao para Developers - PCP 301
Puppet Enterprise Dashboard (Gerenciador)
Puppet em nmeros
700+ pessoas online no canal
#puppet da irc.freenode.net
8.500+ repositrios no GitHub
1000+ mdulos no PuppetForge
5000+ usurios ativos na lista
puppet-users com 8000+ tpicos de
discusso
Comunidade brasileira!
Site/Blog
http://www.puppetlabs.com
http://www.puppetlabs.com/blog/
http://puppet-br.org/

Twitter
@puppetlabs
@puppetmasterd (luke)
GitHub
http://www.github.com/puppelabs

Puppet na rede
Google Groups
Puppet-camp,
puppet-users,
puppet-users-br,
puppet-dev
IRC
irc.freenode.org
#puppet
#puppet-br
Existe suporte comercial no Brasil?
Suporte Ocial Puppetlabs no Brasil
Empresa especializada em Puppet
Cursos ociais, Puppet Enterprise, consultoria e suporte
1o Parceiro ocial Puppetlabs Brasil
1o empresa com pessoas certicados PCP na Amrica Latina
Acesse http://www.instruct.com.br
Inovando com o Puppet
PUPPET COMO SERVIO

Gerenciamento de Congurao COMO SERVIO


Automatizar Infraestrutura de GRANDES CORPORAES


Interface intuitiva focada em AGILIDADE e AUTONOMIA


Suporte com PROFISSIONAIS CERTIFICADOS (PCP, RHCE, LPI-3)


SERVIO PIONEIRO para Gesto de Infraestrutura no Brasil


www.congr.com
Perguntas?
Obrigado!
Linkedin: http://br.linkedin.com/in/gutocarv
E-mail: gutocarvalho@gmail.com
Contato
Slides: slideshare.net/gutocarvalho
Blog: gutocarvalho.net
Twitter: @gutocarvalho
http://puppetlabs.com
http://instruct.com.br
http://congr.com