Brasília/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 experiência com TI e FOSS;
Blogueiro TI/FOSS há 13 anos (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
Plano de Trabalho
70 minutos de apresentação
25 minutos de demonstração
25 minutos para perguntas
Faça perguntas quando quiser
Slidedeck disponível em slideshare.com/gutocarvalho
Infraestrutura Ágil
Um modelo inteligente e economicamente viável
Infraestrutura ágil é um conceito ainda em
formação, mas ele envolve principalmente
gerência de configurações, orquestração,
provisionamento dinâmico e metodologias
ágeis de trabalho em grupo.
Nesta apresentação focaremos na gerência
de configurações, uma de suas mais
importantes características.
Tendências
Virtualização
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 públicas ou
privadas e nosso parque pode
aumentar ou diminuir de
forma dinâmica e automática
Diminuição de Custos
As empresas hoje buscam
aumentar a qualidade de seus
produtos e serviços mas sem
aumentar os seus custos de
manutenção e operação
Agilidade e Flexibilidade
As empresas querem hoje
ferramentas que lhes
permitam atuar de forma ágil
e flexível dentro do seu
negócio, algo que se adapte
as suas necessidades de
forma plena e concreta
Novo tipo de profissional
As empresas estão buscando
no mercado profissionais
m u l t i - d i s c i p l i n a r e s ,
dinâmicos, criativos, com
domínio em diferentes
tecnologias para dar vazão a
demandas e trabalhar com
inovação
Desafios
Desafios na TI de hoje
Como administrar parques crescentes?
Como manter nosso parque padronizado?
Como manter nosso parque seguro?
Como manter a qualidade do serviço executado?
Como manter o custo de manutenção baixo, sem perder qualidade?
Como saber quantos profissionais eu preciso para administrar meu
ambiente?
Cenário Virtual
Mjolnir Solutions Inc.
Possui um datacenter em sua sede com 750 VMs
Contratou 50 Nodes Cloud (IASS)
Precisa manter rodando 800 servidores virtuais
Dúvidas
Dúvidas comuns
Como faço mudanças rápidas em diversos ambientes e servidores?
Como faço para atender demandas em tempo hábil?
Como faço para manter a documentação atualizada?
Como evitar ao máximo downtime durante as mudanças?
Quantos sysadmins eu preciso para administrar 800 VMs?
Depende de como você
faz a administração!
Sysadmin Artesão
Hoje ainda é comum encontrar
sysadmins que trabalham com
administração manual,
utilizando um método quase
artesanal, executando tarefas
repetitivas cotidianamente
Atualização de Pacotes?
ssh servidor001.dominio.local
ssh servidor002.dominio.local
ssh servidor003.dominio.local
…
ssh servidor800.dominio.local
Instalação de Apps?
ssh servidor001.dominio.local
ssh servidor002.dominio.local
ssh servidor003.dominio.local
…
ssh servidor800.dominio.local
Criação de Usuários?
ssh servidor001.dominio.local
ssh servidor002.dominio.local
ssh servidor003.dominio.local
…
ssh servidor800.dominio.local
Tarefas Repetitivas	
Criação de usuário em servidores
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
Exemplo de processo 1
Atualização 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
Atualização 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
Atualização 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
Atualização 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 exceções 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 exceções.
Fatalmente uma das duas
atividades será negligenciada,
isto vai gerar falhas e
problemas.
Cada sysadmin executará demandas
de uma forma distinta, isto gera um
ambiente sem padrões, impossível
de rastear mudanças.
A medida que o parque aumentar
ficará cada vez mais difícil
administrar, identificar e corrigir
problemas.
Mudanças estruturantes que
afetarem todo parque levarão mais
tempo para serem concluídas pois
no percurso muitas coisas vão
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
não documentado? Acompanhe…
Documentação é importante
para você saber lidar com
uma situação inesperada
Continuando…
Percepções da empresa
Aumenta o custo de manutenção devido a retrabalho
Aumenta o desgaste físico e psíquico da equipe
A produtividade da equipe diminui (entregas)
A qualidade do serviço oferecido diminui (uptime)
Ocorre uma grande rotatividade de funcionários
Tarefas Repetitivas
Executadas manualmente significam retrabalho
Retrabalho
Para a empresa significa maior custo e menor lucro
Retrabalho
Para o sysadmin significa menos tempo com a família
Retrabalho
Para ambos significa menor
produtividade e menor
qualidade no que se faz e no
que se entrega.
Desperdício de tempo
é uma característica 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 traço do
produto antigo no final do procedimento
Procedimento para instalar o agente
Acessar servidor via ssh
Adicionar repositório APT/YUM
Instalar pacote
Ajustar arquivo de configuração
Reiniciar agente
Remover agente antigo
Instalação de
agente de
monitoramento
800 máquinas
10 minutos por máquina
8000 minutos ou 133 horas
16 dias trabalhando 8 h.p.d
Considerando o modelo manual de
administração e o retrabalho
decorrente de falhas humanas, teremos
um analista focado em uma demanda
simples por cerca de 1 mês.
O modelo manual é
um modelo caro e insustentável
Como resolver
estes problemas?
Como obtenho controle e
padronização em meu
ambiente ?
Gerência de Configurações
Gerência de Configurações
Padronização
Controle
Integridade
Produtividade
Agilidade
Puppet
Ferramenta de nova geração
que implementa gerência de
configurações para seu
ambiente.
Puppet em poucas palavras
É documentação executável
Nos permite parar de administrar e começar a desenvolver nossa infra
Sintaxe simples, prática 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
Visão DevOps
Tech Specs
Escrito em Ruby
Extensível usando código Ruby
Funciona em modo autônomo (sem servidor)
Funciona em modo cliente e servidor
Usa RESTful API
Oferece comunicação segura com uso de certificados digitais
Clientes Puppet Enterprise
Parcerias
Parcerias
Alguns cases no Brasil
Arquitetura
Como funciona o Puppet?
O Puppet pode funcionar em modo
masterless, isto significa sem
servidor. Você pode aplicar uma
configuração do Puppet diretamente a
um sistema operacional apenas com o
agente instalado.
O Puppet também funciona em modo
cliente e servidor. Isto significa que vicê
instalará o puppet master em
alguma VMs e seus agentes irão se
comunicar com ele para obter
configurações.
Existem cenários de uso de Puppet
masterless distribuído, usando GIT.
Neste modelo as configurações do
Puppet são obtidas via GIT e o agente é
acionado via cron periódicamente
Tratamento de informações
e o uso de dados pelo Puppet
Todas as informações de uma sistema
operacional, seja um pacote, usuário,
arquivo ou serviço são consideradas um
'dado' para o puppet.
Quando construímos configurações,
estas são convertidas em catálogos
XML, estes por sua vez são lidos pelos
agentes e a configuração é então
aplicada ao sistema operacional.
Entenda como funciona
a relação cliente e servidor
Tudo é feito pelo agente localmente, o
servidor não se conecta na máquina
para aplicar as configurações.
O servidor puppet é apenas o
repositório de configurações, ele tem
apenas o dever de construir e enviar o
catálogo quando isso for solicitado por
um agente.
Abstração
menor preocupação e maior resultado
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 precisa fazer o que você pediu
Instale Pacote X
Remova usuário Z
(Re)inicie serviço Y
O Puppet é orientado a estados, nós
criamos configurações definindo estes
estados, é uma verdadeira
documentação executável.
Idempotência
Característica exclusiva do Puppet, nenhum outro faz isto.
Puppet na rede
Entenda como funciona a comunicação com o Master
Modo cliente e 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
Puppet Visão em Rede
Puppet Master
Puppet Agent
8140 TCP

puppet agent -t SSL
envio do 

catálogo
Fluxo Cliente/Servidor
Instalação do
node
Fluxo Cliente/Servidor
Instalação do
node
Inicialização
do puppet
Fluxo Cliente/Servidor
Instalação do
node
Geração de
Certificado
Inicialização
do puppet
Fluxo Cliente/Servidor
Instalação do
node
Geração de
Certificado
Envio de
Certificado
Inicialização
do puppet
Fluxo Cliente/Servidor
Instalação do
node
Geração de
Certificado
Master Assina
Certificado
Envio de
Certificado
Inicialização
do puppet
Fluxo Cliente/Servidor
Instalação do
node
Geração de
Certificado
Agente
Sincroniza
Master Assina
Certificado
Envio de
Certificado
Inicialização
do puppet
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

O agente se comunica com o
master a cada N minutos, você configura N
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
Quais recursos estão disponíveis?
Recursos do Puppet
Resource Types
Parâmetros e Meta-parâmetros
Templates e Definições
Classes e Módulos
Funções e Condicionais
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.
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
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
Resource Type: File
Especifique permissões e
owners
Declare arquivos,
diretórios e links
Controle de mudanças
usando até 15 tipos de
checksums
Exemplos
Instala, Configura e Inicia
instalar um pacote!
ativar um serviço no boot!
copiar arquivo de configuração!
iniciar serviço instalado
o que queremos fazer?
Instala, Configura e Inicia
# aptitude install apache2!
# insserv apache2!
# cp ~/httpd.conf /etc/apache2/!
# invoke-rc.d apache2 start
no debian seria assim:
Instala, Configura e Inicia
# yum install httpd!
# chkconfig httpd on!
# cp ~/httpd.conf /etc/httpd/conf/!
# service httpd start
no redhat/centos seria assim:
Como seria no Puppet?
Puppet Manifests
Arquivos com extensão.pp, neles expressamos nossas
necessidades utilizando a sintaxe declarativa do Puppet
package { 'apache2':!
ensure => present,!
}!
 !
service { 'apache2':!
ensure => running,!
enable => true,!
}!
!
file { '/etc/apache2/httpd.conf':!
ensure => present,!
mode => ‘0644’,!
owner => ‘root’,!
group => ‘root’,!
ensure => “puppet:///files/apache/httpd.conf”,!
}
Instala, Configura e Inicia
package { 'apache2':!
ensure => present,!
}!
 !
service { 'apache2':!
ensure => running,!
enable => true,!
}!
!
file { '/etc/apache2/httpd.conf':!
ensure => present,!
mode => ‘0644’,!
owner => ‘root’,!
group => ‘root’,!
ensure => “puppet:///files/apache/httpd.conf”,!
}
package { 'apache2':!
ensure => present,!
}!
 !
service { 'apache2':!
ensure => running,!
enable => true,!
}!
!
file { '/etc/apache2/httpd.conf':!
ensure => present,!
mode => ‘0644’,!
owner => ‘root’,!
group => ‘root’,!
ensure => “puppet:///files/apache/httpd.conf”,!
}
resource type
parameter
title
value
A mesma configuração atende a
diversos sistemas operacionais, a
sintaxe é simples e direta. É uma
declaração de estados que o Puppet vai
interpretar e aplicar.
Documentação Executável.
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 postfix::hub

include haproxy::mailproxy!
}
Apenas com as informações do node, já
podemos entender o que ele faz e
quais ferramentas o puppet gerencia
nele, é outro tipo de documentação.
Variáveis e Fatos
Fatos (facter)
vimpackage => vim-puppet,
!
apacheservice => apache2,
!
ntpconfrhel => ntp.conf.rhel,
!
servername => $facts[fqdn],
Constantes e 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,
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',!
}!
}!
....
Condicionais
if $operatingsystem == '"CentOS" {!
$package_name = 'ntp',!
$service_name = 'ntpd',!
$conf_file = 'ntp.conf.el',!
}!
elseif $operatingsystem == 'Debian' { !
$package_name = 'ntp',!
$service_name = 'ntp',!
$conf_file = 'ntp.conf.debian',!
}!
else {

notify { “Sistema desconhecido”: }!
}!
....
Condicionais
if ( $operatingsystem == 'Debian' ) and ( $lsbdistcodename == 'squeeze' ) {!
!
bloco de código!
!
}
Definições
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',
Definições
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 postfix/main.cf
myorigin = servidor.dominio!
mydestination = $myhostname, ..., localhost, servidor.dominio
Substituição de variáveis 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 código)
Facter (fatos do sistema)
Mcollective (orquestrador)
Gerenciadores Externos para o Puppet
Configr
Posso fazer mudanças em
tempo real?
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
Provisionamento? É possível ?
Ferramentas de provisionamento VM
!
Foreman
Vagrant
Razor
Sprinkle
Puppet Enterprise
Ferramentas de provisionamento SW
!
Ansible
Salt
Capistrano
Fabric
Demonstração
Qual o resultado concreto?
A o e s c r e v e r m o s a s n o s s a s
configurações, estamos expressando o
que desejamos ter em nossos nodes,
com isto, já estamos construindo nossa
documentação.
Aos escrevermos uma configuração,
estamos definindo como aquilo de ser
instalado, configurado e como deve
funcionar. Toda a equipe passa a usar a
mesma receita, isto significa que
teremos processos padronizados.
O Puppet oferece recursos para você
fazer backup e restore de arquivos
modificados, portanto, você tem a
segurança de poder recuperar
ambientes caso precise.
Ao adotar Puppet você não vai mais
sentir vontade de executar nada sem
ele, tudo já nascerá automatizado e
controlado, com processos e
documentação instantânea.
Respostas
Um sysadmin que não usa Puppet
consegue administrar no máximo 30
servidores, com alguma dificuldade e
muito retrabalho.
Um sysadmin que usa Puppet consegue
administrar entre 250 e 1000
servidores com facilidade, a
quantidade vai depender do nível de
automatização e maturidade do
profissional e sua equipe.
Para administrar 800 VMs, utilizando
Puppet, você precisará de 4 sysadmins,
e afirmo que dependendo do nível de
automação até menos.
Compare
Ambiente com 800 nodes
modo manual puppet
instalando agente 133 horas N minutos
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
O sysadmin fará jornadas de trabalho
normais, ficará mais tempo com a
família, terá mais qualidade de vida e
com isso irá produzir mais e melhor.
O negócio de sua empresa vai fluir, 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 qualificada e eficiente.
Puppet Labs
Puppetlabs
Suporte Comercial (em inglês)
Programa de treinamento presencial
Programa de certificação para Sysadmins - PCP 201
Programa de certificação para Developers - PCP 301
Puppet Enterprise Dashboard (Gerenciador)
Puppet em números
700+ pessoas online no canal
#puppet da irc.freenode.net
8.500+ repositórios no GitHub
1000+ módulos no PuppetForge
5000+ usuários ativos na lista
puppet-users com 8000+ tópicos de
discussão
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 Oficial Puppetlabs no Brasil
• Empresa especializada em Puppet
• Cursos oficiais, Puppet Enterprise, consultoria e suporte
• 1o Parceiro oficial Puppetlabs Brasil
• 1o empresa com pessoas certificados PCP na América Latina
• Acesse http://www.instruct.com.br
Inovando com o Puppet
PUPPET COMO SERVIÇO
• Gerenciamento de Configuração COMO SERVIÇO
!
• Automatizar Infraestrutura de GRANDES CORPORAÇÕES
!
• Interface intuitiva focada em AGILIDADE e AUTONOMIA
!
• Suporte com PROFISSIONAIS CERTIFICADOS (PCP, RHCE, LPI-3)
!
• SERVIÇO PIONEIRO para Gestão de Infraestrutura no Brasil
www.configr.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://configr.com

