Infraestrutura como código com Puppet e Mcollective

  • 915 views
Uploaded on

Free Software Day - Taguatinga/DF - 2013

Free Software Day - Taguatinga/DF - 2013

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
915
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
19
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. sábado, 21 de setembro de 13
  • 2. Infraestrutura como código Puppet & Mcollective TAGUATINGA/DF - 2013--09-21 sábado, 21 de setembro de 13
  • 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. 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. 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. Administração de sistemas e serviços sábado, 21 de setembro de 13
  • 7. Virtualização sábado, 21 de setembro de 13
  • 8. Cloud Computing sábado, 21 de setembro de 13
  • 9. Administração Manual sábado, 21 de setembro de 13
  • 10. Administração Manual Tarefas repetitivas Não existem padrões Não existem procedimentos sábado, 21 de setembro de 13
  • 11. Cada sysadmin faz do seu jeito sábado, 21 de setembro de 13
  • 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. A medida que o parque aumenta administrá-lo fica mais complicado sábado, 21 de setembro de 13
  • 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. Maior risco de ocorrer falhas sábado, 21 de setembro de 13
  • 16. Maior tempo gasto para executar mudanças sábado, 21 de setembro de 13
  • 17. Quanto tempo se gasta para criar um usuário em 450 servidores? sábado, 21 de setembro de 13
  • 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. 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. 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. 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. 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. Documentação inexistente sábado, 21 de setembro de 13
  • 24. Não há rastreamento de mudanças sábado, 21 de setembro de 13
  • 25. Demandas pipocando... sábado, 21 de setembro de 13
  • 26. Ambiente pipocando... sábado, 21 de setembro de 13
  • 27. Estresse aumentando... sábado, 21 de setembro de 13
  • 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. Como resolver estes problemas? Como obtenho controle e padronização em meu ambiente ? sábado, 21 de setembro de 13
  • 30. Gerência de Configurações sábado, 21 de setembro de 13
  • 31. Padronização sábado, 21 de setembro de 13
  • 32. Automatização sábado, 21 de setembro de 13
  • 33. Controle sábado, 21 de setembro de 13
  • 34. Integridade sábado, 21 de setembro de 13
  • 35. Agilidade nas mudanças sábado, 21 de setembro de 13
  • 36. Ferramentas de GC sábado, 21 de setembro de 13
  • 37. sábado, 21 de setembro de 13
  • 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. Puppet em poucas palavras sábado, 21 de setembro de 13
  • 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. Sobre a ferramenta sábado, 21 de setembro de 13
  • 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. 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. Feito por um SysAdmin para SysAdmins sábado, 21 de setembro de 13
  • 45. Desenhada para uso DevOps sábado, 21 de setembro de 13
  • 46. Visão DevOps sábado, 21 de setembro de 13
  • 47. Tech Specs sábado, 21 de setembro de 13
  • 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. Clientes Puppet Enterprise sábado, 21 de setembro de 13
  • 50. Parcerias sábado, 21 de setembro de 13
  • 51. Parcerias sábado, 21 de setembro de 13
  • 52. Arquitetura Como funciona o Puppet? sábado, 21 de setembro de 13
  • 53. sábado, 21 de setembro de 13
  • 54. Abstração É mais fácil e rápido usar o Puppet! sábado, 21 de setembro de 13
  • 55. Resource Abstraction Layer (RAL) sábado, 21 de setembro de 13
  • 56. sábado, 21 de setembro de 13
  • 57. Resource Abstraction Layer sábado, 21 de setembro de 13
  • 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. Instale Pacote X sábado, 21 de setembro de 13
  • 60. Remova usuário Z sábado, 21 de setembro de 13
  • 61. (Re)inicie serviço Y sábado, 21 de setembro de 13
  • 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. Tratamento de informações sábado, 21 de setembro de 13
  • 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. 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. 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. 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. Idempotência sábado, 21 de setembro de 13
  • 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. 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. Puppet em rede, como funciona? sábado, 21 de setembro de 13
  • 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. Puppet Visão em Rede Puppet Master Puppet Client 8140/ TCP puppet agent acesso seguro ssl sábado, 21 de setembro de 13
  • 74. Fluxo Cliente/Servidor Instalação do node sábado, 21 de setembro de 13
  • 75. Fluxo Cliente/Servidor Instalação do node Inicialização do puppet sábado, 21 de setembro de 13
  • 76. Fluxo Cliente/Servidor Instalação do node Geração de Certificado Inicialização do puppet sábado, 21 de setembro de 13
  • 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. 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. 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. 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. O agente se comunica com o master a cada N minutos sábado, 21 de setembro de 13
  • 82. Quais funcionalidades estão disponíveis? sábado, 21 de setembro de 13
  • 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. 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. 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. 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. 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. Exemplos sábado, 21 de setembro de 13
  • 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. 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. 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. Como seria no Puppet? sábado, 21 de setembro de 13
  • 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. 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. 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. Mais exemplos sábado, 21 de setembro de 13
  • 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. 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. 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. 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. 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. Padronizando nodes sábado, 21 de setembro de 13
  • 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. Como acompanho mudanças? sábado, 21 de setembro de 13
  • 105. Puppet Dashboard sábado, 21 de setembro de 13
  • 106. sábado, 21 de setembro de 13
  • 107. Posso fazer mudanças em tempo real? sábado, 21 de setembro de 13
  • 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. Demonstração sábado, 21 de setembro de 13
  • 110. Posso provisionar VMs/Instâncias? sábado, 21 de setembro de 13
  • 111. Ferramentas de Provisionamento Puppet/Chef/Ansible Foreman Vagrant Razor Sprinkle sábado, 21 de setembro de 13
  • 112. Qual o resultado concreto? sábado, 21 de setembro de 13
  • 113. Documentação Instantânea sábado, 21 de setembro de 13
  • 114. Processos bem definidos sábado, 21 de setembro de 13
  • 115. Ambiente Padronizado sábado, 21 de setembro de 13
  • 116. Restore e backup de mudanças sábado, 21 de setembro de 13
  • 117. Tarefas Automatizadas sábado, 21 de setembro de 13
  • 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. 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. Tecnologia trabalhando para você sábado, 21 de setembro de 13
  • 121. Boas Práticas sábado, 21 de setembro de 13
  • 122. Insira o puppet nos templates de seu hypervisor sábado, 21 de setembro de 13
  • 123. Use o puppet para executar e controlar mudanças em seu parque sábado, 21 de setembro de 13
  • 124. Para de administrar e comece a desenvolver a sua infraestrutura sábado, 21 de setembro de 13
  • 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. Versione as configurações (git) criadas no Puppet. sábado, 21 de setembro de 13
  • 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. Não precisa começar do zero, use módulos prontos do GitHub e PuppetForge. sábado, 21 de setembro de 13
  • 129. Pesquise, há muita informação sobre puppet na rede! sábado, 21 de setembro de 13
  • 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. Puppet Labs & Luke Kaines sábado, 21 de setembro de 13
  • 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. Perguntas? sábado, 21 de setembro de 13
  • 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