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

3,950 views
3,839 views

Published on

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.

Published in: Technology

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

  1. 1. Brasília/DF 2013-04-27 Infraestrutura como código - Apresentando Puppet Guto Carvalho sexta-feira, 16 de agosto de 13
  2. 2. Oficina infraestrutura como código Apresentando: Puppet Guto Carvalho gutocarvalho@gmail.com sexta-feira, 16 de agosto de 13
  3. 3. 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
  4. 4. 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
  5. 5. 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
  6. 6. Administração de sistemas e serviços sexta-feira, 16 de agosto de 13
  7. 7. Virtualização sexta-feira, 16 de agosto de 13
  8. 8. Cloud Computing sexta-feira, 16 de agosto de 13
  9. 9. Administração Manual sexta-feira, 16 de agosto de 13
  10. 10. Administração Manual Tarefas repetitivas Não existem padrões Não existem procedimentos sexta-feira, 16 de agosto de 13
  11. 11. Cada sysadmin faz do seu jeito sexta-feira, 16 de agosto de 13
  12. 12. Tarefas Repetitivas Criação de usuários Elaboração de scripts Configuração de serviços Configurações de monitoramento Criação de imagens de ambientes Configuração do sistema operacional Instalação, atualização e remoção de pacotes sexta-feira, 16 de agosto de 13
  13. 13. A medida que o parque aumenta administrá-lo fica mais complicado sexta-feira, 16 de agosto de 13
  14. 14. 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
  15. 15. Maior risco de falhas sexta-feira, 16 de agosto de 13
  16. 16. Maior tempo gasto para executar mudanças sexta-feira, 16 de agosto de 13
  17. 17. Criação de usuário 450 máquinas 3 minutos por máquina 1350 minutos ou 22,5 horas 450 trocas de senhas sexta-feira, 16 de agosto de 13
  18. 18. 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
  19. 19. Instalação de agente de monitoramento 450 máquinas 10 minutos por máquina 4500 minutos ou 75 horas 9 dias trabalhando 8 h.p.d sexta-feira, 16 de agosto de 13
  20. 20. 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
  21. 21. Documentação inexistente sexta-feira, 16 de agosto de 13
  22. 22. Não há rastreamento de mudanças sexta-feira, 16 de agosto de 13
  23. 23. sexta-feira, 16 de agosto de 13
  24. 24. Você começa a ter a sensação de estar sendo engolido por seu ambiente? sexta-feira, 16 de agosto de 13
  25. 25. Como resolver estes problemas? Como obtenho controle e padronização em meu ambiente ? sexta-feira, 16 de agosto de 13
  26. 26. Gerência de Configurações sexta-feira, 16 de agosto de 13
  27. 27. Padronização sexta-feira, 16 de agosto de 13
  28. 28. Automatização sexta-feira, 16 de agosto de 13
  29. 29. Controle sexta-feira, 16 de agosto de 13
  30. 30. Integridade sexta-feira, 16 de agosto de 13
  31. 31. Agilidade nas mudanças sexta-feira, 16 de agosto de 13
  32. 32. Puppet Ferramenta de nova geração que implementa gerência de configurações para seu ambiente. sexta-feira, 16 de agosto de 13
  33. 33. Puppet em poucas palavras sexta-feira, 16 de agosto de 13
  34. 34. 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
  35. 35. Sobre a ferramenta sexta-feira, 16 de agosto de 13
  36. 36. 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
  37. 37. 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
  38. 38. Feito por um SysAdmin para SysAdmins sexta-feira, 16 de agosto de 13
  39. 39. Desenhada para uso DevOps sexta-feira, 16 de agosto de 13
  40. 40. sexta-feira, 16 de agosto de 13
  41. 41. DEVOPS Developers (Dev) Operations (Ops) sexta-feira, 16 de agosto de 13
  42. 42. Visão DevOps sexta-feira, 16 de agosto de 13
  43. 43. Veja palestra DevOps do Flisol/DF 2013 sexta-feira, 16 de agosto de 13
  44. 44. Tech Specs sexta-feira, 16 de agosto de 13
  45. 45. Tech Specs Escrito em Ruby Extensível usando código Ruby Funciona em modo autônomo e serverless Funciona em modo cliente.servidor Usa RESTful API Oferece comunicação segura com uso de certificados digitais sexta-feira, 16 de agosto de 13
  46. 46. Cases Puppet Enterprise sexta-feira, 16 de agosto de 13
  47. 47. Cases Puppet Gov Brasil Detran/DF EBC - Empresa Brasil de Comunicação CAIXA (expresso) CAIXA (estação financeira) CAIXA (proinfo) SERPRO .... sexta-feira, 16 de agosto de 13
  48. 48. Arquitetura Como funciona o Puppet? sexta-feira, 16 de agosto de 13
  49. 49. Resource Abstraction Layer (RAL) sexta-feira, 16 de agosto de 13
  50. 50. Resource Abstraction Layer sexta-feira, 16 de agosto de 13
  51. 51. 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
  52. 52. Instale Pacote X sexta-feira, 16 de agosto de 13
  53. 53. Remova usuário Z sexta-feira, 16 de agosto de 13
  54. 54. (Re)inicie serviço Y sexta-feira, 16 de agosto de 13
  55. 55. 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
  56. 56. Tratamento de informações sexta-feira, 16 de agosto de 13
  57. 57. 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
  58. 58. 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
  59. 59. Processamento do Catálogo 1) Agente Requisita Catálogo 2) Agente envia Fatos para Master 3) Master Processa Fatos e Compara 4) Master Produz e envia Catálogo 5) Node Recebe, Compara e Aplica 6) Node informa estado atual ao Master 7) Sistema reflete catálogo sexta-feira, 16 de agosto de 13
  60. 60. Processamento do Catálogo 1) Agente Requisita Catálogo 2) Agente envia Fatos para Master 3) Master Processa Fatos e Compara 4) Master Produz e envia Catálogo 5) Node Recebe, Compara e Aplica 6) Node informa estado atual ao Master 7) Sistema reflete catálogo sexta-feira, 16 de agosto de 13
  61. 61. Idempotência sexta-feira, 16 de agosto de 13
  62. 62. Configurações Voláteis e Dados Puppet Master Módulos Estáticos Visão ampla do Puppet LDAP DNS MONIT SYSLOG JBOSS APACHE MYSQL PGSQL Puppet Agents Camada de Aplicação Camada de Serviços Estruturantes sexta-feira, 16 de agosto de 13
  63. 63. Você pode fazer deploy de sua APP Você pode controlar a versão de sua APP sexta-feira, 16 de agosto de 13
  64. 64. sexta-feira, 16 de agosto de 13
  65. 65. Como funciona o modo cliente/servidor? sexta-feira, 16 de agosto de 13
  66. 66. 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
  67. 67. Puppet Visão em Rede Puppet Master Puppet Client 8140 TCP Client puppetd -t 8139 TCP Server puppetkick SSL sexta-feira, 16 de agosto de 13
  68. 68. Fluxo Cliente/Servidor Instalação do node sexta-feira, 16 de agosto de 13
  69. 69. Fluxo Cliente/Servidor Instalação do node Inicialização do puppet sexta-feira, 16 de agosto de 13
  70. 70. Fluxo Cliente/Servidor Instalação do node Geração de Certificado Inicialização do puppet sexta-feira, 16 de agosto de 13
  71. 71. 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
  72. 72. 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
  73. 73. 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
  74. 74. Fluxo Cliente/Servidor Instalação do node Geração de Certificado Agente Sincroniza Master Assina Certificado Envio de Certificado Inicialização do puppet Modalidades de Assinatura de Certificado Assinatura pode ser manual Assinatura pode ser automática por domínio Assinatura pode ser automática em qualquer requisição sexta-feira, 16 de agosto de 13
  75. 75. O agente se comunica com o master a cada N minutos sexta-feira, 16 de agosto de 13
  76. 76. Posso forçar execução do agente de forma remota? sexta-feira, 16 de agosto de 13
  77. 77. sexta-feira, 16 de agosto de 13
  78. 78. Quais recursos estão disponíveis? sexta-feira, 16 de agosto de 13
  79. 79. 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
  80. 80. 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
  81. 81. Resource Type: Packages Suporte a 23 tipos de provedores de pacotes Faz a abstração do OS Declare se o pacote deve estar presente ou ausente Declare se o pacote deve sempre estar em sua última versão sexta-feira, 16 de agosto de 13
  82. 82. Resource Type: Services Suporta 11 tipos de sistemas INIT para inicializar serviços Declare se um serviço deve estar sempre rodando Declare se um serviço deve ser carregado no boot Declare se um serviço depende de um pacote ou arquivo sexta-feira, 16 de agosto de 13
  83. 83. Resource Type: File Especifique permissões e owners Declare arquivos, diretórios e links Controle de mudanças usando até 15 tipos de checksums sexta-feira, 16 de agosto de 13
  84. 84. Exemplos sexta-feira, 16 de agosto de 13
  85. 85. 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
  86. 86. 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
  87. 87. package { 'apache2': ensure => present, }   service { 'apache2': ensure => running, enable => true, } file { 'httpd.conf': path => “/etc/apache2/httpd.conf”, source => “/etc/puppet/files/httpd.conf”, } Instala, Configura e Inicia resource type parameter title value sexta-feira, 16 de agosto de 13
  88. 88. Base Class class linux-server { include sysadmin-utils include zabbix-agent include ntpconf include locales include hosts include users include localmta include vimrc include backup-agent include apt-repos } sexta-feira, 16 de agosto de 13
  89. 89. Declarando um node node “servidor.dominio” { include linux-server include module } node “balancer.dominio” { include linux-server include cyrus::backend include postfix::hub include haproxy::mailproxy } sexta-feira, 16 de agosto de 13
  90. 90. Variáveis e Fatos Fatos (facter) vimpackage => vim-puppet, apacheservice => apache2, ntpconfrhel => ntp.conf.rhel, Variáveisdomain fqdn hostname interfaces ipaddress_eth0 ipaddress_eth1 ipaddress_lo lsbdistid lsbdistrelease => hacklab, => puppetmaster.hacklab, => puppetmaster, => eth0,eth1,lo, => 10.0.2.15, => 192.168.56.150, => 127.0.0.1, => debian, => 6.0.5, sexta-feira, 16 de agosto de 13
  91. 91. Condicionais case $operatingsystem { CentOS,RedHat: { $package_name = 'ntp', $service_name = 'ntpd', $conf_file = 'ntp.conf.el', } Debian,Ubuntu: { $package_name = 'ntp', $service_name = 'ntp', $conf_file = 'ntp.conf.debian', } } .... sexta-feira, 16 de agosto de 13
  92. 92. Definições proxy::squid { 'ProxyFilial' : http_port squid_mode squid_hostname cache_mem maximum_object_size_in_memory maximum_object_size memory_replacement_policy cache_replacement_policy cache_dir cache_mgr cache_effective_user cache_effective_group dns_nameservers ips_squid } => '3128', => 'transparent', => 'proxy.4linux', => '2 GB', => '6 MB', => '128 MB', => 'heap GDSF', => 'heap LFUDA', => 'aufs /var/spool/squid 1024 16 256', => 'monitora@4linux.com.br', => 'proxy', => 'proxy', => '127.0.0.1 10.61.12.2 172.16.1.1', => '127.0.0.1 192.168.12.3', sexta-feira, 16 de agosto de 13
  93. 93. Templates myorigin = <%= hostname %> mydestination = $myhostname, ..., localhost, <%= fqdn %> Trecho do template postfix/main.cf myorigin = servidor.dominio mydestination = $myhostname, ..., localhost, servidor.dominio Substituição de variáveis por fatos sexta-feira, 16 de agosto de 13
  94. 94. Como acompanho mudanças? sexta-feira, 16 de agosto de 13
  95. 95. Puppet Dashboard sexta-feira, 16 de agosto de 13
  96. 96. sexta-feira, 16 de agosto de 13
  97. 97. Posso fazer mudanças em tempo real? sexta-feira, 16 de agosto de 13
  98. 98. 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
  99. 99. Mão na Massa sexta-feira, 16 de agosto de 13
  100. 100. http://gutocarvalho.net/dokuwiki http://172.16.61.105/ puppet serverless sexta-feira, 16 de agosto de 13
  101. 101. Demonstração do puppet em modo autônomo sexta-feira, 16 de agosto de 13
  102. 102. puppet resource (ral) sexta-feira, 16 de agosto de 13
  103. 103. puppet apply manifest.pp sexta-feira, 16 de agosto de 13
  104. 104. manifests sexta-feira, 16 de agosto de 13
  105. 105. resource type file sexta-feira, 16 de agosto de 13
  106. 106. resource type package sexta-feira, 16 de agosto de 13
  107. 107. resource type service sexta-feira, 16 de agosto de 13
  108. 108. resource type user sexta-feira, 16 de agosto de 13
  109. 109. condicionais, templates, definições... sexta-feira, 16 de agosto de 13
  110. 110. puppet filebucket sexta-feira, 16 de agosto de 13
  111. 111. puppet parser sexta-feira, 16 de agosto de 13
  112. 112. Demonstração do puppet modo cliente servidor sexta-feira, 16 de agosto de 13
  113. 113. site.pp sexta-feira, 16 de agosto de 13
  114. 114. nodes sexta-feira, 16 de agosto de 13
  115. 115. classes sexta-feira, 16 de agosto de 13
  116. 116. módulos sexta-feira, 16 de agosto de 13
  117. 117. puppet agent --test sexta-feira, 16 de agosto de 13
  118. 118. Demonstração mcollective sexta-feira, 16 de agosto de 13
  119. 119. mco puppet runonce -v sexta-feira, 16 de agosto de 13
  120. 120. mco facts operatingsystem -v sexta-feira, 16 de agosto de 13
  121. 121. mco shell “uptime” -v sexta-feira, 16 de agosto de 13
  122. 122. Puppet Labs sexta-feira, 16 de agosto de 13
  123. 123. Qual o resultado concreto? sexta-feira, 16 de agosto de 13
  124. 124. Documentação Instantânea sexta-feira, 16 de agosto de 13
  125. 125. Processos bem definidos sexta-feira, 16 de agosto de 13
  126. 126. Ambiente Padronizado sexta-feira, 16 de agosto de 13
  127. 127. Restore e backup de mudanças sexta-feira, 16 de agosto de 13
  128. 128. Tarefas Automatizadas sexta-feira, 16 de agosto de 13
  129. 129. Benefícios Reais Maior produtividade em menor tempo Poucos sysadmins para muitos nodes Diminuição de falhas humanas Maior controle de todo o seu parque Diminuição do tempo gasto em mudanças Diminuição do custo de manutenção Você chegará cedo em casa e suas madrugas e finais de semana serão seus sexta-feira, 16 de agosto de 13
  130. 130. 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
  131. 131. Tecnologia trabalhando para você sexta-feira, 16 de agosto de 13
  132. 132. Boas Práticas sexta-feira, 16 de agosto de 13
  133. 133. Insira o puppet nos templates de seu hypervisor sexta-feira, 16 de agosto de 13
  134. 134. Use o puppet para executar e controlar mudanças em seu parque sexta-feira, 16 de agosto de 13
  135. 135. Para de administrar e comece a desenvolver a sua infraestrutura sexta-feira, 16 de agosto de 13
  136. 136. 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
  137. 137. Versione as configurações (git) criadas no Puppet. sexta-feira, 16 de agosto de 13
  138. 138. Reaproveite código, escreva seus módulos da forma mais flexível possível. sexta-feira, 16 de agosto de 13
  139. 139. Não precisa começar do zero, use módulo prontos do GitHub e PuppetForge. sexta-feira, 16 de agosto de 13
  140. 140. Pesquise, há muita informação sobre puppet na rede! sexta-feira, 16 de agosto de 13
  141. 141. Puppet em números 727 pessoas online no canal #puppet da irc.freenode.net 8.500 repositórios no GitHub 450 módulos no PuppetForge 4457 usuários ativos na lista puppet-users com 7795 tópicos de discussão Dados coletados em 2012-08-06 às 10:34 PM sexta-feira, 16 de agosto de 13
  142. 142. Puppet Labs sexta-feira, 16 de agosto de 13
  143. 143. Site/Blog http://www.puppetlabs.com http://www.puppetlabs.com/blog/ http://puppet-br.org/ Twitter @puppetlabs GitHub http://www.github.com/puppelabs Puppet na rede Google Groups Puppet-camp, puppet-users, puppet-users-br, puppet-dev IRC irc.freenode.org #puppet #puppet-br sexta-feira, 16 de agosto de 13
  144. 144. Perguntas? sexta-feira, 16 de agosto de 13
  145. 145. Obrigado! Linkedin: http://br.linkedin.com/in/gutocarv E-mail: gutocarvalho@gmail.com Contato Slides: slideshare.net/gutocarvalho Blog: gutocarvalho.net Twitter: @gutocarvalho sexta-feira, 16 de agosto de 13

×