Brasília/DF
2013-04-27
Infraestrutura como código - Apresentando Puppet
Guto Carvalho
sexta-feira, 16 de agosto de 13
Oficina infraestrutura como código
Apresentando: Puppet
Guto Carvalho
gutocarvalho@gmail.com
sexta-feira, 16 de agosto de 13
José Augusto (Guto) Carvalho
Consultor/SysAdmin/DevOp (LPIC-3 e PCP-201);
14 anos de experiência com TI e FOSS;
Blogueiro TI/FOSS há 10 anos no site gutocarvalho.net;
Atuação em vários projetos de Governo no MDA, MINC, EBC/RADIOBRÁS,
MPS/DATAPREV, ITI/PR, CAIXA, MD/SIPAM, DETRAN/DF;
Entusiasta DevOps (sysadmin em recuperação) desde 2010.
whoami
FOSS => Free and Open Source Software
sexta-feira, 16 de agosto de 13
Plano de Trabalho
50 minutos de apresentação
10 minutos para perguntas
3 horas de mão na massa
Slidedeck disponível em slideshare.com/gutocarvalho
sexta-feira, 16 de agosto de 13
Agenda
Teoria
Configuração de VMs
Instalação de Puppet
Mão na Massa (Resource Types)
Dashboard & Foreman
sexta-feira, 16 de agosto de 13
Administração de sistemas e serviços
sexta-feira, 16 de agosto de 13
Virtualização
sexta-feira, 16 de agosto de 13
Cloud Computing
sexta-feira, 16 de agosto de 13
Administração Manual
sexta-feira, 16 de agosto de 13
Administração Manual
Tarefas repetitivas
Não existem padrões
Não existem procedimentos
sexta-feira, 16 de agosto de 13
Cada sysadmin faz do seu jeito
sexta-feira, 16 de agosto de 13
Tarefas Repetitivas	
Criação de usuários
Elaboração de scripts
Configuração de serviços
Configurações de monitoramento
Criação de imagens de ambientes
Configuração do sistema operacional
Instalação, atualização e remoção de pacotes
sexta-feira, 16 de agosto de 13
A medida que o parque aumenta
administrá-lo fica mais complicado
sexta-feira, 16 de agosto de 13
Você vai percerber que...
Fica mais difícil identificar e corrigir problemas
Fica mais difícil manter ambientes complexos funcionando
Fica mais difícil manter seu parque padronizado
Sua produtividade diminui a media que o ambiente cresce
Sua capacidade de entrega não é mais a mesma
Você nunca chega em casa no mesmo horário
Você trabalha muitos finais de semana e madrugadas
sexta-feira, 16 de agosto de 13
Maior risco de falhas
sexta-feira, 16 de agosto de 13
Maior tempo gasto para
executar mudanças
sexta-feira, 16 de agosto de 13
Criação de
usuário
450 máquinas
3 minutos por máquina
1350 minutos ou 22,5 horas
450 trocas de senhas
sexta-feira, 16 de agosto de 13
Procedimento para criar usuário
Acessar o servidor por ssh
Se tornar root
Criar usuário
Especificar senha temporária
Especificar permissões no sudoers
sexta-feira, 16 de agosto de 13
Instalação de
agente de
monitoramento
450 máquinas
10 minutos por máquina
4500 minutos ou 75 horas
9 dias trabalhando 8 h.p.d
sexta-feira, 16 de agosto de 13
Procedimento para instalar zabbix
Acessar servidor via ssh
Adicionar repositório APT
Atualizar índices
Instalar pacote
Ajustar arquivo zabbix_agentd.conf
Reiniciar agente zabbix
Remover agente antigo (nagios).
sexta-feira, 16 de agosto de 13
Documentação inexistente
sexta-feira, 16 de agosto de 13
Não há rastreamento de mudanças
sexta-feira, 16 de agosto de 13
sexta-feira, 16 de agosto de 13
Você começa a ter a sensação de estar sendo
engolido por seu ambiente?
sexta-feira, 16 de agosto de 13
Como resolver
estes problemas?
Como obtenho controle e
padronização em meu
ambiente ?
sexta-feira, 16 de agosto de 13
Gerência de Configurações
sexta-feira, 16 de agosto de 13
Padronização
sexta-feira, 16 de agosto de 13
Automatização
sexta-feira, 16 de agosto de 13
Controle
sexta-feira, 16 de agosto de 13
Integridade
sexta-feira, 16 de agosto de 13
Agilidade nas mudanças
sexta-feira, 16 de agosto de 13
Puppet
Ferramenta de nova geração
que implementa gerência de
configurações para seu
ambiente.
sexta-feira, 16 de agosto de 13
Puppet em poucas palavras
sexta-feira, 16 de agosto de 13
Puppet em poucas palavras
Nos permite parar de administrar e começar a desenvolver nossa infra
Nos permite reaproveitar código para construir configurações
Oferece linguagem declarativa para criar configurações
Sintaxe simples, prática e natural para sysadmins
Oferece suporte a Linux, BDBs, OSX e Windows
sexta-feira, 16 de agosto de 13
Sobre a ferramenta
sexta-feira, 16 de agosto de 13
Sobre a ferramenta
Ferramenta Open Source - Apache License
Ferramenta mantida pela empresa Puppetlabs
Empresa oferece suporte e versão enterprise
Criado por Luke Kaines (CEO e Fundador Puppetlabs)
Cases de uso com gandes players (HP, CISCO, VMWARE...)
Recebeu pesados investimentos (VMWARE 30bi)
sexta-feira, 16 de agosto de 13
Sobre a ferramenta
Ferramenta Open Source - Apache License
Ferramenta mantida pela empresa Puppetlabs
Empresa oferece suporte e versão enterprise
Criado por Luke Kaines (CEO e Fundador Puppetlabs)
Cases de uso com gandes players (HP, CISCO, VMWARE...)
Recebeu pesados investimentos (VMWARE 30bi)
sexta-feira, 16 de agosto de 13
Feito por um SysAdmin para SysAdmins
sexta-feira, 16 de agosto de 13
Desenhada para uso DevOps
sexta-feira, 16 de agosto de 13
sexta-feira, 16 de agosto de 13
DEVOPS
Developers (Dev)
Operations (Ops)
sexta-feira, 16 de agosto de 13
Visão DevOps
sexta-feira, 16 de agosto de 13
Veja palestra DevOps do Flisol/DF 2013
sexta-feira, 16 de agosto de 13
Tech Specs
sexta-feira, 16 de agosto de 13
Tech Specs
Escrito em Ruby
Extensível usando código Ruby
Funciona em modo autônomo e serverless
Funciona em modo cliente.servidor
Usa RESTful API
Oferece comunicação segura com uso de certificados digitais
sexta-feira, 16 de agosto de 13
Cases Puppet Enterprise
sexta-feira, 16 de agosto de 13
Cases Puppet Gov Brasil
Detran/DF
EBC - Empresa Brasil de Comunicação
CAIXA (expresso)
CAIXA (estação financeira)
CAIXA (proinfo)
SERPRO
....
sexta-feira, 16 de agosto de 13
Arquitetura
Como funciona o Puppet?
sexta-feira, 16 de agosto de 13
Resource Abstraction Layer
(RAL)
sexta-feira, 16 de agosto de 13
Resource Abstraction Layer
sexta-feira, 16 de agosto de 13
Resource Abstraction Layer
Camada de Abstração de Recursos
Fale o que você quer que seja feito
Não se preocupe em como será feito
O Puppet sabe como fazer
sexta-feira, 16 de agosto de 13
Instale Pacote X
sexta-feira, 16 de agosto de 13
Remova usuário Z
sexta-feira, 16 de agosto de 13
(Re)inicie serviço Y
sexta-feira, 16 de agosto de 13
Tratamento de
Informações
O grande diferencial do Puppet
é a forma como ele trata as
informações de seus nodes
sexta-feira, 16 de agosto de 13
Tratamento de informações
sexta-feira, 16 de agosto de 13
Tratamento de informações
No Puppet tudo é modelado e tratado como ‘dados’
O estado atual de um node (servidor) é um dado
Um pacote instalado em um node é um dado
Um usuário em um servidor é um dado
sexta-feira, 16 de agosto de 13
Os dados são inseridos em
catálogos pelo master
O catálogo é processado pelo node e as modificações
são aplicadas de acordo com o que foi declarado.
sexta-feira, 16 de agosto de 13
Processamento
do Catálogo
1) Agente Requisita Catálogo
2) Agente envia Fatos para Master
3) Master Processa Fatos e Compara
4) Master Produz e envia Catálogo
5) Node Recebe, Compara e Aplica
6) Node informa estado atual ao Master
7) Sistema reflete catálogo
sexta-feira, 16 de agosto de 13
Processamento
do Catálogo
1) Agente Requisita Catálogo
2) Agente envia Fatos para Master
3) Master Processa Fatos e Compara
4) Master Produz e envia Catálogo
5) Node Recebe, Compara e Aplica
6) Node informa estado atual ao Master
7) Sistema reflete catálogo
sexta-feira, 16 de agosto de 13
Idempotência
sexta-feira, 16 de agosto de 13
Configurações
Voláteis e Dados
Puppet
Master
Módulos Estáticos
Visão ampla do Puppet
LDAP DNS MONIT SYSLOG
JBOSS APACHE MYSQL PGSQL
Puppet Agents
Camada de Aplicação
Camada de Serviços Estruturantes
sexta-feira, 16 de agosto de 13
Você pode fazer deploy de sua APP
Você pode controlar a versão de sua APP
sexta-feira, 16 de agosto de 13
sexta-feira, 16 de agosto de 13
Como funciona o modo cliente/servidor?
sexta-feira, 16 de agosto de 13
Modo Cliente/Servidor
O agente gera um certificado digital
O master precisa autorizar o certificado
Sem autorização o agente não pode se comunicar
Toda a comunicação entre agente e master é segura
sexta-feira, 16 de agosto de 13
Puppet Visão em Rede
Puppet Master
Puppet Client
8140 TCP
Client
puppetd -t
8139 TCP
Server
puppetkick
SSL
sexta-feira, 16 de agosto de 13
Fluxo Cliente/Servidor
Instalação do
node
sexta-feira, 16 de agosto de 13
Fluxo Cliente/Servidor
Instalação do
node
Inicialização
do puppet
sexta-feira, 16 de agosto de 13
Fluxo Cliente/Servidor
Instalação do
node
Geração de
Certificado
Inicialização
do puppet
sexta-feira, 16 de agosto de 13
Fluxo Cliente/Servidor
Instalação do
node
Geração de
Certificado
Envio de
Certificado
Inicialização
do puppet
sexta-feira, 16 de agosto de 13
Fluxo Cliente/Servidor
Instalação do
node
Geração de
Certificado
Master Assina
Certificado
Envio de
Certificado
Inicialização
do puppet
sexta-feira, 16 de agosto de 13
Fluxo Cliente/Servidor
Instalação do
node
Geração de
Certificado
Agente
Sincroniza
Master Assina
Certificado
Envio de
Certificado
Inicialização
do puppet
sexta-feira, 16 de agosto de 13
Fluxo Cliente/Servidor
Instalação do
node
Geração de
Certificado
Agente
Sincroniza
Master Assina
Certificado
Envio de
Certificado
Inicialização
do puppet
Modalidades de Assinatura de Certificado
Assinatura pode ser manual
Assinatura pode ser automática por domínio
Assinatura pode ser automática em qualquer requisição
sexta-feira, 16 de agosto de 13
O agente se comunica com o
master a cada N minutos
sexta-feira, 16 de agosto de 13
Posso forçar execução do agente
de forma remota?
sexta-feira, 16 de agosto de 13
sexta-feira, 16 de agosto de 13
Quais recursos estão disponíveis?
sexta-feira, 16 de agosto de 13
Recursos do Puppet
Resource Types
Parâmetros e Meta-parâmetros
Templates e Definições
Classes e Módulos
Funções e Condicionais
sexta-feira, 16 de agosto de 13
Puppet Resource Types
Arquivos e Diretórios
Usuários
Alias
Pacotes
Serviços
Yum Repos
Augeas
Hosts
SSH
Cron
O puppet oferece 38 tipos de recursos nativos, e você pode estendê-lo.
sexta-feira, 16 de agosto de 13
Resource Type: Packages
Suporte a 23 tipos de
provedores de pacotes
Faz a abstração do OS
Declare se o pacote deve estar
presente ou ausente
Declare se o pacote deve
sempre estar em sua última
versão
sexta-feira, 16 de agosto de 13
Resource Type: Services
Suporta 11 tipos de sistemas
INIT para inicializar serviços
Declare se um serviço deve
estar sempre rodando
Declare se um serviço deve ser
carregado no boot
Declare se um serviço depende
de um pacote ou arquivo
sexta-feira, 16 de agosto de 13
Resource Type: File
Especifique permissões e
owners
Declare arquivos,
diretórios e links
Controle de mudanças
usando até 15 tipos de
checksums
sexta-feira, 16 de agosto de 13
Exemplos
sexta-feira, 16 de agosto de 13
Instala, Configura e Inicia
# aptitude install apache2
# update-rc.d -f apache2 defaults
# cp ~/httpd.conf /etc/apache2/
# invoke-rc.d apache2 start
debian-way
sexta-feira, 16 de agosto de 13
package { 'apache2':
ensure => present,
}
 
