Author
jose-augusto-carvalho
View
3.422
Download
3
Embed Size (px)
DESCRIPTION
A oficina apresenta o conceito de gerência de configurações e apresenta o Puppet como solução para implantar esse tipo de gerência.
Brasília/DF 2013-04-27
Infraestrutura como código - Apresentando PuppetGuto Carvalho
sexta-feira, 16 de agosto de 13
Oficina infraestrutura como código Apresentando: Puppet
Guto [email protected]
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 RepetitivasCriaçã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 horas450 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
monitoramento450 máquinas
10 minutos por máquina4500 minutos ou 75 horas9 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
PuppetFerramenta 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 DevOpssexta-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 SpecsEscrito 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/DFEBC - Empresa Brasil de ComunicaçãoCAIXA (expresso)CAIXA (estação financeira)CAIXA (proinfo)SERPRO....
sexta-feira, 16 de agosto de 13
ArquiteturaComo 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álogo2) Agente envia Fatos para Master3) Master Processa Fatos e Compara4) Master Produz e envia Catálogo5) Node Recebe, Compara e Aplica6) Node informa estado atual ao Master7) Sistema reflete catálogo
sexta-feira, 16 de agosto de 13
Processamento do Catálogo
1) Agente Requisita Catálogo2) Agente envia Fatos para Master3) Master Processa Fatos e Compara4) Master Produz e envia Catálogo5) Node Recebe, Compara e Aplica6) Node informa estado atual ao Master7) Sistema reflete catálogo
sexta-feira, 16 de agosto de 13
Idempotência
sexta-feira, 16 de agosto de 13
ConfiguraçõesVolá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
sexta-feira, 16 de agosto de 13
Você pode fazer deploy de sua APPVocê 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 TCPClient
puppetd -t
8139 TCPServer
puppetkickSSL
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 CertificadoAssinatura pode ser manualAssinatura pode ser automática por domínioAssinatura 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 agentede 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: 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
sexta-feira, 16 de agosto de 13
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
sexta-feira, 16 de agosto de 13
Resource Type: FileEspecifique 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
Exemplossexta-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 typeparameter
titlevalue
sexta-feira, 16 de agosto de 13
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}
sexta-feira, 16 de agosto de 13
Declarando um nodenode “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 FatosFatos (facter)
vimpackage => vim-puppet,
apacheservice => apache2,
ntpconfrhel => ntp.conf.rhel,
Variáveisdomainfqdnhostnameinterfacesipaddress_eth0ipaddress_eth1ipaddress_lolsbdistidlsbdistrelease
=> 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
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', }}....
sexta-feira, 16 de agosto de 13
Definiçõesproxy::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',=> '[email protected]',=> '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.dominiomydestination = $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 Massasexta-feira, 16 de agosto de 13
http://gutocarvalho.net/dokuwikihttp://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 Labssexta-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 ReaisMaior 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áticassexta-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 PMsexta-feira, 16 de agosto de 13
Puppet Labssexta-feira, 16 de agosto de 13
Site/Bloghttp://www.puppetlabs.comhttp://www.puppetlabs.com/blog/http://puppet-br.org/
GitHubhttp://www.github.com/puppelabs
Puppet na rede
Google GroupsPuppet-camp,puppet-users,puppet-users-br,puppet-dev
IRCirc.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: [email protected]
Contato
Slides: slideshare.net/gutocarvalhoBlog: gutocarvalho.net
Twitter: @gutocarvalho
sexta-feira, 16 de agosto de 13