of 36 /36
CONSEGI 2011 Assuma o controle de suas configurações Palestrantes: Daniel Sobral @dcsobral Guto Carvalho @gutocarvalho

Consegi 2011: Puppet

Embed Size (px)

DESCRIPTION

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

Text of Consegi 2011: Puppet

  • 1. CONSEGI 2011Assuma o controle de suas configuraesPalestrantes:Daniel Sobral @dcsobral Guto Carvalho @gutocarvalho

2. J teve a sensao de estarperdendo o controle do seu ambiente? Foto tirada do site sysadminday.com por Frank Schicksal 3. Voc passa horas e horas configurando ereconfigurando sistemas de forma repetitiva e cansativa? 4. Voc gostaria de ter umambiente padronizado e defcilimplementaodemudanas e configuraes?Voc sabe que o seu ambientevai crescer e se preocupa emcomo mant-lo? 5. J pensou em investir na gesto de suas configuraes? 6. Porque eu me interessaria por isto? Facilitar o trabalho de administrao deservidores Padronizar as configuraes utilizadas Possibilitar auditoria de configurao Centralizar a administrao Acelerar a criao de novos servidores Acelerar a configurao de servios 7. Que tipo de configurao? Usurios Grupos Arquivos de configurao Pacotes instalados Servios ativos Execuo peridica de scripts 8. Puppet & CIA Puppet (2005) Ruby, GPL AIX, BSD, HP-UX,Linux, MaxOS,Solaris, Windows(*) Wikipedia: Configuration_management Comparison_of_open_source_configuration_management_software 9. Onde estamos usando?EBC - Empresa Brasil de ComunicaoCerca de 160 mquinas virtuais e fsicas sendogerenciadas pelo Puppet. Administrao compartilhada de 4 devops 10. Puppet: Fcil 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],}} 11. Puppet: Fcil 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} 12. Puppet: Auto documentadoclass linux-server {# Include classes common to all linux serversinclude localmtainclude ntpdateinclude puppet::confinclude ssh::serverinclude sudoersinclude usersinclude utilsinclude zabbix-agentinclude editorinclude snmpdinclude rsyslog#...} 13. Puppet: Controle de Verso e Rollback#git logcommit 263b2239ccff746f345c448d723f4ff52d3f8c0fAuthor: Daniel Sobral Date:Thu Mar 31 22:11:16 2011 -0300 Exclui a boletins das mquinas configuradas como mta satlite. Limita a configurao do exim4 s mquinas Ubuntu e Debian.commit 8fbed5a4b8095b7560941c598454d47f3b3dec7eAuthor: Daniel Sobral Date: Thu Mar 31 22:08:22 2011 -0300 Classe debian-common adaptada para lidar com Ubuntu. Basicamente, fora lidar com servios no padro Debian (Ubuntu suporta padro FreeBSD tambm), e no mexe no source list (por hora). Sistemas Ubuntu tambm incluiro a classe debian-server. Verifica se o kernel xen, e, se for, inclui o linux modules correspondente. 14. Puppet: Altamente Flexvelnode "eleicoesconcurvm01" {include linux-serverjboss::app { conselho:conf => default,pgdb => conselhoprod, # Altera pg_hba.conf}}node eleicoesconcurvmbd01 {include linux-serverpgdb { conselhoprod:# Gera XML para datasourcepassword => ********,pgversion => 8.4,}} 15. Puppet: Expansvel Puppet define pgclient($ensure = present, $ip = $ipaddress) { @@line { "pgclient ${ip}": Classesensure => $ensure, line=> "${ip}/32n", Definies require => File[clientip], tag => "pgclient_${title}", Templates (ERB)} } Ruby # augeasversion.rb Facter.add("augeasversion") do Fatossetcode dobegin require augeas Funesaug = Augeas::open(, , Augeas::NO_LOAD & Augeas::NO_STDINC) Tiposaug.get(/augeas/version) || nil #... Provedores 16. Mo na Massa 17. PUPPET: Funcionamento Tipos: Passos: Autnomo Cliente obtm plugins Configurao local Cliente envia fatos Cliente/Servidor Servidor produz HTTPScatlogo Certificado de Cliente Cliente processa Pull por default catlogo Push opcional Cliente envia relatrio 18. Conceitos Resourceuser { ze:ensure => present, Typegid=> 1000, User, File, Package require => Group[ze],} Name Attributes Meta Attributes Classes Definitions Modules 19. Experimentando com a linha de Comando ralshpuppet:~# ralsh user bobuser { bob:ensure => absent}puppet:~# ralsh user bob ensure=presentnotice: /User[bob]/ensure: createduser { bob:ensure => present}puppet:~# ralsh user bob ensure=absentnotice: /User[bob]/ensure: removeduser { bob:ensure => absent} 20. Experimentando com a linha deComando puppet [email protected]:~/exemplo$ puppet describe package -spackage=======descrio e funcionamentoParameters----------adminfile, allowcdrom, category, configfiles, description, ensure,flavor, instance, name, platform, responsefile, root, source, status,type, vendorProviders---------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.pppackage { 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 Contedo comum a todas as mquinas Requer pacote sudoers Usurio root Grupo root Permisso 440 23. Exemplo Sudoers - Cdigoclass 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 Usurio root Comando ntpdate ntp.dominio Executar de hora em hora 25. Exemplo Ntpdate - comandosclass 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 - contedo Arquivo /etc/locale.gen - contedo Executar /usr/sbin/locale.gen Sempre que locale.gen for alterado S quando houver alterao Requer pacote locales e arquivo locale.gen 27. Exemplo Locales - Cdigoclass 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 Configurao Padro Aplicar sudoers Aplicar ntpdate Aplicar locale Todos os ns! Aplicar configurao padro 29. Exemplo Configurao Padro - Cdigoclass padrao {include sudoersinclude ntpdateinclude locale}node default {include padrao} 30. O que fao com tudo isso? Afinal, onde toda essa flexibilidade e agilidade pode nos levar?Quais so os ganhos para uma equipe devops e para o cliente? 31. Situao AnteriorMquina Fsica Debian Lenny Tempo de criao de maquina fsica 40 minutos (CD) Tempo de configurao/update OS* - 40 minutos Tempo de instalao e configurao Apache2, PHP5, MYSQL 2 a 4 horas*** Levando em conta configuraes da rede, locale, ntpdate, backup, monitorao,criao de usurios, instalao de pacotes bsicos do sysadmin.** Levando em conta hardening do os, tuning do os, configurao e tuning do apache2,php5 e mysql5. 32. Situao AtualMquina Virtual (GANETI+XEN) Debian Lenny Tempo de criao de maquina virtual - 2 minutos Tempo de configurao/update OS* usando Hooks Ganeti 2 a 4 minutos Tempo de instalao e configurao Apache2, PHP5, MYSQL 2 a 4 minutos** * Levando em conta configuraes da rede, locale, ntpdate, backup, monitorao,criao de usurios, instalao de pacotes bsicos do sysadmin.** Levando em conta hardening, tuning os, apache2, php5, mysql, considerando ter asclasses prontas 33. Puppet: Problemas Mensagens de erro ruins Servidor default nao segura mais de 20mquinas Com Apache/Passenger, j temos +160 servidores No distribui arquivos grandes Usar pacotes ou execuo de comandos comowget Grande investimento de tempo para ir do nvelmdio ao de expert 34. ConclusoO Puppet uma ferramenta essencial para gerenciar e distribuir configuraes, ele umbatalho de devops trabalhando para voc, suaequipe e sua empresa. 35. Informaes do projetoSite/BlogHttp://www.puppetlabs.comHttp://www.puppetlabs.com/blog/[email protected]://www.github.com/puppelabsGoogle GroupsPuppet-camp,puppet-users,puppet-devIRCIrc.freenode.org#puppet 36. Contato, Dvidas, PerguntasGuto CarvalhoDaniel [email protected] [email protected]@[email protected]://gutocarvalho.nethttp://dcsobral.blogspot.comhttp://github.com/gutocarvalho Http://github.com/dcsobralPalestras de hoje disponveis em nossos sites. Palestra sob licena Creative Commons - Atribuio