Infraestrutura ágil com Puppet - CISL
-
Upload
jose-augusto-carvalho -
Category
Technology
-
view
1.221 -
download
0
description
Transcript of Infraestrutura ágil com Puppet - CISL
Brasília/DF
Infraestrutura ágil com Puppet por Guto Carvalho
CISL 20142014.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 ÁgilUm 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çãoHoje 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 ComputingHoje 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 CustosAs 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 FlexibilidadeAs empresas querem hoje f e r r a m e n t a s q u e l h e s 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 profissionalAs 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 hojeComo 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ãoHoje ainda é comum encontrar sysadmins que trabalham com a d m i n i s t r a ç ã o m a n u a l , 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 RepetitivasCriaçã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 1Atualizaçã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 2Atualizaçã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 3Atualizaçã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 4Atualizaçã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, i s to va i gerar fa lhas 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íci l administrar, identificar e corrigir problemas.
Mudanças es t ruturantes 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 RepetitivasExecutadas manualmente significam retrabalho
RetrabalhoPara a empresa significa maior custo e menor lucro
RetrabalhoPara o sysadmin significa menos tempo com a família
RetrabalhoPara ambos significa menor p r odu t i v i dade e meno r 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
ExemploO 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
monitoramento800 máquinas
10 minutos por máquina 8000 minutos ou 133 horas 16 dias trabalhando 8 h.p.d
Considerando o modelo manual de adminis t ração e o re t rabalho 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
PuppetFerramenta 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 SpecsEscrito 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
ArquiteturaComo 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çõese 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 funcionaa 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çãomenor 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 e s t a d o s , é u m a v e r d a d e i r a documentação executável.
IdempotênciaCaracterística exclusiva do Puppet, nenhum outro faz isto.
Puppet na redeEntenda 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 CertificadoAssinatura 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 MasterMó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: PackagesSuporte 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: ServicesSuporta 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: FileEspecifique 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 ManifestsArquivos 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 FatosFatos (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,
Condicionaiscase $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',! }!}!....
Condicionaisif $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çõesproxy { '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',!=> ‘[email protected]’,!=> 'proxy',!=> 'proxy',!=> '127.0.0.1 10.61.12.2 172.16.1.1',!=> '127.0.0.1 192.168.12.3',
Definiçõesproxy { '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',!=> ‘[email protected]’,!=> '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 Classclass 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 c o n t r o l a d o , c o m p r o c e s s o s 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 s e r v i do r e s c om f a c i l i dade , 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úmeros700+ 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: [email protected]
Contato
Slides: slideshare.net/gutocarvalhoBlog: gutocarvalho.net
Twitter: @gutocarvalho
http://puppetlabs.com http://instruct.com.br http://configr.com