Ferramentas para infraestrutura ágil

4,125 views
4,031 views

Published on

Palestra que aborda ferramentas para gerência de configuração (puppet), orquestração (mcollective) e provisionamento para dar início a adoção de métodos ágeis e automatização em infraestrutura.

Published in: Technology

Ferramentas para infraestrutura ágil

  1. 1. Brasília/DF 2013-04-27 Ferramentas para infraestrutura ágil Guto Carvalho sexta-feira, 16 de agosto de 13
  2. 2. Ferramentas para infraestrutura ágil 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 40 minutos de demonstração 10 minutos para perguntas Faça perguntas quando quiser Slidedeck disponível em slideshare.com/gutocarvalho sexta-feira, 16 de agosto de 13
  5. 5. Agenda Gerência de configurações Infraestrutura como código Puppet como solução de gerência de configurações Puppet arquitetura, funcionamento e recursos Mcollective Perguntas sexta-feira, 16 de agosto de 13
  6. 6. Infraestrutura Ágil Orquestração (mcollective) Gerência de Configurações / Automático (puppet) Provisionamento (vagrant/razor/foreman/puppet) sexta-feira, 16 de agosto de 13
  7. 7. Administração de sistemas e serviços sexta-feira, 16 de agosto de 13
  8. 8. Virtualização sexta-feira, 16 de agosto de 13
  9. 9. Cloud Computing sexta-feira, 16 de agosto de 13
  10. 10. Administração Manual sexta-feira, 16 de agosto de 13
  11. 11. Administração Manual Tarefas repetitivas Não existem padrões Não existem procedimentos sexta-feira, 16 de agosto de 13
  12. 12. Cada sysadmin faz do seu jeito sexta-feira, 16 de agosto de 13
  13. 13. 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
  14. 14. A medida que o parque aumenta administrá-lo fica mais complicado sexta-feira, 16 de agosto de 13
  15. 15. 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
  16. 16. Maior risco de falhas sexta-feira, 16 de agosto de 13
  17. 17. Maior tempo gasto para executar mudanças sexta-feira, 16 de agosto de 13
  18. 18. 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
  19. 19. 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
  20. 20. 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
  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). sexta-feira, 16 de agosto de 13
  22. 22. Documentação inexistente sexta-feira, 16 de agosto de 13
  23. 23. Não há rastreamento de mudanças 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 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 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. Visão DevOps sexta-feira, 16 de agosto de 13
  41. 41. Tech Specs sexta-feira, 16 de agosto de 13
  42. 42. 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 sexta-feira, 16 de agosto de 13
  43. 43. Cases Puppet Enterprise sexta-feira, 16 de agosto de 13
  44. 44. Arquitetura Como funciona o Puppet? sexta-feira, 16 de agosto de 13
  45. 45. Resource Abstraction Layer (RAL) sexta-feira, 16 de agosto de 13
  46. 46. Resource Abstraction Layer sexta-feira, 16 de agosto de 13
  47. 47. 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
  48. 48. Instale Pacote X sexta-feira, 16 de agosto de 13
  49. 49. Remova usuário Z sexta-feira, 16 de agosto de 13
  50. 50. (Re)inicie serviço Y sexta-feira, 16 de agosto de 13
  51. 51. 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
  52. 52. Tratamento de informações sexta-feira, 16 de agosto de 13
  53. 53. 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
  54. 54. 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
  55. 55. 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 sexta-feira, 16 de agosto de 13
  56. 56. 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 sexta-feira, 16 de agosto de 13
  57. 57. Idempotência sexta-feira, 16 de agosto de 13
  58. 58. 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
  59. 59. Você pode fazer deploy de sua APP Você pode controlar a versão de sua APP sexta-feira, 16 de agosto de 13
  60. 60. Como funciona o modo cliente/servidor? sexta-feira, 16 de agosto de 13
  61. 61. 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
  62. 62. Puppet Visão em Rede Puppet Master Puppet Client 8140 TCP Client puppetd -t 8139 TCP Server puppetrun SSL sexta-feira, 16 de agosto de 13
  63. 63. Fluxo Cliente/Servidor Instalação do node sexta-feira, 16 de agosto de 13
  64. 64. Fluxo Cliente/Servidor Instalação do node Inicialização do puppet sexta-feira, 16 de agosto de 13
  65. 65. Fluxo Cliente/Servidor Instalação do node Geração de Certificado Inicialização do puppet sexta-feira, 16 de agosto de 13
  66. 66. 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
  67. 67. 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
  68. 68. 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
  69. 69. 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
  70. 70. O agente se comunica com o master a cada N minutos sexta-feira, 16 de agosto de 13
  71. 71. Quais recursos estão disponíveis? sexta-feira, 16 de agosto de 13
  72. 72. 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
  73. 73. 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
  74. 74. 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
  75. 75. 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
  76. 76. 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
  77. 77. Exemplos sexta-feira, 16 de agosto de 13
  78. 78. 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
  79. 79. 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
  80. 80. 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
  81. 81. 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
  82. 82. 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
  83. 83. 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
  84. 84. 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
  85. 85. 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
  86. 86. 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
  87. 87. Como acompanho mudanças? sexta-feira, 16 de agosto de 13
  88. 88. Puppet Dashboard sexta-feira, 16 de agosto de 13
  89. 89. sexta-feira, 16 de agosto de 13
  90. 90. Posso fazer mudanças em tempo real? (orquestração) sexta-feira, 16 de agosto de 13
  91. 91. 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
  92. 92. Posso provisionar VMs/Instâncias? sexta-feira, 16 de agosto de 13
  93. 93. Ferramentas de Provisionamento Puppet/Chef/Ansible Foreman Vagrant Razor Sprinkle sexta-feira, 16 de agosto de 13
  94. 94. Qual o resultado concreto? sexta-feira, 16 de agosto de 13
  95. 95. Documentação Instantânea sexta-feira, 16 de agosto de 13
  96. 96. Processos bem definidos sexta-feira, 16 de agosto de 13
  97. 97. Ambiente Padronizado sexta-feira, 16 de agosto de 13
  98. 98. Restore e backup de mudanças sexta-feira, 16 de agosto de 13
  99. 99. Tarefas Automatizadas sexta-feira, 16 de agosto de 13
  100. 100. 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
  101. 101. 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
  102. 102. Tecnologia trabalhando para você sexta-feira, 16 de agosto de 13
  103. 103. Boas Práticas sexta-feira, 16 de agosto de 13
  104. 104. Insira o puppet nos templates de seu hypervisor sexta-feira, 16 de agosto de 13
  105. 105. Use o puppet para executar e controlar mudanças em seu parque sexta-feira, 16 de agosto de 13
  106. 106. Para de administrar e comece a desenvolver a sua infraestrutura sexta-feira, 16 de agosto de 13
  107. 107. 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
  108. 108. Versione as configurações (git) criadas no Puppet. sexta-feira, 16 de agosto de 13
  109. 109. Reaproveite código, escreva seus módulos da forma mais flexível possível. sexta-feira, 16 de agosto de 13
  110. 110. Não precisa começar do zero, use módulo prontos do GitHub e PuppetForge. sexta-feira, 16 de agosto de 13
  111. 111. Pesquise, há muita informação sobre puppet na rede! sexta-feira, 16 de agosto de 13
  112. 112. 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
  113. 113. Puppet Labs sexta-feira, 16 de agosto de 13
  114. 114. 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
  115. 115. Perguntas? sexta-feira, 16 de agosto de 13
  116. 116. 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

×