SlideShare ist ein Scribd-Unternehmen logo
1 von 65
Daniel Capó Sobral
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
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
Quem são vocês?
 Quem é administrador de sistemas?
Quem são vocês?
 Quem é administrador de sistemas?
 Quem é programador?
Quem são vocês?
 Quem é administrador de sistemas?
 Quem é programador?
 Quem se considera “devops”?
Quem são vocês?
 Quem é administrador de sistemas?
 Quem é programador?
 Quem se considera “devops”?
 Quem já conhece o Puppet?
Objetivos
 Explicar o que é Gestão Automática de Configuração
Objetivos
 Explicar o que é Gestão Automática de Configuração
 Apresentar os benefícios
Objetivos
 Explicar o que é Gestão Automática de Configuração
 Apresentar os benefícios
 Resumir alternativas
Objetivos
 Explicar o que é Gestão Automática de Configuração
 Apresentar os benefícios
 Resumir alternativas
 Descrever o funcionamento do Puppet
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
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
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
Gestão
 Aplicar nos servidores a configuração desejada
 Monitorar servidores contra mudanças
 Corrigir alterações da configuração esperada
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
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
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
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
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
Visão por alto
Cliente executando
Servidor preparando catálogo
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
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!
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!
Recurso
    user { 'ze':
        ensure => present,
        gid      => 1000,
        require =>
    Group['ze'],
    }
Recurso
  Tipo                     Nome

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



     MetaAtributo
Recurso
      Tipo         Determina o que será configurado
• “user” cria, modifica e remove usuários



     Nome          Identificação única de um recurso
• Em alguns casos, provê informações adicionais
• O nome de “user” é o nome do usuário sendo configurado

   Atributos       Descrevem a configuração do recurso
• “ensure” de “user” determina se o usuário deve estar presente ou não
• “gid” de “user” informa o grupo primário
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)
Elementos de Organização
   Site      Contém todo o resto
    Nó       Configuração de um servidor
 Módulo      Agrupamento temático de configurações
  Classe     Grupo de configurações
 Definição   Grupo de configurações parametrizado
 Recurso     Um elemento de configuração
 Arquivo     Arquivos servidos pelo puppet
 Template    Arquivos servidos pelo puppet parametrizados
Árvore do Puppet
Organização de Recursos
                                             Site


 Nós          Módulos       Classes       Definições     Recursos   Arquivos   Templates


  Classes       Classes       Classes         Classes


 Definições    Definições    Definições     Definições


 Recursos       Arquivos     Recursos        Recursos


               Templates
Um exemplo prático: o nó
                            Classe
node "rio20prod01" {
    include linux-server
    rio20def { 'rio20prod01':
         site => 'rio20.dom.com.br',
    }
}
  Definição        Parâmetro da Definição
Um exemplo prático: o módulo
Um exemplo prático: a classe
                       Outras Classes
class linux-server {
    # Include classes common to all
linux servers
    include localmta
    include ntpdate
    include puppet::conf
    include ssh::server
    include sudoers
Um exemplo prático: a definição
                     Parâmetro a ser recebido
                                             Recursos
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',                                  Definições
        mode    => 644,
        source => 'puppet:///files/rio20/apache2/apache2.conf',
        require => Package['apache2'],
        notify => Service['apache2'],
    }
    file { '/etc/php5/apache2/php.ini':
        ensure => present,
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
Um exemplo prático: o recurso
      Tipo                   Nome
file { "/etc/apache2/sites-available/default":
       ensure => present,
       owner   => 'root',
       group   => 'root',                           Atributos
       mode    => 644,
       content => template('wordpress/apache.erb'),
       require => Package['apache2'],
       notify => Service['apache2'], MetaAtributos
   }
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.
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)
Comandos Úteis
 puppet     Pega configurações no Puppet
  agent     Master
 puppet
  apply     Pega configurações de um arquivo
  puppet
 resource   Examina ou modifica um resource
 puppet
 describe   Lista resources e explica atributos
Um início modesto
 Pacote Apache2
 Serviço Apache2
Dependências
 Serviço antes de Pacote?
 Require e Before
Arquivos de Configuração
 Número de arquivos abertos: nofile