Infraestrutura ágil com Puppet - CISL

  • 1.
    Brasília/DF Infraestrutura ágil comPuppet por Guto Carvalho CISL 2014 2014.04.07
  • 2.
    José Augusto (Guto)Carvalho Consultor/SysAdmin/DevOp (LPIC-3, RHCE e PCP-201); 14 anos de experiência com TI e FOSS; Blogueiro TI/FOSS há 13 anos (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
  • 3.
    Plano de Trabalho 70minutos de apresentação 25 minutos de demonstração 25 minutos para perguntas Faça perguntas quando quiser Slidedeck disponível em slideshare.com/gutocarvalho
  • 4.
    Infraestrutura Ágil Um modelointeligente e economicamente viável
  • 5.
    Infraestrutura ágil éum conceito ainda em formação, mas ele envolve principalmente gerência de configurações, orquestração, provisionamento dinâmico e metodologias ágeis de trabalho em grupo.
  • 6.
    Nesta apresentação focaremosna gerência de configurações, uma de suas mais importantes características.
  • 7.
  • 8.
    Virtualização Hoje podemos rodarcentenas 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
  • 9.
    Cloud Computing Hoje podemosrodar todos os nossos sistemas em nodes (vms) em nuvens públicas ou privadas e nosso parque pode aumentar ou diminuir de forma dinâmica e automática
  • 10.
    Diminuição de Custos Asempresas hoje buscam aumentar a qualidade de seus produtos e serviços mas sem aumentar os seus custos de manutenção e operação
  • 11.
    Agilidade e Flexibilidade Asempresas querem hoje ferramentas que lhes permitam atuar de forma ágil e flexível dentro do seu negócio, algo que se adapte as suas necessidades de forma plena e concreta
  • 12.
    Novo tipo deprofissional As empresas estão buscando no mercado profissionais m u l t i - d i s c i p l i n a r e s , dinâmicos, criativos, com domínio em diferentes tecnologias para dar vazão a demandas e trabalhar com inovação
  • 13.
  • 14.
    Desafios na TIde hoje Como administrar parques crescentes? Como manter nosso parque padronizado? Como manter nosso parque seguro? Como manter a qualidade do serviço executado? Como manter o custo de manutenção baixo, sem perder qualidade? Como saber quantos profissionais eu preciso para administrar meu ambiente?
  • 15.
  • 16.
    Mjolnir Solutions Inc. Possuium datacenter em sua sede com 750 VMs Contratou 50 Nodes Cloud (IASS) Precisa manter rodando 800 servidores virtuais
  • 17.
  • 18.
    Dúvidas comuns Como façomudanças rápidas em diversos ambientes e servidores? Como faço para atender demandas em tempo hábil? Como faço para manter a documentação atualizada? Como evitar ao máximo downtime durante as mudanças?
  • 19.
    Quantos sysadmins eupreciso para administrar 800 VMs?
  • 20.
    Depende de comovocê faz a administração!
  • 21.
    Sysadmin Artesão Hoje aindaé comum encontrar sysadmins que trabalham com administração manual, utilizando um método quase artesanal, executando tarefas repetitivas cotidianamente
  • 22.
    Atualização de Pacotes? sshservidor001.dominio.local ssh servidor002.dominio.local ssh servidor003.dominio.local … ssh servidor800.dominio.local
  • 23.
    Instalação de Apps? sshservidor001.dominio.local ssh servidor002.dominio.local ssh servidor003.dominio.local … ssh servidor800.dominio.local
  • 24.
    Criação de Usuários? sshservidor001.dominio.local ssh servidor002.dominio.local ssh servidor003.dominio.local … ssh servidor800.dominio.local
  • 25.
    Tarefas Repetitivas Criação deusuário em servidores 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
  • 26.
    Exemplo de processo1 Atualização 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
  • 27.
    Exemplo de processo2 Atualização 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
  • 28.
    Exemplo de processo3 Atualização 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
  • 29.
    Exemplo de processo4 Atualização 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
  • 30.
    Cada sistema operacionallida de uma forma muito particular com seus recursos, e todas estas exceções precisam ser cuidadosamente avaliadas e tratadas.
  • 31.
    O uso descripts ajuda, mas o sysadmin vai passar a dividir seu tempo administrando VMs e ajustando seus scripts para atender as mais diferentes exceções.
  • 32.
    Fatalmente uma dasduas atividades será negligenciada, isto vai gerar falhas e problemas.
  • 33.
    Cada sysadmin executarádemandas de uma forma distinta, isto gera um ambiente sem padrões, impossível de rastear mudanças.
  • 34.
    A medida queo parque aumentar ficará cada vez mais difícil administrar, identificar e corrigir problemas.
  • 35.
    Mudanças estruturantes que afetaremtodo parque levarão mais tempo para serem concluídas pois no percurso muitas coisas vão quebrar.
  • 36.
    Com o excessode demandas e ambiente crescendo cada vez mais, documentar perderá prioridade e isto criará um ambiente de alto risco, obscuro e desconhecido
  • 37.
  • 38.
    Sabe como osysadmin se sente ao atuar em um incidente em ambiente não documentado? Acompanhe…
  • 42.
    Documentação é importante paravocê saber lidar com uma situação inesperada
  • 43.
  • 44.
    Percepções da empresa Aumentao custo de manutenção devido a retrabalho Aumenta o desgaste físico e psíquico da equipe A produtividade da equipe diminui (entregas) A qualidade do serviço oferecido diminui (uptime) Ocorre uma grande rotatividade de funcionários
  • 45.
  • 46.
    Retrabalho Para a empresasignifica maior custo e menor lucro
  • 47.
    Retrabalho Para o sysadminsignifica menos tempo com a família
  • 48.
    Retrabalho Para ambos significamenor produtividade e menor qualidade no que se faz e no que se entrega.
  • 49.
    Desperdício de tempo éuma característica 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
  • 50.
    Exemplo O cliente desejainstalar um agente de monitoramento em todas as 800 VMs, removendo qualquer traço do produto antigo no final do procedimento
  • 51.
    Procedimento para instalaro agente Acessar servidor via ssh Adicionar repositório APT/YUM Instalar pacote Ajustar arquivo de configuração Reiniciar agente Remover agente antigo
  • 52.
    Instalação de agente de monitoramento 800máquinas 10 minutos por máquina 8000 minutos ou 133 horas 16 dias trabalhando 8 h.p.d
  • 53.
    Considerando o modelomanual de administração e o retrabalho decorrente de falhas humanas, teremos um analista focado em uma demanda simples por cerca de 1 mês.
  • 54.
    O modelo manualé um modelo caro e insustentável
  • 55.
    Como resolver estes problemas? Comoobtenho controle e padronização em meu ambiente ?
  • 56.
  • 57.
  • 58.
    Puppet Ferramenta de novageração que implementa gerência de configurações para seu ambiente.
  • 59.
    Puppet em poucaspalavras É documentação executável Nos permite parar de administrar e começar a desenvolver nossa infra Sintaxe simples, prática e natural para sysadmins Oferece suporte a diversos tipos de sistemas operacionais unix, linux windows
  • 60.
    Sobre a ferramenta FerramentaOpen 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
  • 61.
    Feito por umSysAdmin para SysAdmins
  • 62.
  • 63.
  • 64.
    Tech Specs Escrito emRuby Extensível usando código Ruby Funciona em modo autônomo (sem servidor) Funciona em modo cliente e servidor Usa RESTful API Oferece comunicação segura com uso de certificados digitais
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
    O Puppet podefuncionar em modo masterless, isto significa sem servidor. Você pode aplicar uma configuração do Puppet diretamente a um sistema operacional apenas com o agente instalado.
  • 71.
    O Puppet tambémfunciona em modo cliente e servidor. Isto significa que vicê instalará o puppet master em alguma VMs e seus agentes irão se comunicar com ele para obter configurações.
  • 72.
    Existem cenários deuso de Puppet masterless distribuído, usando GIT. Neste modelo as configurações do Puppet são obtidas via GIT e o agente é acionado via cron periódicamente
  • 73.
    Tratamento de informações eo uso de dados pelo Puppet
  • 74.
    Todas as informaçõesde uma sistema operacional, seja um pacote, usuário, arquivo ou serviço são consideradas um 'dado' para o puppet.
  • 75.
    Quando construímos configurações, estassão convertidas em catálogos XML, estes por sua vez são lidos pelos agentes e a configuração é então aplicada ao sistema operacional.
  • 76.
    Entenda como funciona arelação cliente e servidor
  • 78.
    Tudo é feitopelo agente localmente, o servidor não se conecta na máquina para aplicar as configurações.
  • 79.
    O servidor puppeté apenas o repositório de configurações, ele tem apenas o dever de construir e enviar o catálogo quando isso for solicitado por um agente.
  • 80.
  • 81.
    Resource Abstraction Layer Camadade Abstração de Recursos Fale o que você quer que seja feito Não se preocupe em como será feito O Puppet sabe como precisa fazer o que você pediu
  • 82.
  • 83.
  • 84.
  • 85.
    O Puppet éorientado a estados, nós criamos configurações definindo estes estados, é uma verdadeira documentação executável.
  • 86.
    Idempotência Característica exclusiva doPuppet, nenhum outro faz isto.
  • 87.
    Puppet na rede Entendacomo funciona a comunicação com o Master
  • 88.
    Modo cliente eservidor 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
  • 89.
    Puppet Visão emRede Puppet Master Puppet Agent 8140 TCP
 puppet agent -t SSL envio do 
 catálogo
  • 90.
  • 91.
  • 92.
    Fluxo Cliente/Servidor Instalação do node Geraçãode Certificado Inicialização do puppet
  • 93.
    Fluxo Cliente/Servidor Instalação do node Geraçãode Certificado Envio de Certificado Inicialização do puppet
  • 94.
    Fluxo Cliente/Servidor Instalação do node Geraçãode Certificado Master Assina Certificado Envio de Certificado Inicialização do puppet
  • 95.
    Fluxo Cliente/Servidor Instalação do node Geraçãode Certificado Agente Sincroniza Master Assina Certificado Envio de Certificado Inicialização do puppet
  • 96.
    Fluxo Cliente/Servidor Instalação do node Geraçãode 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

  • 97.
    O agente secomunica com o master a cada N minutos, você configura N
  • 98.
    Configurações Voláteis e Dados Puppet Master MódulosEstá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
  • 99.
    Quais recursos estãodisponíveis?
  • 100.
    Recursos do Puppet ResourceTypes Parâmetros e Meta-parâmetros Templates e Definições Classes e Módulos Funções e Condicionais
  • 101.
    Puppet Resource Types Arquivose 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.
  • 102.
    Resource Type: Packages Suportea 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
  • 103.
    Resource Type: Services Suporta11 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
  • 104.
    Resource Type: File Especifiquepermissões e owners Declare arquivos, diretórios e links Controle de mudanças usando até 15 tipos de checksums
  • 105.
  • 106.
    Instala, Configura eInicia instalar um pacote! ativar um serviço no boot! copiar arquivo de configuração! iniciar serviço instalado o que queremos fazer?
  • 107.
    Instala, Configura eInicia # aptitude install apache2! # insserv apache2! # cp ~/httpd.conf /etc/apache2/! # invoke-rc.d apache2 start no debian seria assim:
  • 108.
    Instala, Configura eInicia # yum install httpd! # chkconfig httpd on! # cp ~/httpd.conf /etc/httpd/conf/! # service httpd start no redhat/centos seria assim:
  • 109.
  • 110.
    Puppet Manifests Arquivos comextensão.pp, neles expressamos nossas necessidades utilizando a sintaxe declarativa do Puppet
  • 111.
    package { 'apache2':! ensure=> present,! }!  ! service { 'apache2':! ensure => running,! enable => true,! }! ! file { '/etc/apache2/httpd.conf':! ensure => present,! mode => ‘0644’,! owner => ‘root’,! group => ‘root’,! ensure => “puppet:///files/apache/httpd.conf”,! } Instala, Configura e Inicia
  • 112.
    package { 'apache2':! ensure=> present,! }!  ! service { 'apache2':! ensure => running,! enable => true,! }! ! file { '/etc/apache2/httpd.conf':! ensure => present,! mode => ‘0644’,! owner => ‘root’,! group => ‘root’,! ensure => “puppet:///files/apache/httpd.conf”,! }
  • 113.
    package { 'apache2':! ensure=> present,! }!  ! service { 'apache2':! ensure => running,! enable => true,! }! ! file { '/etc/apache2/httpd.conf':! ensure => present,! mode => ‘0644’,! owner => ‘root’,! group => ‘root’,! ensure => “puppet:///files/apache/httpd.conf”,! } resource type parameter title value
  • 114.
    A mesma configuraçãoatende a diversos sistemas operacionais, a sintaxe é simples e direta. É uma declaração de estados que o Puppet vai interpretar e aplicar.
  • 115.
  • 116.
  • 117.
    Declarando um node(site.pp) node “servidor.dominio” {! include linux-server! include module! } node “balancer.dominio” {! include linux-server! include cyrus::backend! include postfix::hub
 include haproxy::mailproxy! }
  • 118.
    Apenas com asinformações do node, já podemos entender o que ele faz e quais ferramentas o puppet gerencia nele, é outro tipo de documentação.
  • 119.
    Variáveis e Fatos Fatos(facter) vimpackage => vim-puppet, ! apacheservice => apache2, ! ntpconfrhel => ntp.conf.rhel, ! servername => $facts[fqdn], Constantes e 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,
  • 120.
    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',! }! }! ....
  • 121.
    Condicionais if $operatingsystem =='"CentOS" {! $package_name = 'ntp',! $service_name = 'ntpd',! $conf_file = 'ntp.conf.el',! }! elseif $operatingsystem == 'Debian' { ! $package_name = 'ntp',! $service_name = 'ntp',! $conf_file = 'ntp.conf.debian',! }! else {
 notify { “Sistema desconhecido”: }! }! ....
  • 122.
    Condicionais if ( $operatingsystem== 'Debian' ) and ( $lsbdistcodename == 'squeeze' ) {! ! bloco de código! ! }
  • 123.
    Definições 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',
  • 124.
    Definições 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',
  • 125.
    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
  • 126.
  • 127.
    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! }
  • 128.
    Node default node default{! include linux-server! }
  • 129.
  • 130.
  • 132.
  • 134.
  • 135.
    Outros projetos Puppetlabs PuppetDB(coletor de dados) Razor (provisionador) Hiera (separa dados de código) Facter (fatos do sistema) Mcollective (orquestrador)
  • 136.
  • 137.
  • 140.
    Posso fazer mudançasem tempo real?
  • 141.
    Marionette Collective Orquestrador denodes 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
  • 142.
  • 143.
    Ferramentas de provisionamentoVM ! Foreman Vagrant Razor Sprinkle Puppet Enterprise
  • 144.
    Ferramentas de provisionamentoSW ! Ansible Salt Capistrano Fabric
  • 145.
  • 146.
  • 147.
    A o es c r e v e r m o s a s n o s s a s configurações, estamos expressando o que desejamos ter em nossos nodes, com isto, já estamos construindo nossa documentação.
  • 148.
    Aos escrevermos umaconfiguração, estamos definindo como aquilo de ser instalado, configurado e como deve funcionar. Toda a equipe passa a usar a mesma receita, isto significa que teremos processos padronizados.
  • 149.
    O Puppet oferecerecursos para você fazer backup e restore de arquivos modificados, portanto, você tem a segurança de poder recuperar ambientes caso precise.
  • 150.
    Ao adotar Puppetvocê não vai mais sentir vontade de executar nada sem ele, tudo já nascerá automatizado e controlado, com processos e documentação instantânea.
  • 151.
  • 152.
    Um sysadmin quenão usa Puppet consegue administrar no máximo 30 servidores, com alguma dificuldade e muito retrabalho.
  • 153.
    Um sysadmin queusa Puppet consegue administrar entre 250 e 1000 servidores com facilidade, a quantidade vai depender do nível de automatização e maturidade do profissional e sua equipe.
  • 154.
    Para administrar 800VMs, utilizando Puppet, você precisará de 4 sysadmins, e afirmo que dependendo do nível de automação até menos.
  • 155.
    Compare Ambiente com 800nodes modo manual puppet instalando agente 133 horas N minutos
  • 156.
    Benefícios Reais Maior produtividadeem 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
  • 157.
    O sysadmin farájornadas de trabalho normais, ficará mais tempo com a família, terá mais qualidade de vida e com isso irá produzir mais e melhor.
  • 158.
    O negócio desua empresa vai fluir, 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 qualificada e eficiente.
  • 159.
  • 160.
    Puppetlabs Suporte Comercial (eminglês) Programa de treinamento presencial Programa de certificação para Sysadmins - PCP 201 Programa de certificação para Developers - PCP 301 Puppet Enterprise Dashboard (Gerenciador)
  • 161.
    Puppet em números 700+pessoas online no canal #puppet da irc.freenode.net 8.500+ repositórios no GitHub 1000+ módulos no PuppetForge 5000+ usuários ativos na lista puppet-users com 8000+ tópicos de discussão Comunidade brasileira!
  • 162.
  • 163.
  • 164.
    • Suporte OficialPuppetlabs no Brasil • Empresa especializada em Puppet • Cursos oficiais, Puppet Enterprise, consultoria e suporte • 1o Parceiro oficial Puppetlabs Brasil • 1o empresa com pessoas certificados PCP na América Latina • Acesse http://www.instruct.com.br
  • 165.
  • 166.
    PUPPET COMO SERVIÇO •Gerenciamento de Configuração COMO SERVIÇO ! • Automatizar Infraestrutura de GRANDES CORPORAÇÕES ! • Interface intuitiva focada em AGILIDADE e AUTONOMIA ! • Suporte com PROFISSIONAIS CERTIFICADOS (PCP, RHCE, LPI-3) ! • SERVIÇO PIONEIRO para Gestão de Infraestrutura no Brasil www.configr.com
  • 167.
  • 168.
  • 169.
    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://configr.com