SlideShare una empresa de Scribd logo
1 de 36
Descargar para leer sin conexión
CONSEGI 2011

Assuma o controle de
 suas configurações
                              Palestrantes:
                  Daniel Sobral @dcsobral
             Guto Carvalho @gutocarvalho
Já teve a sensação de estar
perdendo o controle do seu
         ambiente?




   Foto tirada do site sysadminday.com por Frank Schicksal
Você passa horas e horas configurando e
reconfigurando sistemas de forma repetitiva e
                 cansativa?
Você gostaria de ter um
ambiente padronizado e de
fácil  implementação      de
mudanças e configurações?

Você sabe que o seu ambiente
vai crescer e se preocupa em
como mantê-lo?
Já pensou em investir na gestão de suas
           configurações?
Porque eu me interessaria por isto?
●   Facilitar o trabalho de administração de
    servidores
●   Padronizar as configurações utilizadas
●   Possibilitar auditoria de configuração
●   Centralizar a administração
●   Acelerar a criação de novos servidores
●   Acelerar a configuração de serviços
Que tipo de configuração?
●   Usuários
●   Grupos
●   Arquivos de configuração
●   Pacotes instalados
●   Serviços ativos
●   Execução periódica de scripts
Puppet & CIA
      ●   Puppet (2005)
          ●   Ruby, GPL
          ●   AIX, BSD, HP-UX,
              Linux, MaxOS,
              Solaris, Windows(*)
          ●   Wikipedia:
          ●   Configuration_management
          ●   Comparison_of_open_sourc
              e_configuration_manageme
              nt_software
Onde estamos usando?



    EBC - Empresa Brasil de Comunicação

Cerca de 160 máquinas virtuais e físicas sendo
●

          gerenciadas pelo Puppet.
 ●Administração compartilhada de 4 devops
Puppet: Fácil Aprendizado
           Sintaxe Declarativa
class rsyslog {

    package { 'rsyslog':
        ensure => present,
    }

    service { 'rsyslog':
        hasrestart => true,
    }

    file { '/etc/rsyslog.d/logserver01.conf':
        ensure => present,
        source => 'puppet:///files/rsyslog/rsyslog.d/logserver01.conf',
        notify => Service['rsyslog'],
    }
}
Puppet: Fácil Aprendizado
     Independente de Plataforma
class editor {
    $vim = $operatingsystem ? {
        'RedHat' => 'vim-enhanced',
        'CentOS' => 'vim-enhanced',
        'Fedora' => 'vim-enhanced',
        default => 'vim',
    }
   package { "$vim":
        ensure => present,
        alias => 'vim',
        # provider => yum, apt, ports?
    }
}
node “host01.domain.com.br” {
    include editor
}
node “host02.domain.com.br” {
    include editor
}
Puppet: Auto documentado

class linux-server {
    # Include classes common to all linux servers
    include localmta
    include ntpdate
    include puppet::conf
    include ssh::server
    include sudoers
    include users
    include utils
    include zabbix-agent
    include editor
    include snmpd
    include rsyslog

    #...
}
Puppet: Controle de Versão e
               Rollback
#git log
commit 263b2239ccff746f345c448d723f4ff52d3f8c0f
Author: Daniel Sobral <dcsobral@gmail.com>
Date:    Thu Mar 31 22:11:16 2011 -0300

   Exclui a boletins das máquinas configuradas como mta satélite.

   Limita a configuração do exim4 às máquinas Ubuntu e Debian.

commit 8fbed5a4b8095b7560941c598454d47f3b3dec7e
Author: Daniel Sobral <dcsobral@gmail.com>
Date:   Thu Mar 31 22:08:22 2011 -0300

   Classe debian-common adaptada para lidar com Ubuntu. Basicamente, força
   lidar com serviços no padrão Debian (Ubuntu suporta padrão FreeBSD
   também), e não mexe no source list (por hora).

   Sistemas Ubuntu também incluirão a classe debian-server.

   Verifica se o kernel é xen, e, se for, inclui o linux modules
   correspondente.
Puppet: Altamente Flexível

node "eleicoesconcurvm01" {
    include linux-server
    jboss::app { 'conselho':
        conf => 'default',
        pgdb => 'conselhoprod', # Altera pg_hba.conf
    }
}

node “eleicoesconcurvmbd01” {
    include linux-server
    pgdb { 'conselhoprod':      # Gera XML para datasource
        password => '********',
        pgversion => '8.4',
    }
}
Puppet: Expansível
●   Puppet               define pgclient($ensure = present, $ip =
                         $ipaddress) {
                             @@line { "pgclient ${ip}":
    ●   Classes                  ensure => $ensure,
                                 line    => "${ip}/32n",
    ●   Definições               require => File['clientip'],
                                 tag     => "pgclient_${title}",
●   Templates (ERB)      }
                             }