Completando
 Mod-rewrite
 Mod-deflate
 PHP5
Temos Uma Classe!
 Classe
 Incluindo classes
 Nodes
NGINX e defines
 Define
 Classe com parâmetro
Conflito de Porta e Templates
 Variáveis
 Ports.conf e o ERB Template
Carregando Novas Configurações
 Notify e Subscribe
Instalando, ou não, o NGINX
 If
for now...

Weitere ähnliche Inhalte

Was ist angesagt?

Automação no ambientAutomação no ambiente de desenvolvimento com Maven e ANT
Automação no ambientAutomação no ambiente de desenvolvimento com Maven e ANTAutomação no ambientAutomação no ambiente de desenvolvimento com Maven e ANT
Automação no ambientAutomação no ambiente de desenvolvimento com Maven e ANT
elliando dias
 
Automação de Ambientes com Puppet
Automação de Ambientes com Puppet Automação de Ambientes com Puppet
Automação de Ambientes com Puppet
4LinuxCursos
 

Was ist angesagt? (20)

Puppet – Torne Seu Datacenter áGil
Puppet – Torne Seu Datacenter áGilPuppet – Torne Seu Datacenter áGil
Puppet – Torne Seu Datacenter áGil
 
Gerenciamento de Configurações - Puppet
Gerenciamento de Configurações - PuppetGerenciamento de Configurações - Puppet
Gerenciamento de Configurações - Puppet
 
Infraestrutura como código com Puppet e Mcollective
Infraestrutura como código com Puppet e McollectiveInfraestrutura como código com Puppet e Mcollective
Infraestrutura como código com Puppet e Mcollective
 
Ferramentas para infraestrutura ágil
Ferramentas para infraestrutura ágilFerramentas para infraestrutura ágil
Ferramentas para infraestrutura ágil
 
Consegi 2011: Ganeti + Puppet
Consegi 2011: Ganeti + PuppetConsegi 2011: Ganeti + Puppet
Consegi 2011: Ganeti + Puppet
 
Gerenciamento de configuração com puppet
Gerenciamento de configuração com puppetGerenciamento de configuração com puppet
Gerenciamento de configuração com puppet
 
Cakephp 2.0 - O que mudou
Cakephp 2.0 - O que mudouCakephp 2.0 - O que mudou
Cakephp 2.0 - O que mudou
 
Async/Await Pattern in C#
Async/Await Pattern in C#Async/Await Pattern in C#
Async/Await Pattern in C#
 
TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... m...
TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... m...TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... m...
TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... m...
 
Maven em 10 minutos
Maven em 10 minutosMaven em 10 minutos
Maven em 10 minutos
 
Uma breve introdução ao Terraform
Uma breve introdução ao TerraformUma breve introdução ao Terraform
Uma breve introdução ao Terraform
 
Automação no ambientAutomação no ambiente de desenvolvimento com Maven e ANT
Automação no ambientAutomação no ambiente de desenvolvimento com Maven e ANTAutomação no ambientAutomação no ambiente de desenvolvimento com Maven e ANT
Automação no ambientAutomação no ambiente de desenvolvimento com Maven e ANT
 
Maven introdução Muito Rápida
Maven introdução Muito RápidaMaven introdução Muito Rápida
Maven introdução Muito Rápida
 
Automação de Ambientes com Puppet
Automação de Ambientes com Puppet Automação de Ambientes com Puppet
Automação de Ambientes com Puppet
 
Hotspot Green and Blue Label - Switching the labels!
Hotspot Green and Blue Label - Switching the labels!Hotspot Green and Blue Label - Switching the labels!
Hotspot Green and Blue Label - Switching the labels!
 
Testes em aplicações JEE: Montando sua infra de testes automatizados
Testes em aplicações JEE: Montando sua infra de testes automatizadosTestes em aplicações JEE: Montando sua infra de testes automatizados
Testes em aplicações JEE: Montando sua infra de testes automatizados
 
Tutorial codeigniter
Tutorial codeigniterTutorial codeigniter
Tutorial codeigniter
 
Monitoramento de Serviços de Bancos de Dados - Nagios
Monitoramento de Serviços de Bancos de Dados - NagiosMonitoramento de Serviços de Bancos de Dados - Nagios
Monitoramento de Serviços de Bancos de Dados - Nagios
 
