• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Consegi 2011: Puppet
 

Consegi 2011: Puppet

on

  • 2,643 views

Palestra que aborda a gestão de configurações via puppet, apresentada por @gutocarvalho e @dcosbral

Palestra que aborda a gestão de configurações via puppet, apresentada por @gutocarvalho e @dcosbral

Statistics

Views

Total Views
2,643
Views on SlideShare
1,972
Embed Views
671

Actions

Likes
1
Downloads
45
Comments
0

5 Embeds 671

http://gutocarvalho.net 610
http://planeta.gnulinuxbrasil.org 58
http://feeds.feedburner.com 1
http://webcache.googleusercontent.com 1
http://www.linkedin.com 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Consegi 2011: Puppet Consegi 2011: Puppet Presentation Transcript

    • CONSEGI 2011Assuma o controle de suas configurações Palestrantes: Daniel Sobral @dcsobral Guto Carvalho @gutocarvalho
    • Já teve a sensação de estarperdendo o controle do seu ambiente? Foto tirada do site sysadminday.com por Frank Schicksal
    • Você passa horas e horas configurando ereconfigurando sistemas de forma repetitiva e cansativa?
    • Você gostaria de ter umambiente padronizado e defácil implementação demudanças e configurações?Você sabe que o seu ambientevai crescer e se preocupa emcomo 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çãoCerca de 160 máquinas virtuais e físicas sendo● gerenciadas pelo Puppet. ●Administração compartilhada de 4 devops
    • Puppet: Fácil Aprendizado Sintaxe Declarativaclass 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 Plataformaclass 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 documentadoclass 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 logcommit 263b2239ccff746f345c448d723f4ff52d3f8c0fAuthor: 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 8fbed5a4b8095b7560941c598454d47f3b3dec7eAuthor: 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ívelnode "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.pppackage { 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ódigoclass 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 - comandosclass 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ódigoclass 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ódigoclass 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 AnteriorMá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 AtualMá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 asclasses 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 é umbatalhão de devops trabalhando para você, sua equipe e sua empresa.
    • Informações do projetoSite/BlogHttp://www.puppetlabs.comHttp://www.puppetlabs.com/blog/Twitter@puppetlabsHttp://www.github.com/puppelabsGoogle GroupsPuppet-camp,puppet-users,puppet-devIRCIrc.freenode.org#puppet
    • Contato, Dúvidas, PerguntasGuto Carvalho Daniel Sobralgutocarvalho@gmail.com dcsobral@gmail.com@gutocarvalho @dcsobralhttp://gutocarvalho.net http://dcsobral.blogspot.comhttp://github.com/gutocarvalho Http://github.com/dcsobral Palestras de hoje disponíveis em nossos sites. Palestra sob licença Creative Commons - Atribuição