●   Ruby                 # augeasversion.rb
                         Facter.add("augeasversion") do
    ●   Fatos              setcode do
                            begin
                               require 'augeas'
    ●   Funções                aug = Augeas::open('', '',
                         Augeas::NO_LOAD & Augeas::NO_STDINC)
    ●   Tipos                  aug.get('/augeas/version') || nil
                         #...
    ●   Provedores
Mão na Massa
PUPPET: Funcionamento
●   Tipos:                           ●   Passos:
    ●   Autônomo                         ●   Cliente obtém plugins
        –   Configuração local           ●   Cliente envia fatos
    ●   Cliente/Servidor                 ●   Servidor produz
        –   HTTPS                            catálogo
        –   Certificado de Cliente       ●   Cliente processa
        –   Pull por default                 catálogo
        –   Push opcional                ●   Cliente envia relatório
Conceitos
●   Resource                      user { 'ze':
                                      ensure => present,
    ●   Type                          gid      => 1000,
        –   User, File, Package       require => Group['ze'],
                                  }
    ●   Name
    ●   Attributes
    ●   Meta Attributes
●   Classes
●   Definitions
●   Modules
Experimentando com a linha de
             Comando
●   ralsh

            puppet:~# ralsh user bob
            user { 'bob':
                ensure => 'absent'
            }
            puppet:~# ralsh user bob ensure=present
            notice: /User[bob]/ensure: created
            user { 'bob':
                ensure => 'present'
            }
            puppet:~# ralsh user bob ensure=absent
            notice: /User[bob]/ensure: removed
            user { 'bob':
                ensure => 'absent'
            }
Experimentando com a linha de
              Comando
●   puppet describe
    dcs@puppet:~/exemplo$ puppet describe package -s

    package
    =======
    descrição e funcionamento

    Parameters
    ----------
        adminfile, allowcdrom, category, configfiles, description, ensure,
        flavor, instance, name, platform, responsefile, root, source, status,
        type, vendor

    Providers
    ---------
        aix, appdmg, apple, apt, aptitude, aptrpm, blastwave, darwinport, dpkg,
        fink, freebsd, gem, hpux, nim, openbsd, pkg, pkgdmg, portage, ports,
        portupgrade, rpm, rug, sun, sunfreeware, up2date, urpmi, yum, zypper
Puppet Apply

# puppet apply locale.pp

package { 'locales':
        ensure => installed,
}

file { '/etc/default/locale':
        ensure => present,
        content => 'LANG=pt_BR.UTF-8',
}
Exemplo Sudoers
●   Pacote sudoers
    ●   Garantir que esteja instalado
●   Arquivo /etc/sudoers
    ●   Conteúdo comum a todas as máquinas
    ●   Requer pacote sudoers
    ●   Usuário root
    ●   Grupo root
    ●   Permissão 440
Exemplo Sudoers - Código

class sudoers {
    package { 'sudoers':
        ensure => installed,
    }

    file { '/etc/sudoers':
        source => 'puppet:///files/sudo/sudoers',
        require => Package['sudoers'],
        owner   => 'root',
        group   => 'root',
        mode    => 440,
    }
}
Exemplo Ntpdate
●   Pacote ntpdate
    ●   Garantir que esteja instalado
●   Crontab
    ●   Usuário root
    ●   Comando 'ntpdate ntp.dominio'
    ●   Executar de hora em hora
Exemplo Ntpdate - comandos

class ntpdate {
    package { 'ntpdate':
        ensure => installed,
    }

    cron { 'sincroniza horario':
        user    => 'root',
        command => '/usr/sbin/ntpdate ntp.dominio',
        minute => 0,
    }
}
Exemplo Locales
●   Pacote locales - instalado
●   Arquivo /etc/default/locale - conteúdo
●   Arquivo /etc/locale.gen - conteúdo
●   Executar /usr/sbin/locale.gen
    ●   Sempre que locale.gen for alterado
    ●   Só quando houver alteração
    ●   Requer pacote locales e arquivo locale.gen
Exemplo Locales - Código
class locale {
    package { 'locales':
        ensure => installed,
    }
    file { '/etc/default/locale':
        ensure => present,
        content => 'LANG=pt_BR.UTF-8',
        require => Package['locales'],
    }
    file { '/etc/locale.gen':
        ensure => present,
        source => '/root/exemplo/locale.gen',
        require => Package['locales'],
    }
    exec { '/usr/sbin/locale-gen':
        subscribe   => File['/etc/locale.gen'],
        refreshonly => true,
        require     => [ Package['locales'], File['/etc/locale.gen'] ],
    }
}
Exemplo Configuração Padrão
●   Aplicar sudoers
●   Aplicar ntpdate
●   Aplicar locale