Como o Cucumber Funciona
Como o Cucumber FuncionaComo o Cucumber Funciona
Como o Cucumber Funciona
 
Opennebula Introdução
Opennebula IntroduçãoOpennebula Introdução
Opennebula Introdução
 

Andere mochten auch

Andere mochten auch (13)

Icprl12_1-Servidores
Icprl12_1-ServidoresIcprl12_1-Servidores
Icprl12_1-Servidores
 
PHP - Programação para seres humanos
PHP - Programação para seres humanosPHP - Programação para seres humanos
PHP - Programação para seres humanos
 
Dev ninja -> vagrant + virtualbox + chef-solo + git + ec2
Dev ninja  -> vagrant + virtualbox + chef-solo + git + ec2Dev ninja  -> vagrant + virtualbox + chef-solo + git + ec2
Dev ninja -> vagrant + virtualbox + chef-solo + git + ec2
 
IaaS: Implantação e gerenciamento de configurações de ambientes Cloud usando...
 IaaS: Implantação e gerenciamento de configurações de ambientes Cloud usando... IaaS: Implantação e gerenciamento de configurações de ambientes Cloud usando...
IaaS: Implantação e gerenciamento de configurações de ambientes Cloud usando...
 
Git Básico
Git BásicoGit Básico
Git Básico
 
Mini-curso de Linux - SECCOMP 2009
Mini-curso de Linux - SECCOMP 2009Mini-curso de Linux - SECCOMP 2009
Mini-curso de Linux - SECCOMP 2009
 
Instalando e Configurando um Servidor de E-Mails Linux
Instalando e Configurando um Servidor de E-Mails LinuxInstalando e Configurando um Servidor de E-Mails Linux
Instalando e Configurando um Servidor de E-Mails Linux
 
Linux - DNS
Linux - DNSLinux - DNS
Linux - DNS
 
GIT Básico
GIT BásicoGIT Básico
GIT Básico
 
Firewall linux virtual para windows
Firewall linux virtual para windowsFirewall linux virtual para windows
Firewall linux virtual para windows
 
Aula 1 sistema operacional linux
Aula 1 sistema operacional linuxAula 1 sistema operacional linux
Aula 1 sistema operacional linux
 
Redes e Servidores Linux - Guia Prático - Carlos E. Morimoto
Redes e Servidores Linux - Guia Prático - Carlos E. MorimotoRedes e Servidores Linux - Guia Prático - Carlos E. Morimoto
Redes e Servidores Linux - Guia Prático - Carlos E. Morimoto
 
Php e mysql aplicacao completa a partir do zero
Php e mysql   aplicacao completa a partir do zeroPhp e mysql   aplicacao completa a partir do zero
Php e mysql aplicacao completa a partir do zero
 

Ähnlich wie Gestão automática de configuração usando puppet

40 php orientado a objetos
40 php orientado a objetos40 php orientado a objetos
40 php orientado a objetos
Francisco Santos
 
Apostila php orientado a objetos
Apostila php   orientado a objetosApostila php   orientado a objetos
Apostila php orientado a objetos
Fabiano Rodrigues
 
Slide Aula - Curso CakePHP
Slide Aula - Curso CakePHPSlide Aula - Curso CakePHP
Slide Aula - Curso CakePHP
Rangel Javier
 

Ähnlich wie Gestão automática de configuração usando puppet (20)

Administracao de sistemas_com_puppet
Administracao de sistemas_com_puppetAdministracao de sistemas_com_puppet
Administracao de sistemas_com_puppet
 
Gerência de Configurações com o Puppet
Gerência de Configurações com o PuppetGerência de Configurações com o Puppet
Gerência de Configurações com o Puppet
 
Puppet overview
Puppet overviewPuppet overview
Puppet overview
 
Desenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmDesenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine Orm
 
Desmistificando o Framework da Zend
Desmistificando o Framework da ZendDesmistificando o Framework da Zend
Desmistificando o Framework da Zend
 
Introdução ao Zend Framework 2
Introdução ao Zend Framework 2Introdução ao Zend Framework 2
Introdução ao Zend Framework 2
 
