Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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. 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
  2. Quem são vocês?  Quem é administrador de sistemas? 

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

    Quem é programador?  Quem se considera “devops”?  Quem já conhece o Puppet?
  4. Objetivos  Explicar o que é Gestão Automática de Configuração

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

     Apresentar os benefícios  Resumir alternativas  Descrever o funcionamento do Puppet
  6. 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
  7. 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
  8. 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
  9. Gestão  Aplicar nos servidores a configuração desejada  Monitorar

    servidores contra mudanças  Corrigir alterações da configuração esperada
  10. 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
  11. 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
  12. 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
  13. 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
  14. 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
  15. 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
  16. 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!
  17. 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!
  18. Recurso user { 'ze': ensure => present, gid => 1000,

    require => Group['ze'], } Tipo Nome Atributos MetaAtributo
  19. 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
  20. 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)
  21. Elementos de Organização Contém todo o resto Site Configuração de

    um servidor Nó 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
  22. 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
  23. 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
  24. 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
  25. 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
  26. 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
  27. 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
  28. 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.
  29. 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)
  30. 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