●   Todos os nós!
    ●   Aplicar configuração padrão
Exemplo Configuração Padrão -
           Código
class padrao {
    include sudoers
    include ntpdate
    include locale
}

node default {
    include padrao
}
O que faço com tudo isso?



 Afinal, onde toda essa flexibilidade e agilidade
                 pode nos levar?

Quais são os ganhos para uma equipe devops e
               para o cliente?
Situação Anterior
Máquina Física – Debian Lenny
 ●   Tempo de criação de maquina física – 40 minutos (CD)
 ●   Tempo de configuração/update OS* - 40 minutos
 ●   Tempo de instalação e configuração Apache2, PHP5,
     MYSQL – 2 a 4 horas**


* Levando em conta configurações da rede, locale, ntpdate, backup, monitoração,
criação de usuários, instalação de pacotes básicos do sysadmin.
** Levando em conta hardening do os, tuning do os, configuração e tuning do apache2,
php5 e mysql5.
Situação Atual
Máquina Virtual (GANETI+XEN) – Debian Lenny
 ●   Tempo de criação de maquina virtual - 2 minutos
 ●   Tempo de configuração/update OS* usando Hooks Ganeti
     – 2 a 4 minutos
 ●   Tempo de instalação e configuração Apache2, PHP5,
     MYSQL – 2 a 4 minutos**
 ●


* Levando em conta configurações da rede, locale, ntpdate, backup, monitoração,
criação de usuários, instalação de pacotes básicos do sysadmin.
** Levando em conta hardening, tuning os, apache2, php5, mysql, considerando ter as
classes prontas
Puppet: Problemas
●   Mensagens de erro ruins
●   Servidor default nao segura mais de 20
    máquinas
    ●   Com Apache/Passenger, já temos +160 servidores
●   Não distribui arquivos grandes
    ●   Usar pacotes ou execução de comandos como
        wget
●   Grande investimento de tempo para ir do nível
    médio ao de expert
Conclusão



  O Puppet é uma ferramenta essencial para
 gerenciar e distribuir configurações, ele é um
batalhão de devops trabalhando para você, sua
            equipe e sua empresa.
Informações do projeto
Site/Blog
Http://www.puppetlabs.com
Http://www.puppetlabs.com/blog/

Twitter
@puppetlabs
Http://www.github.com/puppelabs
Google Groups
Puppet-camp,
puppet-users,
puppet-dev
IRC
Irc.freenode.org
#puppet
Contato, Dúvidas, Perguntas
Guto Carvalho                    Daniel Sobral
gutocarvalho@gmail.com           dcsobral@gmail.com
@gutocarvalho                    @dcsobral
http://gutocarvalho.net          http://dcsobral.blogspot.com
http://github.com/gutocarvalho   Http://github.com/dcsobral


          Palestras de hoje disponíveis em nossos sites.


       Palestra sob licença Creative Commons - Atribuição

Más contenido relacionado

La actualidad más candente

Ferramentas para infraestrutura ágil
Ferramentas para infraestrutura ágilFerramentas para infraestrutura ágil
Ferramentas para infraestrutura ágilJose Augusto Carvalho
 
(DevOps) Gerencia de Configuração, Puppet, Ansible e Chef uma Analise Compara...
(DevOps) Gerencia de Configuração, Puppet, Ansible e Chef uma Analise Compara...(DevOps) Gerencia de Configuração, Puppet, Ansible e Chef uma Analise Compara...
(DevOps) Gerencia de Configuração, Puppet, Ansible e Chef uma Analise Compara...Samuel Sampaio
 
Infraestrutura ágil com Puppet - CISL
Infraestrutura ágil com Puppet - CISLInfraestrutura ágil com Puppet - CISL
Infraestrutura ágil com Puppet - CISLJose Augusto Carvalho
 
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
 
Puppet – Torne Seu Datacenter áGil
Puppet – Torne Seu Datacenter áGilPuppet – Torne Seu Datacenter áGil
Puppet – Torne Seu Datacenter áGiljefesrodrigues
 
Gerenciamento de configuração com puppet
Gerenciamento de configuração com puppetGerenciamento de configuração com puppet
Gerenciamento de configuração com puppetElton Simões
 
Gerenciamento de Configurações - Puppet
Gerenciamento de Configurações - PuppetGerenciamento de Configurações - Puppet
Gerenciamento de Configurações - PuppetRoberto Scudeller
 
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...tdc-globalcode
 