Desfrutando os Componentes do Zend Framework
Desfrutando os Componentes do Zend FrameworkDesfrutando os Componentes do Zend Framework
Desfrutando os Componentes do Zend Framework
 
Segurança e automação na Amazon: Lições das trincheiras
Segurança e automação na Amazon: Lições das trincheirasSegurança e automação na Amazon: Lições das trincheiras
Segurança e automação na Amazon: Lições das trincheiras
 
Cakephp - framework de desenvolvimento de aplicações Web em PHP
Cakephp - framework de desenvolvimento de aplicações Web em PHPCakephp - framework de desenvolvimento de aplicações Web em PHP
Cakephp - framework de desenvolvimento de aplicações Web em PHP
 
Palestra
PalestraPalestra
Palestra
 
Java Seminar
Java SeminarJava Seminar
Java Seminar
 
Desenvolvimento Web com Simfony Framework.
Desenvolvimento Web com Simfony Framework.Desenvolvimento Web com Simfony Framework.
Desenvolvimento Web com Simfony Framework.
 
Dsi 015 - poo e php - conexão com bancos de dados usando pdo
Dsi   015 - poo e php - conexão com bancos de dados usando pdoDsi   015 - poo e php - conexão com bancos de dados usando pdo
Dsi 015 - poo e php - conexão com bancos de dados usando pdo
 
Workshop - Desenvolvimento web com Drupal 7
Workshop - Desenvolvimento web com Drupal 7Workshop - Desenvolvimento web com Drupal 7
Workshop - Desenvolvimento web com Drupal 7
 
ZF Básico - 1. Introdução
ZF Básico - 1. IntroduçãoZF Básico - 1. Introdução
ZF Básico - 1. Introdução
 
40 php orientado a objetos
40 php orientado a objetos40 php orientado a objetos
40 php orientado a objetos
 
php orientado_a_objetos
php orientado_a_objetosphp orientado_a_objetos
php orientado_a_objetos
 
40 php orientado a objetos
40 php orientado a objetos40 php orientado a objetos
40 php orientado a objetos
 
Apostila php orientado a objetos
Apostila php   orientado a objetosApostila php   orientado a objetos
Apostila php orientado a objetos
 
Slide Aula - Curso CakePHP
Slide Aula - Curso CakePHPSlide Aula - Curso CakePHP
Slide Aula - Curso CakePHP
 

Mehr von Daniel Sobral

Mehr von Daniel Sobral (10)

What can scala puzzlers teach us
What can scala puzzlers teach usWhat can scala puzzlers teach us
What can scala puzzlers teach us
 
Injecting Clock in Java
Injecting Clock in JavaInjecting Clock in Java
Injecting Clock in Java
 
A JSR-310 Date: Beyond JODA Time
A JSR-310 Date: Beyond JODA TimeA JSR-310 Date: Beyond JODA Time
A JSR-310 Date: Beyond JODA Time
 
Scala 2.10.0 (english version)
Scala 2.10.0 (english version)Scala 2.10.0 (english version)
Scala 2.10.0 (english version)
 
Scala 2.10.0
Scala 2.10.0Scala 2.10.0
Scala 2.10.0
 
Palestra ganeti puppet
Palestra ganeti puppetPalestra ganeti puppet
Palestra ganeti puppet
 
Tutorial Puppet
Tutorial PuppetTutorial Puppet
Tutorial Puppet
 
Regex
RegexRegex
Regex
 
Introdução a TDD
Introdução a TDDIntrodução a TDD
Introdução a TDD
 
Akka - Uma plataforma para o desenvolvimento de sistemas concorrentes e distr...
Akka - Uma plataforma para o desenvolvimento de sistemas concorrentes e distr...Akka - Uma plataforma para o desenvolvimento de sistemas concorrentes e distr...
Akka - Uma plataforma para o desenvolvimento de sistemas concorrentes e distr...
 

Kürzlich hochgeladen

Kürzlich hochgeladen (6)

ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 

