$30 off During Our Annual Pro Sale. View Details »

Gestão Automática de Configuração Usando Puppet

Gestão Automática de Configuração Usando Puppet

Palestra introdutória do Workshop de mesmo nome da Agile Brazil 2012.

Daniel Capo Sobral

September 05, 2012
Tweet

More Decks by Daniel Capo Sobral

Other Decks in Technology

Transcript

  1. Daniel Capó Sobral

    View Slide

  2. Esta apresentação:
     SpeakerDeck
     https://speakerdeck.com/u/dcsobral/p/gestao-
    automatica-de-configuracao-usando-puppet
     SlideShare
     http://www.slideshare.net/dcsobral/gesto-automtica-
    de-configurao-usando-puppet

    View Slide

  3. Quem sou eu?
     Daniel Sobral
     Mestrado em Computação
     Administrador de Sistemas
     Programador
     Colaborador dos projetos FreeBSD e Scala
     Entusiasta de Métodos Ágeis
     Não trabalho para Puppet Labs
     @dcsobral

    View Slide

  4. Quem são vocês?
     Quem é administrador de sistemas?

    View Slide

  5. Quem são vocês?
     Quem é administrador de sistemas?
     Quem é programador?

    View Slide

  6. Quem são vocês?
     Quem é administrador de sistemas?
     Quem é programador?
     Quem se considera “devops”?

    View Slide

  7. Quem são vocês?
     Quem é administrador de sistemas?
     Quem é programador?
     Quem se considera “devops”?
     Quem já conhece o Puppet?

    View Slide

  8. View Slide

  9. Objetivos
     Explicar o que é Gestão Automática de Configuração

    View Slide

  10. Objetivos
     Explicar o que é Gestão Automática de Configuração
     Apresentar os benefícios

    View Slide

  11. Objetivos
     Explicar o que é Gestão Automática de Configuração
     Apresentar os benefícios
     Resumir alternativas

    View Slide

  12. Objetivos
     Explicar o que é Gestão Automática de Configuração
     Apresentar os benefícios
     Resumir alternativas
     Descrever o funcionamento do Puppet

    View Slide

  13. Objetivos
     Explicar o que é Gestão Automática de Configuração
     Apresentar os benefícios
     Resumir alternativas
     Descrever o funcionamento do Puppet
     Ensinar a usar o Puppet

    View Slide

  14. Objetivos
     Explicar o que é Gestão Automática de Configuração
     5 minutos
     Apresentar os benefícios
     5 minutos
     Resumir alternativas
     5 minutos
     Descrever o funcionamento do Puppet
     25 minutos
     Ensinar a usar o Puppet
     55 minutos

    View Slide

  15. View Slide

  16. Configuração
     Tudo aquilo que pode ser modificado, e modifique a
    funcionalidade do sistema:
     Arquivos de Configuração
     Usuários Cadastrados
     Serviços Rodando
     Pacotes Instalados
     etc
     etc
     Etc

    View Slide

  17. Gestão
     Aplicar nos servidores a configuração desejada
     Monitorar servidores contra mudanças
     Corrigir alterações da configuração esperada

    View Slide

  18. Gestão Automática de
    Configuração
     Funciona mais ou menos assim:
     Servidor rio20prod01:
     Servidor de Linux de Produção com Wordpress servindo o site
    rio20

    View Slide

  19. View Slide

  20. View Slide

  21. Meus benefícios favoritos:
     Padronização dos Servidores
     Todos servidores de um determinado tipo tem
    exatamente a mesma configuração relevante
     Agilidade para Mudar a Configuração
     Controle de versão
     Você sabe quando e o que mudou na configuração
     Você pode voltar a versões anteriores
     Você tem um backup de como o servidor deve ser
     Menor Tempo para se Criar Novos Servidores

    View Slide

  22. View Slide

  23. Qual a diferença?
     CFEngine
     O mais antigo
     Rápido
     Consome poucos recursos
     Chef
     Configuração escrita em Ruby
     Muito Flexível
     Salt Stack
     Configuração via YAML (muito simples, intuitivo)
     ANSIBLE
     Acessa servidores via SSH
     Não requer daemons rodando nos clientes

    View Slide

  24. Vantagens do Puppet
     Linguagem declarativa
     Menos “bugs” de configuração
     Mais configuração do que programação
     Configurações Idempotentes
     Pode-se aplicar uma configuração já aplicada em erros
     Completamente extensível
     Todos elementos primitivos do Puppet podem ser
    estendidos pelo usuário em Ruby
     Protocolos Padrões (HTTPS, certificados)
     Tecnologia conhecida

    View Slide

  25. View Slide

  26. Modos De Funcionamento
     Cliente/Servidor
     Daemon no cliente consultando servidor
    periodicamente
     Daemon no cliente ativado a partir do servidor
     Processo no cliente disparado via crontab
     Processo no cliente disparado manualmente
     Stand-Alone
     Via crontab
     Manualmente

    View Slide

  27. Visão por alto

    View Slide

  28. Cliente executando

    View Slide

  29. Servidor preparando catálogo

    View Slide

  30. Cliente processando o catálogo
    Ordena Dependências entre Recursos
    Confere Estado de Cada Recurso
    • Modifica Configuração do Recurso
    • Notifica Outros Recursos
    Envia Relatório para o Puppet Master

    View Slide

  31. Fatos?
     Informações básicas a respeito do cliente:
     Qual é o sistema operacional?
     Qual é a versão?
     A máquina é virtual ou física?
     Quantos processadores?
     Quanta memória?
     Não inclui, por exemplo:
     Quais pacotes estão instalados
     Quais usuários estão cadastrados
     Mas podem ser extendidos!

    View Slide

  32. Catálogo?
     Conjunto de recursos, seus atributos e suas
    dependências
     Recurso:
     Um arquivo (conteúdo, permissão, dono, etc)
     Um serviço (se deve estar rodando ou não)
     Um pacote (se deve estar instalado ou não, versão)
     Um usuário (nome, uid, grupos, home, etc)
     Uma entrada na crontab (o que executar, quando)
     etc
     Pode-se criar novos recursos!

    View Slide

  33. Recurso
    user { 'ze':
    ensure => present,
    gid => 1000,
    require =>
    Group['ze'],
    }

    View Slide

  34. Recurso
    user { 'ze':
    ensure => present,
    gid => 1000,
    require => Group['ze'],
    }
    Tipo Nome
    Atributos
    MetaAtributo

    View Slide

  35. Recurso
    Determina o que será configurado
    Tipo
    • “user” cria, modifica e remove usuários
    Identificação única de um recurso
    Nome
    • Em alguns casos, provê informações adicionais
    • O nome de “user” é o nome do usuário sendo configurado
    Descrevem a configuração do recurso
    Atributos
    • “ensure” de “user” determina se o usuário deve estar presente ou não
    • “gid” de “user” informa o grupo primário

    View Slide

  36. Meta Atributos
     Comuns a todos os recursos
     Descrevem relações entre recursos ou forma de
    funcionamento
     Exemplos:
     Dependência (require, before)
     Gatilhos (notify, subscribe)
     Categorização (tag)
     Nome alternativo (alias)
     Dia e Horário em que pode ser aplicado (schedule)

    View Slide

  37. View Slide

  38. Elementos de Organização
    Contém todo o resto
    Site
    Configuração de um servidor

    Agrupamento temático de configurações
    Módulo
    Grupo de configurações
    Classe
    Grupo de configurações parametrizado
    Definição
    Um elemento de configuração
    Recurso
    Arquivos servidos pelo puppet
    Arquivo
    Arquivos servidos pelo puppet parametrizados
    Template

    View Slide

  39. Árvore do Puppet

    View Slide

  40. Organização de Recursos
    Site
    Nós
    Classes
    Definições
    Recursos
    Módulos
    Classes
    Definições
    Arquivos
    Templates
    Classes
    Classes
    Definições
    Recursos
    Definições
    Classes
    Definições
    Recursos
    Recursos Arquivos Templates

    View Slide

  41. View Slide

  42. Um exemplo prático: o nó
    node "rio20prod01" {
    include linux-server
    rio20def { 'rio20prod01':
    site => 'rio20.dom.com.br',
    }
    }
    Classe
    Definição Parâmetro da Definição

    View Slide

  43. View Slide

  44. Um exemplo prático: o módulo

    View Slide

  45. View Slide

  46. Um exemplo prático: a classe
    class linux-server {
    # Include classes common to all
    linux servers
    include localmta
    include ntpdate
    include puppet::conf
    include ssh::server
    include sudoers
    Outras Classes

    View Slide

  47. View Slide

  48. Um exemplo prático: a definição
    define rio20def($site) {
    include wordpress
    package { 'php5': ensure => installed, }
    wordpress::app { "rio20": password => "senha", site => "$site", }
    deployers { 'rio20': }
    file { '/etc/apache2/apache2.conf':
    ensure => present,
    owner => 'root',
    group => 'root',
    mode => 644,
    source => 'puppet:///files/rio20/apache2/apache2.conf',
    require => Package['apache2'],
    notify => Service['apache2'],
    }
    file { '/etc/php5/apache2/php.ini':
    ensure => present,
    Parâmetro a ser recebido
    Recursos
    Definições

    View Slide

  49. Classes vs Definições
     Também é permitido às classes serem parametrizadas
     Capacidade relativamente recente
     Uma classe só pode ser inclusa uma única vez
     Definições podem ser inclusas múltiplas vezes, com
    múltiplos nomes

    View Slide

  50. View Slide

  51. Um exemplo prático: o recurso
    file { "/etc/apache2/sites-available/default":
    ensure => present,
    owner => 'root',
    group => 'root',
    mode => 644,
    content => template('wordpress/apache.erb'),
    require => Package['apache2'],
    notify => Service['apache2'],
    }
    Atributos
    MetaAtributos
    Nome
    Tipo

    View Slide

  52. View Slide

  53. Proposta
     Não usaremos o Puppet Master
     Usaremos o Puppet stand-alone manual
     Vamos criar a configuração em etapas
     A cada etapa, introduzimos um recurso novo
     A propósito,
     Essa é a forma como eu crio minhas configurações.

    View Slide

  54. O exercício
     Criar uma configuração para aplicações PHP
     Servindo páginas dinâmicas via Apache
     E páginas estáticas via Nginx
     Código gerado durante a Agile Brazil 2012:
     https://github.com/dcsobral/puppet-demo-
    agilebrazil2012
     Exemplo de módulo com essas características:
     https://github.com/dcsobral/puppet-wordpress
     Nota: não usar em produção – versão do github não seta
    keys e salts (bom exercício – ver módulo de mysql para
    idéias)

    View Slide

  55. Comandos Úteis
    Pega configurações no Puppet
    Master
    puppet
    agent
    Pega configurações de um arquivo
    puppet
    apply
    Examina ou modifica um resource
    puppet
    resource
    Lista resources e explica atributos
    puppet
    describe

    View Slide

  56. Um início modesto
     Pacote Apache2
     Serviço Apache2

    View Slide

  57. Dependências
     Serviço antes de Pacote?
     Require e Before

    View Slide

  58. Arquivos de Configuração
     Número de arquivos abertos: nofile

    View Slide

  59. Completando
     Mod-rewrite
     Mod-deflate
     PHP5

    View Slide

  60. Temos Uma Classe!
     Classe
     Incluindo classes
     Nodes

    View Slide

  61. NGINX e defines
     Define
     Classe com parâmetro

    View Slide

  62. Conflito de Porta e Templates
     Variáveis
     Ports.conf e o ERB Template

    View Slide

  63. Carregando Novas Configurações
     Notify e Subscribe

    View Slide

  64. Instalando, ou não, o NGINX
     If

    View Slide

  65. for now...

    View Slide