Async/Await Pattern in C#
Async/Await Pattern in C#Async/Await Pattern in C#
Async/Await Pattern in C#Leandro Silva
 
Uma breve introdução ao Terraform
Uma breve introdução ao TerraformUma breve introdução ao Terraform
Uma breve introdução ao TerraformLeandro Silva
 
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 - NagiosEduardo Legatti
 
Lab python django - parte 2 - python + virtualenv
Lab python django - parte 2 - python + virtualenvLab python django - parte 2 - python + virtualenv
Lab python django - parte 2 - python + virtualenvPedro Fernandes Vieira
 
Vagrant vs docker? Melhor vagrant + docker
Vagrant vs docker? Melhor vagrant + dockerVagrant vs docker? Melhor vagrant + docker
Vagrant vs docker? Melhor vagrant + dockerWellington Silva
 
Um milhao de usuários simultâneos
Um milhao de usuários simultâneosUm milhao de usuários simultâneos
Um milhao de usuários simultâneosFernando Ike
 
TDC2017 | São Paulo - Trilha Programação Funcional How we figured out we had ...
TDC2017 | São Paulo - Trilha Programação Funcional How we figured out we had ...TDC2017 | São Paulo - Trilha Programação Funcional How we figured out we had ...
TDC2017 | São Paulo - Trilha Programação Funcional How we figured out we had ...tdc-globalcode
 
Opennebula Introdução
Opennebula IntroduçãoOpennebula Introdução
Opennebula IntroduçãoLuís Eduardo
 
Vagrant & Docker: carregue seus ambientes no bolso
Vagrant & Docker: carregue seus ambientes no bolsoVagrant & Docker: carregue seus ambientes no bolso
Vagrant & Docker: carregue seus ambientes no bolsoDiogo Lucas
 
Vagrant uma ferramenta realmente útil e versátil
Vagrant   uma ferramenta realmente útil e versátilVagrant   uma ferramenta realmente útil e versátil
Vagrant uma ferramenta realmente útil e versátilWanderlei Silva do Carmo
 

La actualidad más candente (20)

Ferramentas para infraestrutura ágil
Ferramentas para infraestrutura ágilFerramentas para infraestrutura ágil
Ferramentas para infraestrutura ágil
 
(DevOps) Gerencia de Configuração, Puppet, Ansible e Chef uma Analise Compara...
(DevOps) Gerencia de Configuração, Puppet, Ansible e Chef uma Analise Compara...(DevOps) Gerencia de Configuração, Puppet, Ansible e Chef uma Analise Compara...
(DevOps) Gerencia de Configuração, Puppet, Ansible e Chef uma Analise Compara...
 
Infraestrutura ágil com Puppet - CISL
Infraestrutura ágil com Puppet - CISLInfraestrutura ágil com Puppet - CISL
Infraestrutura ágil com Puppet - CISL
 
Automação de Ambientes com Puppet
Automação de Ambientes com Puppet Automação de Ambientes com Puppet
Automação de Ambientes com Puppet
 
Puppet – Torne Seu Datacenter áGil
Puppet – Torne Seu Datacenter áGilPuppet – Torne Seu Datacenter áGil
Puppet – Torne Seu Datacenter áGil
 
Gerenciamento de configuração com puppet
Gerenciamento de configuração com puppetGerenciamento de configuração com puppet
Gerenciamento de configuração com puppet
 
Gerenciamento de Configurações - Puppet
Gerenciamento de Configurações - PuppetGerenciamento de Configurações - Puppet
Gerenciamento de Configurações - Puppet
 
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...
 
Async/Await Pattern in C#
Async/Await Pattern in C#Async/Await Pattern in C#
Async/Await Pattern in C#
 
Uma breve introdução ao Terraform
Uma breve introdução ao TerraformUma breve introdução ao Terraform
Uma breve introdução ao Terraform
 
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
 
Lab python django - parte 2 - python + virtualenv
Lab python django - parte 2 - python + virtualenvLab python django - parte 2 - python + virtualenv
Lab python django - parte 2 - python + virtualenv
 
Vagrant vs docker? Melhor vagrant + docker
Vagrant vs docker? Melhor vagrant + dockerVagrant vs docker? Melhor vagrant + docker
Vagrant vs docker? Melhor vagrant + docker
 
Um milhao de usuários simultâneos
Um milhao de usuários simultâneosUm milhao de usuários simultâneos
Um milhao de usuários simultâneos
 