Gestão automática de configuração usando puppet

  • 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
  • 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
  • 4. Quem são vocês?  Quem é administrador de sistemas?
  • 5. Quem são vocês?  Quem é administrador de sistemas?  Quem é programador?
  • 6. Quem são vocês?  Quem é administrador de sistemas?  Quem é programador?  Quem se considera “devops”?
  • 7. Quem são vocês?  Quem é administrador de sistemas?  Quem é programador?  Quem se considera “devops”?  Quem já conhece o Puppet?
  • 8.
  • 9. Objetivos  Explicar o que é Gestão Automática de Configuração
  • 10. Objetivos  Explicar o que é Gestão Automática de Configuração  Apresentar os benefícios
  • 11. Objetivos  Explicar o que é Gestão Automática de Configuração  Apresentar os benefícios  Resumir alternativas
  • 12. Objetivos  Explicar o que é Gestão Automática de Configuração  Apresentar os benefícios  Resumir alternativas  Descrever o funcionamento do Puppet
  • 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
  • 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
  • 15.
  • 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
  • 17. Gestão  Aplicar nos servidores a configuração desejada  Monitorar servidores contra mudanças  Corrigir alterações da configuração esperada
  • 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
  • 19.
  • 20.
  • 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
  • 22.
  • 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
  • 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
  • 25.
  • 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
  • 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
  • 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!
  • 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!
  • 33. Recurso user { 'ze': ensure => present, gid => 1000, require => Group['ze'], }
  • 34. Recurso Tipo Nome user { 'ze': Atributos ensure => present, gid => 1000, require => Group['ze'], } MetaAtributo
  • 35. Recurso Tipo Determina o que será configurado • “user” cria, modifica e remove usuários Nome Identificação única de um recurso • Em alguns casos, provê informações adicionais • O nome de “user” é o nome do usuário sendo configurado Atributos Descrevem a configuração do recurso • “ensure” de “user” determina se o usuário deve estar presente ou não • “gid” de “user” informa o grupo primário
  • 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)
  • 37.
  • 38. Elementos de Organização Site Contém todo o resto Nó Configuração de um servidor Módulo Agrupamento temático de configurações Classe Grupo de configurações Definição Grupo de configurações parametrizado Recurso Um elemento de configuração Arquivo Arquivos servidos pelo puppet Template Arquivos servidos pelo puppet parametrizados
  • 40. Organização de Recursos Site Nós Módulos Classes Definições Recursos Arquivos Templates Classes Classes Classes Classes Definições Definições Definições Definições Recursos Arquivos Recursos Recursos Templates
  • 41.
  • 42. Um exemplo prático: o nó Classe node "rio20prod01" { include linux-server rio20def { 'rio20prod01': site => 'rio20.dom.com.br', } } Definição Parâmetro da Definição
  • 43.
  • 44. Um exemplo prático: o módulo
  • 45.
  • 46. Um exemplo prático: a classe Outras Classes class linux-server { # Include classes common to all linux servers include localmta include ntpdate include puppet::conf include ssh::server include sudoers
  • 47.
  • 48. Um exemplo prático: a definição Parâmetro a ser recebido Recursos 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', Definições mode => 644, source => 'puppet:///files/rio20/apache2/apache2.conf', require => Package['apache2'], notify => Service['apache2'], } file { '/etc/php5/apache2/php.ini': ensure => present,
  • 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
  • 50.
  • 51. Um exemplo prático: o recurso Tipo Nome file { "/etc/apache2/sites-available/default": ensure => present, owner => 'root', group => 'root', Atributos mode => 644, content => template('wordpress/apache.erb'), require => Package['apache2'], notify => Service['apache2'], MetaAtributos }
  • 52.
  • 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.
  • 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)
  • 55. Comandos Úteis puppet Pega configurações no Puppet agent Master puppet apply Pega configurações de um arquivo puppet resource Examina ou modifica um resource puppet describe Lista resources e explica atributos
  • 56. Um início modesto  Pacote Apache2  Serviço Apache2
  • 57. Dependências  Serviço antes de Pacote?  Require e Before
  • 58. Arquivos de Configuração  Número de arquivos abertos: nofile
  • 60. Temos Uma Classe!  Classe  Incluindo classes  Nodes
  • 61. NGINX e defines  Define  Classe com parâmetro
  • 62. Conflito de Porta e Templates  Variáveis  Ports.conf e o ERB Template
  • 64. Instalando, ou não, o NGINX  If