Download pdf - Consegi 2011: Puppet

Transcript
Page 1: Consegi 2011: Puppet

CONSEGI 2011

Assuma o controle de suas configurações

Palestrantes:Daniel Sobral @dcsobral

Guto Carvalho @gutocarvalho

Page 2: Consegi 2011: Puppet

Já teve a sensação de estar perdendo o controle do seu

ambiente?

Foto tirada do site sysadminday.com por Frank Schicksal

Page 3: Consegi 2011: Puppet

Você passa horas e horas configurando e reconfigurando sistemas de forma repetitiva e

cansativa?

Page 4: Consegi 2011: Puppet

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?

Page 5: Consegi 2011: Puppet

Já pensou em investir na gestão de suas configurações?

Page 6: Consegi 2011: Puppet

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

Page 7: Consegi 2011: Puppet

Que tipo de configuração?

● Usuários● Grupos● Arquivos de configuração● Pacotes instalados● Serviços ativos● Execução periódica de scripts

Page 8: Consegi 2011: Puppet

Puppet & CIA

● Puppet (2005)● Ruby, GPL● AIX, BSD, HP-UX,

Linux, MaxOS, Solaris, Windows(*)

● Wikipedia:● Configuration_management

● Comparison_of_open_source_configuration_management_software

Page 9: Consegi 2011: Puppet

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

Page 10: Consegi 2011: Puppet

Puppet: Fácil AprendizadoSintaxe 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'], } }

Page 11: Consegi 2011: Puppet

Puppet: Fácil AprendizadoIndependente 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}

Page 12: Consegi 2011: Puppet

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

#...}

Page 13: Consegi 2011: Puppet

Puppet: Controle de Versão e Rollback

#git logcommit 263b2239ccff746f345c448d723f4ff52d3f8c0f Author: Daniel Sobral <[email protected]> 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 <[email protected]> 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.

Page 14: Consegi 2011: Puppet

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', } }

Page 15: Consegi 2011: Puppet

Puppet: Expansível

● Puppet● Classes● Definições

● Templates (ERB)● Ruby

● Fatos● Funções● Tipos● Provedores

define pgclient($ensure = present, $ip =$ipaddress) { @@line { "pgclient ${ip}": ensure => $ensure, line => "${ip}/32\n", require => File['clientip'], tag => "pgclient_${title}", } }

# augeasversion.rb Facter.add("augeasversion") do setcode do begin require 'augeas' aug = Augeas::open('', '', Augeas::NO_LOAD & Augeas::NO_STDINC) aug.get('/augeas/version') || nil #...

Page 16: Consegi 2011: Puppet

Mão na Massa

Page 17: Consegi 2011: Puppet

PUPPET: Funcionamento

● Tipos:● Autônomo

– Configuração local● Cliente/Servidor

– HTTPS– Certificado de Cliente– Pull por default– Push opcional

● Passos:● Cliente obtém plugins● Cliente envia fatos● Servidor produz

catálogo● Cliente processa

catálogo● Cliente envia relatório

Page 18: Consegi 2011: Puppet

Conceitos

● Resource● Type

– User, File, Package● Name● Attributes● Meta Attributes

● Classes● Definitions● Modules

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

Page 19: Consegi 2011: Puppet

Experimentando com a linha de Comando

● ralsh

puppet:~# 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'}

Page 20: Consegi 2011: Puppet

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

Page 21: Consegi 2011: Puppet

Puppet Apply

# puppet apply locale.pp

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

file { '/etc/default/locale': ensure => present, content => 'LANG=pt_BR.UTF-8',}

Page 22: Consegi 2011: Puppet

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

Page 23: Consegi 2011: Puppet

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, }}

Page 24: Consegi 2011: Puppet

Exemplo Ntpdate

● Pacote ntpdate● Garantir que esteja instalado

● Crontab● Usuário root● Comando 'ntpdate ntp.dominio'● Executar de hora em hora

Page 25: Consegi 2011: Puppet

Exemplo Ntpdate - comandos

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

cron { 'sincroniza horario': user => 'root', command => '/usr/sbin/ntpdate ntp.dominio', minute => 0, }}

Page 26: Consegi 2011: Puppet

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

Page 27: Consegi 2011: Puppet

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'] ], }}

Page 28: Consegi 2011: Puppet

Exemplo Configuração Padrão

● Aplicar sudoers● Aplicar ntpdate● Aplicar locale

● Todos os nós!● Aplicar configuração padrão

Page 29: Consegi 2011: Puppet

Exemplo Configuração Padrão - Código

class padrao { include sudoers include ntpdate include locale}

node default { include padrao}

Page 30: Consegi 2011: Puppet

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?

Page 31: Consegi 2011: Puppet

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.

Page 32: Consegi 2011: Puppet

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

Page 33: Consegi 2011: Puppet

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

Page 34: Consegi 2011: Puppet

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.

Page 35: Consegi 2011: Puppet

Informações do projeto

Site/BlogHttp://www.puppetlabs.comHttp://www.puppetlabs.com/blog/

Twitter@puppetlabs

Http://www.github.com/puppelabs

Google GroupsPuppet-camp, puppet-users, puppet-dev

IRCIrc.freenode.org #puppet

Page 36: Consegi 2011: Puppet

Contato, Dúvidas, Perguntas

Guto [email protected]

@gutocarvalho

http://gutocarvalho.net

http://github.com/gutocarvalho

Daniel [email protected]

@dcsobral

http://dcsobral.blogspot.com

Http://github.com/dcsobral

Palestras de hoje disponíveis em nossos sites.

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