TDC2017 | São Paulo - Trilha Programação Funcional How we figured out we had ...
TDC2017 | São Paulo - Trilha Programação Funcional How we figured out we had ...TDC2017 | São Paulo - Trilha Programação Funcional How we figured out we had ...
TDC2017 | São Paulo - Trilha Programação Funcional How we figured out we had ...
 
Introdução à plataforma Docker
Introdução à plataforma DockerIntrodução à plataforma Docker
Introdução à plataforma Docker
 
Opennebula Introdução
Opennebula IntroduçãoOpennebula Introdução
Opennebula Introdução
 
Vagrant & Docker: carregue seus ambientes no bolso
Vagrant & Docker: carregue seus ambientes no bolsoVagrant & Docker: carregue seus ambientes no bolso
Vagrant & Docker: carregue seus ambientes no bolso
 
Iniciando com docker
Iniciando com dockerIniciando com docker
Iniciando com docker
 
Vagrant uma ferramenta realmente útil e versátil
Vagrant   uma ferramenta realmente útil e versátilVagrant   uma ferramenta realmente útil e versátil
Vagrant uma ferramenta realmente útil e versátil
 

Similar a Consegi 2011: Puppet

Administracao de sistemas_com_puppet
Administracao de sistemas_com_puppetAdministracao de sistemas_com_puppet
Administracao de sistemas_com_puppetRamon Mota
 
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 Puppetpericles_junior
 
Opennebula instalação
Opennebula instalaçãoOpennebula instalação
Opennebula instalaçãoLuís Eduardo
 
Memcached, Gearman e Sphinx
Memcached, Gearman e SphinxMemcached, Gearman e Sphinx
Memcached, Gearman e SphinxElton Minetto
 
Entre na fila. Processamento distribuído usando Gearman
Entre na fila. Processamento distribuído usando GearmanEntre na fila. Processamento distribuído usando Gearman
Entre na fila. Processamento distribuído usando GearmanElton Minetto
 
Alta Disponibilidade utilizando Pacemaker e DRBD
Alta Disponibilidade utilizando Pacemaker e DRBDAlta Disponibilidade utilizando Pacemaker e DRBD
Alta Disponibilidade utilizando Pacemaker e DRBDFrederico Madeira
 
Palestra ganeti puppet
Palestra ganeti puppetPalestra ganeti puppet
Palestra ganeti puppetDaniel Sobral
 
From Development to Production: Vagrant and Ansible, por Erika Heidi
From Development to Production: Vagrant and Ansible, por Erika HeidiFrom Development to Production: Vagrant and Ansible, por Erika Heidi
From Development to Production: Vagrant and Ansible, por Erika HeidiiMasters
 
Ferramentas para Automação de Datacenter - GTER 37
Ferramentas para Automação de Datacenter - GTER 37Ferramentas para Automação de Datacenter - GTER 37
Ferramentas para Automação de Datacenter - GTER 37Wilson Lopes
 
Ferramentas para Automação de Datacenter
Ferramentas para Automação de DatacenterFerramentas para Automação de Datacenter
Ferramentas para Automação de DatacenterWilson Lopes
 
Docker - Tutorial for beginners
Docker - Tutorial for beginnersDocker - Tutorial for beginners
Docker - Tutorial for beginnersRafael Chiavegatto
 
Aula PIT 3 - Ambientes
Aula PIT 3 - AmbientesAula PIT 3 - Ambientes
Aula PIT 3 - AmbientesDirceu Belém
 

Similar a Consegi 2011: Puppet (20)

Administracao de sistemas_com_puppet
Administracao de sistemas_com_puppetAdministracao de sistemas_com_puppet
Administracao de sistemas_com_puppet
 
Vagrant + Puppet
Vagrant + PuppetVagrant + Puppet
Vagrant + 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
 
Opennebula instalação
Opennebula instalaçãoOpennebula instalação
Opennebula instalação
 
Igor Oliveira - Puppet
Igor Oliveira - PuppetIgor Oliveira - Puppet
Igor Oliveira - Puppet
 
Memcached, Gearman e Sphinx
Memcached, Gearman e SphinxMemcached, Gearman e Sphinx
Memcached, Gearman e Sphinx
 
Entre na fila. Processamento distribuído usando Gearman
Entre na fila. Processamento distribuído usando GearmanEntre na fila. Processamento distribuído usando Gearman
Entre na fila. Processamento distribuído usando Gearman
 
Alta Disponibilidade utilizando Pacemaker e DRBD
Alta Disponibilidade utilizando Pacemaker e DRBDAlta Disponibilidade utilizando Pacemaker e DRBD
Alta Disponibilidade utilizando Pacemaker e DRBD
 