service { 'apache2':
ensure => running,
enable => true,
}
file { 'httpd.conf':
path => “/etc/apache2/httpd.conf”,
source => “/etc/puppet/files/httpd.conf”,
}
Instala, Configura e Inicia
sexta-feira, 16 de agosto de 13
package { 'apache2':
ensure => present,
}
 
service { 'apache2':
ensure => running,
enable => true,
}
file { 'httpd.conf':
path => “/etc/apache2/httpd.conf”,
source => “/etc/puppet/files/httpd.conf”,
}
Instala, Configura e Inicia
resource type
parameter
title
value
sexta-feira, 16 de agosto de 13
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
}
sexta-feira, 16 de agosto de 13
Declarando um node
node “servidor.dominio” {
include linux-server
include module
}
node “balancer.dominio” {
include linux-server
include cyrus::backend
include postfix::hub
include haproxy::mailproxy
}
sexta-feira, 16 de agosto de 13
Variáveis e Fatos
Fatos (facter)
vimpackage => vim-puppet,
apacheservice => apache2,
ntpconfrhel => ntp.conf.rhel,
Variáveisdomain
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,
sexta-feira, 16 de agosto de 13
Condicionais
case $operatingsystem {
CentOS,RedHat: {
$package_name = 'ntp',
$service_name = 'ntpd',
$conf_file = 'ntp.conf.el',
}
Debian,Ubuntu: {
$package_name = 'ntp',
$service_name = 'ntp',
$conf_file = 'ntp.conf.debian',
}
}
....
sexta-feira, 16 de agosto de 13
Definições
proxy::squid { 'ProxyFilial' :
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.4linux',
=> '2 GB',
=> '6 MB',
=> '128 MB',
=> 'heap GDSF',
=> 'heap LFUDA',
=> 'aufs /var/spool/squid 1024 16 256',
=> 'monitora@4linux.com.br',
=> 'proxy',
=> 'proxy',
=> '127.0.0.1 10.61.12.2 172.16.1.1',
=> '127.0.0.1 192.168.12.3',
sexta-feira, 16 de agosto de 13
Templates
myorigin = <%= hostname %>
mydestination = $myhostname, ..., localhost, <%= fqdn %>
Trecho do template postfix/main.cf
myorigin = servidor.dominio
mydestination = $myhostname, ..., localhost, servidor.dominio
Substituição de variáveis por fatos
sexta-feira, 16 de agosto de 13
Como acompanho mudanças?
sexta-feira, 16 de agosto de 13
Puppet Dashboard
sexta-feira, 16 de agosto de 13
sexta-feira, 16 de agosto de 13
Posso fazer mudanças em
tempo real?
sexta-feira, 16 de agosto de 13
Marionette Collective
Orquestrador de nodes
Execução de Tarefas Paralelas
Interação com centenas de nodes
Inventário descentralizado
Leitura de meta-dados do Puppet
Similar a Fabric e Capistrano
sexta-feira, 16 de agosto de 13
Mão na Massa
sexta-feira, 16 de agosto de 13
http://gutocarvalho.net/dokuwiki
http://172.16.61.105/
puppet serverless
sexta-feira, 16 de agosto de 13
Demonstração do puppet em modo autônomo
sexta-feira, 16 de agosto de 13
puppet resource (ral)
sexta-feira, 16 de agosto de 13
puppet apply manifest.pp
sexta-feira, 16 de agosto de 13
manifests
sexta-feira, 16 de agosto de 13
resource type file
sexta-feira, 16 de agosto de 13
resource type package
sexta-feira, 16 de agosto de 13
resource type service
sexta-feira, 16 de agosto de 13
resource type user
sexta-feira, 16 de agosto de 13
condicionais, templates, definições...
sexta-feira, 16 de agosto de 13
puppet filebucket
sexta-feira, 16 de agosto de 13
puppet parser
sexta-feira, 16 de agosto de 13
Demonstração do puppet modo cliente servidor
sexta-feira, 16 de agosto de 13
site.pp
sexta-feira, 16 de agosto de 13
nodes
sexta-feira, 16 de agosto de 13
classes
sexta-feira, 16 de agosto de 13
módulos
sexta-feira, 16 de agosto de 13
puppet agent --test
sexta-feira, 16 de agosto de 13
Demonstração mcollective
sexta-feira, 16 de agosto de 13
mco puppet runonce -v
sexta-feira, 16 de agosto de 13
mco facts operatingsystem -v
sexta-feira, 16 de agosto de 13
mco shell “uptime” -v
sexta-feira, 16 de agosto de 13
Puppet Labs
sexta-feira, 16 de agosto de 13
Qual o resultado concreto?
sexta-feira, 16 de agosto de 13
Documentação Instantânea
sexta-feira, 16 de agosto de 13
Processos bem definidos
sexta-feira, 16 de agosto de 13
Ambiente Padronizado
sexta-feira, 16 de agosto de 13
Restore e backup de mudanças
sexta-feira, 16 de agosto de 13
Tarefas Automatizadas
sexta-feira, 16 de agosto de 13
Benefícios Reais
Maior produtividade em menor tempo
Poucos sysadmins para muitos nodes
Diminuição de falhas humanas
Maior controle de todo o seu parque
Diminuição do tempo gasto em mudanças
Diminuição do custo de manutenção
Você chegará cedo em casa e suas madrugas e finais de semana serão seus
sexta-feira, 16 de agosto de 13
Comparando
Ambiente com 450 nodesAmbiente com 450 nodesAmbiente com 450 nodes
modo manual puppet
instalando zabbix 75 horas 10 minutos
criando usuário 22 horas 10 minutos
sexta-feira, 16 de agosto de 13
Tecnologia trabalhando para você
sexta-feira, 16 de agosto de 13
Boas Práticas
sexta-feira, 16 de agosto de 13
Insira o puppet nos templates
de seu hypervisor
sexta-feira, 16 de agosto de 13
Use o puppet para executar e
controlar mudanças em seu parque
sexta-feira, 16 de agosto de 13
Para de administrar e comece a
desenvolver a sua infraestrutura
sexta-feira, 16 de agosto de 13
Nova demanda? Já execute utilizando o Puppet,
escreva classes e módulos para que você só tenha
que fazer isto 1 vez e reaproveitar o código depois.
sexta-feira, 16 de agosto de 13
Versione as configurações (git)
criadas no Puppet.
sexta-feira, 16 de agosto de 13
Reaproveite código, escreva seus módulos
da forma mais flexível possível.
sexta-feira, 16 de agosto de 13
Não precisa começar do zero, use
módulo prontos do GitHub e
PuppetForge.
sexta-feira, 16 de agosto de 13
Pesquise, há muita informação
sobre puppet na rede!
sexta-feira, 16 de agosto de 13
Puppet em números
727 pessoas online no canal
#puppet da irc.freenode.net
8.500 repositórios no GitHub
450 módulos no PuppetForge
4457 usuários ativos na lista
puppet-users com 7795 tópicos de
discussão
Dados coletados em 2012-08-06 às 10:34 PM
sexta-feira, 16 de agosto de 13
Puppet Labs
sexta-feira, 16 de agosto de 13
Site/Blog
http://www.puppetlabs.com
http://www.puppetlabs.com/blog/
http://puppet-br.org/
Twitter
@puppetlabs
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
sexta-feira, 16 de agosto de 13
Perguntas?
sexta-feira, 16 de agosto de 13
Obrigado!
Linkedin: http://br.linkedin.com/in/gutocarv
E-mail: gutocarvalho@gmail.com
Contato
Slides: slideshare.net/gutocarvalho
Blog: gutocarvalho.net
Twitter: @gutocarvalho
sexta-feira, 16 de agosto de 13

Oficina de infraestrutura como código (apresentando o Puppet)