Infraestrutura como código com Puppet e Mcollective

1,421 views

Published on

Free Software Day - Taguatinga/DF - 2013

Published in: Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,421
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
40
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

Infraestrutura como código com Puppet e Mcollective

  1. 1. sábado, 21 de setembro de 13
  2. 2. Infraestrutura como código Puppet & Mcollective TAGUATINGA/DF - 2013--09-21 sábado, 21 de setembro 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 sábado, 21 de setembro de 13
  4. 4. Plano de Trabalho 40 minutos de apresentação 10 minutos para perguntas Faça perguntas quando quiser Slidedeck disponível em slideshare.com/gutocarvalho sábado, 21 de setembro de 13
  5. 5. Agenda Gerência de configurações Infraestrutura como código Ferramentas de infraestrutura como código; Puppet como solução de gerência de configurações Puppet arquitetura, funcionamento e recursos Mcollective Perguntas sábado, 21 de setembro de 13
  6. 6. Administração de sistemas e serviços sábado, 21 de setembro de 13
  7. 7. Virtualização sábado, 21 de setembro de 13
  8. 8. Cloud Computing sábado, 21 de setembro de 13
  9. 9. Administração Manual sábado, 21 de setembro de 13
  10. 10. Administração Manual Tarefas repetitivas Não existem padrões Não existem procedimentos sábado, 21 de setembro de 13
  11. 11. Cada sysadmin faz do seu jeito sábado, 21 de setembro 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 sábado, 21 de setembro de 13
  13. 13. A medida que o parque aumenta administrá-lo fica mais complicado sábado, 21 de setembro 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 sábado, 21 de setembro de 13
  15. 15. Maior risco de ocorrer falhas sábado, 21 de setembro de 13
  16. 16. Maior tempo gasto para executar mudanças sábado, 21 de setembro de 13
  17. 17. Quanto tempo se gasta para criar um usuário em 450 servidores? sábado, 21 de setembro 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 sábado, 21 de setembro de 13
  19. 19. Criação de usuário 450 máquinas 3 minutos por máquina 1350 minutos ou 22,5 horas 450 trocas de senhas sábado, 21 de setembro de 13
  20. 20. Quanto tempo se gasta para instalar um agente de monitoramento em 450 servidores removendo o agente antigo? sábado, 21 de setembro de 13
  21. 21. 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). sábado, 21 de setembro de 13
  22. 22. 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 sábado, 21 de setembro de 13
  23. 23. Documentação inexistente sábado, 21 de setembro de 13
  24. 24. Não há rastreamento de mudanças sábado, 21 de setembro de 13
  25. 25. Demandas pipocando... sábado, 21 de setembro de 13
  26. 26. Ambiente pipocando... sábado, 21 de setembro de 13
  27. 27. Estresse aumentando... sábado, 21 de setembro de 13
  28. 28. E você começa a ter a sensação de estar sendo engolido por seu ambiente. sábado, 21 de setembro de 13
  29. 29. Como resolver estes problemas? Como obtenho controle e padronização em meu ambiente ? sábado, 21 de setembro de 13
  30. 30. Gerência de Configurações sábado, 21 de setembro de 13
  31. 31. Padronização sábado, 21 de setembro de 13
  32. 32. Automatização sábado, 21 de setembro de 13
  33. 33. Controle sábado, 21 de setembro de 13
  34. 34. Integridade sábado, 21 de setembro de 13
  35. 35. Agilidade nas mudanças sábado, 21 de setembro de 13
  36. 36. Ferramentas de GC sábado, 21 de setembro de 13
  37. 37. sábado, 21 de setembro de 13
  38. 38. Puppet Ferramenta de nova geração que implementa gerência de configurações para seu ambiente. sábado, 21 de setembro de 13
  39. 39. Puppet em poucas palavras sábado, 21 de setembro de 13
  40. 40. 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 sábado, 21 de setembro de 13
  41. 41. Sobre a ferramenta sábado, 21 de setembro de 13
  42. 42. 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 sábado, 21 de setembro de 13
  43. 43. 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 sábado, 21 de setembro de 13
  44. 44. Feito por um SysAdmin para SysAdmins sábado, 21 de setembro de 13
  45. 45. Desenhada para uso DevOps sábado, 21 de setembro de 13
  46. 46. Visão DevOps sábado, 21 de setembro de 13
  47. 47. Tech Specs sábado, 21 de setembro de 13
  48. 48. Tech Specs Escrito em Ruby Extensível usando código Ruby Funciona em modo autônomo (serverless) Funciona em modo cliente.servidor Usa RESTful API Oferece comunicação segura com uso de certificados digitais sábado, 21 de setembro de 13
  49. 49. Clientes Puppet Enterprise sábado, 21 de setembro de 13
  50. 50. Parcerias sábado, 21 de setembro de 13
  51. 51. Parcerias sábado, 21 de setembro de 13
  52. 52. Arquitetura Como funciona o Puppet? sábado, 21 de setembro de 13
  53. 53. sábado, 21 de setembro de 13
  54. 54. Abstração É mais fácil e rápido usar o Puppet! sábado, 21 de setembro de 13
  55. 55. Resource Abstraction Layer (RAL) sábado, 21 de setembro de 13
  56. 56. sábado, 21 de setembro de 13
  57. 57. Resource Abstraction Layer sábado, 21 de setembro de 13
  58. 58. 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 sábado, 21 de setembro de 13
  59. 59. Instale Pacote X sábado, 21 de setembro de 13
  60. 60. Remova usuário Z sábado, 21 de setembro de 13
  61. 61. (Re)inicie serviço Y sábado, 21 de setembro de 13
  62. 62. Tratamento de Informações O grande diferencial do Puppet é a forma como ele trata as informações de seus nodes sábado, 21 de setembro de 13
  63. 63. Tratamento de informações sábado, 21 de setembro de 13
  64. 64. 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 A versão do sistema operacional é um dado A arquitetua do sistema é um dado sábado, 21 de setembro de 13
  65. 65. 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. sábado, 21 de setembro de 13
  66. 66. Processamento do Catálogo 1) Agente Requisita Catálogo 1.1) Agente envia Fatos para Master 2) Master Processa Fatos e Compara 2.1) Master Produz e envia Catálogo 3) Node Recebe, Compara e Aplica 4) Node informa estado atual ao Master 5) Sistema reflete catálogo sábado, 21 de setembro de 13
  67. 67. Processamento do Catálogo 1) Agente Requisita Catálogo 1.1) Agente envia Fatos para Master 2) Master Processa Fatos e Compara 2.1) Master Produz e envia Catálogo 3) Node Recebe, Compara e Aplica 4) Node informa estado atual ao Master 5) Sistema reflete catálogo sábado, 21 de setembro de 13
  68. 68. Idempotência sábado, 21 de setembro de 13
  69. 69. 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 sábado, 21 de setembro de 13
  70. 70. Você pode fazer deploy de sua APP Você pode controlar a versão de sua APP Você pode controlar fazer rollback sábado, 21 de setembro de 13
  71. 71. Puppet em rede, como funciona? sábado, 21 de setembro de 13
  72. 72. 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 sábado, 21 de setembro de 13
  73. 73. Puppet Visão em Rede Puppet Master Puppet Client 8140/ TCP puppet agent acesso seguro ssl sábado, 21 de setembro de 13
  74. 74. Fluxo Cliente/Servidor Instalação do node sábado, 21 de setembro de 13
  75. 75. Fluxo Cliente/Servidor Instalação do node Inicialização do puppet sábado, 21 de setembro de 13
  76. 76. Fluxo Cliente/Servidor Instalação do node Geração de Certificado Inicialização do puppet sábado, 21 de setembro de 13
  77. 77. Fluxo Cliente/Servidor Instalação do node Geração de Certificado Envio de Certificado Inicialização do puppet sábado, 21 de setembro de 13
  78. 78. Fluxo Cliente/Servidor Instalação do node Geração de Certificado Master Assina Certificado Envio de Certificado Inicialização do puppet sábado, 21 de setembro de 13
  79. 79. Fluxo Cliente/Servidor Instalação do node Geração de Certificado Agente Sincroniza Master Assina Certificado Envio de Certificado Inicialização do puppet sábado, 21 de setembro de 13
  80. 80. 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 sábado, 21 de setembro de 13
  81. 81. O agente se comunica com o master a cada N minutos sábado, 21 de setembro de 13
  82. 82. Quais funcionalidades estão disponíveis? sábado, 21 de setembro de 13
  83. 83. Funcionalidades Resource Types Parâmetros e Meta-parâmetros para Resource Types Templates (arquivo dinâmicos) Definições (configurações dinâmicas) Classes e Módulos Funções e Condicionais sábado, 21 de setembro de 13
  84. 84. 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. sábado, 21 de setembro de 13
  85. 85. 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 sábado, 21 de setembro de 13
  86. 86. 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 sábado, 21 de setembro de 13
  87. 87. Resource Type: File Especifique permissões e owners Declare arquivos, diretórios e links Controle de mudanças usando até 15 tipos de checksums sábado, 21 de setembro de 13
  88. 88. Exemplos sábado, 21 de setembro de 13
  89. 89. 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? sábado, 21 de setembro de 13
  90. 90. Instala, Configura e Inicia # aptitude install apache2 # insserv apache2 # cp ~/httpd.conf /etc/apache2/ # invoke-rc.d apache2 start no debian seria assim: sábado, 21 de setembro de 13
  91. 91. Instala, Configura e Inicia # yum install httpd # chkconfig httpd on # cp ~/httpd.conf /etc/httpd/conf/ # service httpd start no redhat/centos seria assim: sábado, 21 de setembro de 13
  92. 92. Como seria no Puppet? sábado, 21 de setembro de 13
  93. 93. Puppet Manifests Arquivo com extensão.pp em que expressamos nossas necesidades utilizando a sintaxe declarativa do Puppet. sábado, 21 de setembro de 13
  94. 94. 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 sábado, 21 de setembro de 13
  95. 95. 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 resource type parameter title value sábado, 21 de setembro de 13
  96. 96. Mais exemplos sábado, 21 de setembro de 13
  97. 97. 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 } sábado, 21 de setembro de 13
  98. 98. 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, sábado, 21 de setembro de 13
  99. 99. 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', } } .... sábado, 21 de setembro de 13
  100. 100. 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', sábado, 21 de setembro de 13
  101. 101. 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 sábado, 21 de setembro de 13
  102. 102. Padronizando nodes sábado, 21 de setembro de 13
  103. 103. 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 } sábado, 21 de setembro de 13
  104. 104. Como acompanho mudanças? sábado, 21 de setembro de 13
  105. 105. Puppet Dashboard sábado, 21 de setembro de 13
  106. 106. sábado, 21 de setembro de 13
  107. 107. Posso fazer mudanças em tempo real? sábado, 21 de setembro de 13
  108. 108. 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 sábado, 21 de setembro de 13
  109. 109. Demonstração sábado, 21 de setembro de 13
  110. 110. Posso provisionar VMs/Instâncias? sábado, 21 de setembro de 13
  111. 111. Ferramentas de Provisionamento Puppet/Chef/Ansible Foreman Vagrant Razor Sprinkle sábado, 21 de setembro de 13
  112. 112. Qual o resultado concreto? sábado, 21 de setembro de 13
  113. 113. Documentação Instantânea sábado, 21 de setembro de 13
  114. 114. Processos bem definidos sábado, 21 de setembro de 13
  115. 115. Ambiente Padronizado sábado, 21 de setembro de 13
  116. 116. Restore e backup de mudanças sábado, 21 de setembro de 13
  117. 117. Tarefas Automatizadas sábado, 21 de setembro de 13
  118. 118. 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 sábado, 21 de setembro de 13
  119. 119. 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 sábado, 21 de setembro de 13
  120. 120. Tecnologia trabalhando para você sábado, 21 de setembro de 13
  121. 121. Boas Práticas sábado, 21 de setembro de 13
  122. 122. Insira o puppet nos templates de seu hypervisor sábado, 21 de setembro de 13
  123. 123. Use o puppet para executar e controlar mudanças em seu parque sábado, 21 de setembro de 13
  124. 124. Para de administrar e comece a desenvolver a sua infraestrutura sábado, 21 de setembro de 13
  125. 125. 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. sábado, 21 de setembro de 13
  126. 126. Versione as configurações (git) criadas no Puppet. sábado, 21 de setembro de 13
  127. 127. Crie manifests pensando em reaproveitamento código, escreva seus módulos e classes da forma mais flexível possível. sábado, 21 de setembro de 13
  128. 128. Não precisa começar do zero, use módulos prontos do GitHub e PuppetForge. sábado, 21 de setembro de 13
  129. 129. Pesquise, há muita informação sobre puppet na rede! sábado, 21 de setembro de 13
  130. 130. 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 sábado, 21 de setembro de 13
  131. 131. Puppet Labs & Luke Kaines sábado, 21 de setembro de 13
  132. 132. Site/Blog http://www.puppetlabs.com http://www.puppetlabs.com/blog/ http://puppet-br.org/ Twitter @puppetlabs @puppetmasterd 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 sábado, 21 de setembro de 13
  133. 133. Perguntas? sábado, 21 de setembro de 13
  134. 134. Obrigado! Linkedin: http://br.linkedin.com/in/gutocarv E-mail: gutocarvalho@gmail.com Contato Slides: slideshare.net/gutocarvalho Blog: gutocarvalho.net Twitter: @gutocarvalho sábado, 21 de setembro de 13

×