Node JS - Parte 1
Node JS - Parte 1Node JS - Parte 1
Node JS - Parte 1
 
GlusterFs
GlusterFsGlusterFs
GlusterFs
 
Palestra2009
Palestra2009Palestra2009
Palestra2009
 
Palestra ganeti puppet
Palestra ganeti puppetPalestra ganeti puppet
Palestra ganeti puppet
 
From Development to Production: Vagrant and Ansible, por Erika Heidi
From Development to Production: Vagrant and Ansible, por Erika HeidiFrom Development to Production: Vagrant and Ansible, por Erika Heidi
From Development to Production: Vagrant and Ansible, por Erika Heidi
 
Ferramentas para Automação de Datacenter - GTER 37
Ferramentas para Automação de Datacenter - GTER 37Ferramentas para Automação de Datacenter - GTER 37
Ferramentas para Automação de Datacenter - GTER 37
 
Ferramentas para Automação de Datacenter
Ferramentas para Automação de DatacenterFerramentas para Automação de Datacenter
Ferramentas para Automação de Datacenter
 
Docker - Tutorial for beginners
Docker - Tutorial for beginnersDocker - Tutorial for beginners
Docker - Tutorial for beginners
 
Palestra cbq
Palestra cbqPalestra cbq
Palestra cbq
 
Aula PIT 3 - Ambientes
Aula PIT 3 - AmbientesAula PIT 3 - Ambientes
Aula PIT 3 - Ambientes
 
Gentoo
GentooGentoo
Gentoo
 

Más de Jose Augusto Carvalho

Más de Jose Augusto Carvalho (9)

Cultura DevOps - Integração entre infra e devel
Cultura DevOps - Integração entre infra e develCultura DevOps - Integração entre infra e devel
Cultura DevOps - Integração entre infra e devel
 
Cultura DevOps e integração entre infra e devel
Cultura DevOps e integração entre infra e develCultura DevOps e integração entre infra e devel
Cultura DevOps e integração entre infra e devel
 
Conhecendo o Wordpress
Conhecendo o WordpressConhecendo o Wordpress
Conhecendo o Wordpress
 
Monitoração avançada com Zabbix 2
Monitoração avançada com Zabbix 2Monitoração avançada com Zabbix 2
Monitoração avançada com Zabbix 2
 
O que é DevOps afinal?
O que é DevOps afinal?O que é DevOps afinal?
O que é DevOps afinal?
 
Palestra Puppet Hora Livre
Palestra Puppet Hora LivrePalestra Puppet Hora Livre
Palestra Puppet Hora Livre
 
Oficina Puppet latinoware
Oficina Puppet latinowareOficina Puppet latinoware
Oficina Puppet latinoware
 
Puppet Cloud IaaS
Puppet Cloud IaaSPuppet Cloud IaaS
Puppet Cloud IaaS
 
Documentando de forma Ágil (usando dokuwiki)
Documentando de forma Ágil (usando dokuwiki)Documentando de forma Ágil (usando dokuwiki)
Documentando de forma Ágil (usando dokuwiki)
 

