O slideshow foi denunciado.
Seu SlideShare está sendo baixado. ×

Consegi 2011: Puppet

Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Próximos SlideShares
Puppet webcast 4linux
Puppet webcast 4linux
Carregando em…3
×

Confira estes a seguir

1 de 36 Anúncio

Mais Conteúdo rRelacionado

Diapositivos para si (20)

Semelhante a Consegi 2011: Puppet (20)

Anúncio

Consegi 2011: Puppet

  1. 1. CONSEGI 2011 Assuma o controle de suas configurações Palestrantes: Daniel Sobral @dcsobral Guto Carvalho @gutocarvalho
  2. 2. Já teve a sensação de estar perdendo o controle do seu ambiente? Foto tirada do site sysadminday.com por Frank Schicksal
  3. 3. Você passa horas e horas configurando e reconfigurando sistemas de forma repetitiva e cansativa?
  4. 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. 5. Já pensou em investir na gestão de suas configurações?
  6. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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
  16. 16. Mão na Massa
  17. 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. 18. Conceitos ● Resource user { 'ze': ensure => present, ● Type gid => 1000, – User, File, Package require => Group['ze'], } ● Name ● Attributes ● Meta Attributes ● Classes ● Definitions ● Modules
  19. 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. 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. 21. Puppet Apply # puppet apply locale.pp package { 'locales': ensure => installed, } file { '/etc/default/locale': ensure => present, content => 'LANG=pt_BR.UTF-8', }
  22. 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. 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. 24. Exemplo Ntpdate ● Pacote ntpdate ● Garantir que esteja instalado ● Crontab ● Usuário root ● Comando 'ntpdate ntp.dominio' ● Executar de hora em hora
  25. 25. Exemplo Ntpdate - comandos class ntpdate { package { 'ntpdate': ensure => installed, } cron { 'sincroniza horario': user => 'root', command => '/usr/sbin/ntpdate ntp.dominio', minute => 0, } }
  26. 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. 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. 28. Exemplo Configuração Padrão ● Aplicar sudoers ● Aplicar ntpdate ● Aplicar locale ● Todos os nós! ● Aplicar configuração padrão
  29. 29. Exemplo Configuração Padrão - Código class padrao { include sudoers include ntpdate include locale } node default { include padrao }
  30. 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. 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. 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. 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. 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.
  35. 35. 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
  36. 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

×