Brasília/DF
Infraestrutura ágil com Puppet por Guto Carvalho
CISL 2014
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
Plano de Trabalho
70 minutos de apresentação 25 minutos de demonstração 25 minutos para perguntas
Faça perguntas quando quiser
Infraestrutura Ágil
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.
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 ferr amentas 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 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?
Mjolnir Solutions Inc.
Possui um datacenter em sua sede com 750 VMs Contratou 50 Nodes Cloud (IASS)
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?
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.localInstalação de Apps?
ssh servidor001.dominio.local ssh servidor002.dominio.local ssh servidor003.dominio.local … ssh servidor800.dominio.localCriação de Usuários?
ssh servidor001.dominio.local ssh servidor002.dominio.local ssh servidor003.dominio.local … ssh servidor800.dominio.localTarefas 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
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
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
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
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
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
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
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
Retrabalho
Retrabalho
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
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 é
Como resolver
estes problemas?
Como obtenho controle e padronização em meu
Gerência de Configurações
Padronização Controle Integridade Produtividade AgilidadePuppet
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
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
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
Arquitetura
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
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
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
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 é orientado a estados, nós
criamos configurações definindo estes
e s t a d o s , é u m a v e r d a d e i r a
Idempotência
Puppet na rede
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álogoFluxo 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 puppetFluxo Cliente/Servidor
Instalação do node Geração de Certificado Envio de Certificado Inicialização do puppetFluxo Cliente/Servidor
Instalação do node Geração de Certificado Master Assina Certificado Envio de Certificado Inicialização do puppetFluxo Cliente/Servidor
Instalação do node Geração de Certificado Agente Sincroniza Master Assina Certificado Envio de Certificado Inicialização do puppetFluxo Cliente/Servidor
Instalação do node Geração de Certificado Agente Sincroniza Master Assina Certificado Envio de Certificado Inicialização do puppetModalidades 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
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
Recursos do Puppet
Resource Types Parâmetros e Meta-parâmetros Templates e Definições Classes e Módulos Funções e CondicionaisPuppet Resource Types
Arquivos e Diretórios Usuários Alias Pacotes Serviços ! Yum Repos Augeas Hosts SSH CronResource 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 checksumsInstala, Configura e Inicia
instalar um pacote!
ativar um serviço no boot!
copiar arquivo de configuração!
iniciar serviço instalado
Instala, Configura e Inicia
# aptitude install apache2! # insserv apache2!
# cp ~/httpd.conf /etc/apache2/! # invoke-rc.d apache2 start
Instala, Configura e Inicia
# yum install httpd!
# chkconfig httpd on!
# cp ~/httpd.conf /etc/httpd/conf/! # service httpd start
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”,! }
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.
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áveis 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_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
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! }
Outros projetos Puppetlabs
PuppetDB (coletor de dados) Razor (provisionador)
Hiera (separa dados de código) Facter (fatos do sistema)
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
Ferramentas de provisionamento VM
! Foreman Vagrant Razor Sprinkle Puppet EnterpriseFerramentas de provisionamento SW
! Ansible Salt Capistrano FabricA 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.
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
ser vidores 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
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
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
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•
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
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
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