Consegi 2011: Puppet

  • 1. CONSEGI 2011 Assuma o controle de suas configurações Palestrantes: Daniel Sobral @dcsobral Guto Carvalho @gutocarvalho
  • 2. Já teve a sensação de estar perdendo o controle do seu ambiente? Foto tirada do site sysadminday.com por Frank Schicksal
  • 3. Você passa horas e horas configurando e reconfigurando sistemas de forma repetitiva e cansativa?
  • 4. Você gostaria de ter um ambiente padronizado e de fácil implementação de mudanças e configurações? Você sabe que o seu ambiente vai crescer e se preocupa em como mantê-lo?
  • 5. Já pensou em investir na gestão de suas configurações?
  • 6. Porque eu me interessaria por isto? ● Facilitar o trabalho de administração de servidores ● Padronizar as configurações utilizadas ● Possibilitar auditoria de configuração ● Centralizar a administração ● Acelerar a criação de novos servidores ● Acelerar a configuração de serviços
  • 7. Que tipo de configuração? ● Usuários ● Grupos ● Arquivos de configuração ● Pacotes instalados ● Serviços ativos ● Execução periódica de scripts
  • 8. Puppet & CIA ● Puppet (2005) ● Ruby, GPL ● AIX, BSD, HP-UX, Linux, MaxOS, Solaris, Windows(*) ● Wikipedia: ● Configuration_management ● Comparison_of_open_sourc e_configuration_manageme nt_software
  • 9. Onde estamos usando? EBC - Empresa Brasil de Comunicação Cerca de 160 máquinas virtuais e físicas sendo ● gerenciadas pelo Puppet. ●Administração compartilhada de 4 devops
  • 10. Puppet: Fácil Aprendizado Sintaxe Declarativa class rsyslog { package { 'rsyslog': ensure => present, } service { 'rsyslog': hasrestart => true, } file { '/etc/rsyslog.d/logserver01.conf': ensure => present, source => 'puppet:///files/rsyslog/rsyslog.d/logserver01.conf', notify => Service['rsyslog'], } }
  • 11. Puppet: Fácil Aprendizado Independente de Plataforma class editor { $vim = $operatingsystem ? { 'RedHat' => 'vim-enhanced', 'CentOS' => 'vim-enhanced', 'Fedora' => 'vim-enhanced', default => 'vim', } package { "$vim": ensure => present, alias => 'vim', # provider => yum, apt, ports? } } node “host01.domain.com.br” { include editor } node “host02.domain.com.br” { include editor }
  • 12. Puppet: Auto documentado class linux-server { # Include classes common to all linux servers include localmta include ntpdate include puppet::conf include ssh::server include sudoers include users include utils include zabbix-agent include editor include snmpd include rsyslog #... }
  • 13. Puppet: Controle de Versão e Rollback #git log commit 263b2239ccff746f345c448d723f4ff52d3f8c0f Author: Daniel Sobral <dcsobral@gmail.com> Date: Thu Mar 31 22:11:16 2011 -0300 Exclui a boletins das máquinas configuradas como mta satélite. Limita a configuração do exim4 às máquinas Ubuntu e Debian. commit 8fbed5a4b8095b7560941c598454d47f3b3dec7e Author: Daniel Sobral <dcsobral@gmail.com> Date: Thu Mar 31 22:08:22 2011 -0300 Classe debian-common adaptada para lidar com Ubuntu. Basicamente, força lidar com serviços no padrão Debian (Ubuntu suporta padrão FreeBSD também), e não mexe no source list (por hora). Sistemas Ubuntu também incluirão a classe debian-server. Verifica se o kernel é xen, e, se for, inclui o linux modules correspondente.
  • 14. Puppet: Altamente Flexível node "eleicoesconcurvm01" { include linux-server jboss::app { 'conselho': conf => 'default', pgdb => 'conselhoprod', # Altera pg_hba.conf } } node “eleicoesconcurvmbd01” { include linux-server pgdb { 'conselhoprod': # Gera XML para datasource password => '********', pgversion => '8.4', } }
  • 15. Puppet: Expansível ● Puppet define pgclient($ensure = present, $ip = $ipaddress) { @@line { "pgclient ${ip}": ● Classes ensure => $ensure, line => "${ip}/32n", ● Definições require => File['clientip'], tag => "pgclient_${title}", ● Templates (ERB) } } ● Ruby # augeasversion.rb Facter.add("augeasversion") do ● Fatos setcode do begin require 'augeas' ● Funções aug = Augeas::open('', '', Augeas::NO_LOAD & Augeas::NO_STDINC) ● Tipos aug.get('/augeas/version') || nil #... ● Provedores
  • 17. PUPPET: Funcionamento ● Tipos: ● Passos: ● Autônomo ● Cliente obtém plugins – Configuração local ● Cliente envia fatos ● Cliente/Servidor ● Servidor produz – HTTPS catálogo – Certificado de Cliente ● Cliente processa – Pull por default catálogo – Push opcional ● Cliente envia relatório
  • 18. Conceitos ● Resource user { 'ze': ensure => present, ● Type gid => 1000, – User, File, Package require => Group['ze'], } ● Name ● Attributes ● Meta Attributes ● Classes ● Definitions ● Modules
  • 19. Experimentando com a linha de Comando ● ralsh puppet:~# ralsh user bob user { 'bob': ensure => 'absent' } puppet:~# ralsh user bob ensure=present notice: /User[bob]/ensure: created user { 'bob': ensure => 'present' } puppet:~# ralsh user bob ensure=absent notice: /User[bob]/ensure: removed user { 'bob': ensure => 'absent' }
  • 20. Experimentando com a linha de Comando ● puppet describe dcs@puppet:~/exemplo$ puppet describe package -s package ======= descrição e funcionamento Parameters ---------- adminfile, allowcdrom, category, configfiles, description, ensure, flavor, instance, name, platform, responsefile, root, source, status, type, vendor Providers --------- aix, appdmg, apple, apt, aptitude, aptrpm, blastwave, darwinport, dpkg, fink, freebsd, gem, hpux, nim, openbsd, pkg, pkgdmg, portage, ports, portupgrade, rpm, rug, sun, sunfreeware, up2date, urpmi, yum, zypper
  • 21. Puppet Apply # puppet apply locale.pp package { 'locales': ensure => installed, } file { '/etc/default/locale': ensure => present, content => 'LANG=pt_BR.UTF-8', }
  • 22. Exemplo Sudoers ● Pacote sudoers ● Garantir que esteja instalado ● Arquivo /etc/sudoers ● Conteúdo comum a todas as máquinas ● Requer pacote sudoers ● Usuário root ● Grupo root ● Permissão 440
  • 23. Exemplo Sudoers - Código class sudoers { package { 'sudoers': ensure => installed, } file { '/etc/sudoers': source => 'puppet:///files/sudo/sudoers', require => Package['sudoers'], owner => 'root', group => 'root', mode => 440, } }
  • 24. Exemplo Ntpdate ● Pacote ntpdate ● Garantir que esteja instalado ● Crontab ● Usuário root ● Comando 'ntpdate ntp.dominio' ● Executar de hora em hora
  • 25. Exemplo Ntpdate - comandos class ntpdate { package { 'ntpdate': ensure => installed, } cron { 'sincroniza horario': user => 'root', command => '/usr/sbin/ntpdate ntp.dominio', minute => 0, } }
  • 26. Exemplo Locales ● Pacote locales - instalado ● Arquivo /etc/default/locale - conteúdo ● Arquivo /etc/locale.gen - conteúdo ● Executar /usr/sbin/locale.gen ● Sempre que locale.gen for alterado ● Só quando houver alteração ● Requer pacote locales e arquivo locale.gen
  • 27. Exemplo Locales - Código class locale { package { 'locales': ensure => installed, } file { '/etc/default/locale': ensure => present, content => 'LANG=pt_BR.UTF-8', require => Package['locales'], } file { '/etc/locale.gen': ensure => present, source => '/root/exemplo/locale.gen', require => Package['locales'], } exec { '/usr/sbin/locale-gen': subscribe => File['/etc/locale.gen'], refreshonly => true, require => [ Package['locales'], File['/etc/locale.gen'] ], } }
  • 28. Exemplo Configuração Padrão ● Aplicar sudoers ● Aplicar ntpdate ● Aplicar locale ● Todos os nós! ● Aplicar configuração padrão
  • 29. Exemplo Configuração Padrão - Código class padrao { include sudoers include ntpdate include locale } node default { include padrao }
  • 30. O que faço com tudo isso? Afinal, onde toda essa flexibilidade e agilidade pode nos levar? Quais são os ganhos para uma equipe devops e para o cliente?
  • 31. Situação Anterior Máquina Física – Debian Lenny ● Tempo de criação de maquina física – 40 minutos (CD) ● Tempo de configuração/update OS* - 40 minutos ● Tempo de instalação e configuração Apache2, PHP5, MYSQL – 2 a 4 horas** * Levando em conta configurações da rede, locale, ntpdate, backup, monitoração, criação de usuários, instalação de pacotes básicos do sysadmin. ** Levando em conta hardening do os, tuning do os, configuração e tuning do apache2, php5 e mysql5.
  • 32. Situação Atual Máquina Virtual (GANETI+XEN) – Debian Lenny ● Tempo de criação de maquina virtual - 2 minutos ● Tempo de configuração/update OS* usando Hooks Ganeti – 2 a 4 minutos ● Tempo de instalação e configuração Apache2, PHP5, MYSQL – 2 a 4 minutos** ● * Levando em conta configurações da rede, locale, ntpdate, backup, monitoração, criação de usuários, instalação de pacotes básicos do sysadmin. ** Levando em conta hardening, tuning os, apache2, php5, mysql, considerando ter as classes prontas
  • 33. Puppet: Problemas ● Mensagens de erro ruins ● Servidor default nao segura mais de 20 máquinas ● Com Apache/Passenger, já temos +160 servidores ● Não distribui arquivos grandes ● Usar pacotes ou execução de comandos como wget ● Grande investimento de tempo para ir do nível médio ao de expert
  • 34. Conclusão O Puppet é uma ferramenta essencial para gerenciar e distribuir configurações, ele é um batalhão de devops trabalhando para você, sua equipe e sua empresa.
  • 36. Contato, Dúvidas, Perguntas Guto Carvalho Daniel Sobral gutocarvalho@gmail.com dcsobral@gmail.com @gutocarvalho @dcsobral http://gutocarvalho.net http://dcsobral.blogspot.com http://github.com/gutocarvalho Http://github.com/dcsobral Palestras de hoje disponíveis em nossos sites. Palestra sob licença Creative Commons - Atribuição