Área, dia/mês/ano
https://puppetlabs.com
https://github.com/puppetlabs
Área, dia/mês/ano
Administração Manual
• Não existe um padrão
• Não existem procedimentos
• Cada administrador faz do seu jeito
• Tarefas repetitivas
- Criação de usuários
- Elaboração de scripts
- Configuração de serviços
- Configurações de monitoramento
- Criação de imagens de ambientes
- Configuração do sistema operacional
- Instalação, atualização e remoção de pacotes
2
Área, dia/mês/ano
O que é o Puppet?
O que está acontecendo?
ESTADO DESEJADO
sapato => present
Área, dia/mês/ano
Por que usar o Puppet?
• Economia de tempo
• Evita erros humanos
• Documenta o setup de um servidor
• Fim dos longos e estressantes deploys em servidores
• O puppet tem por padrão certificado de autenticação SSL
• Facilita o trabalho dos administradores dos servidores
• Padroniza as configurações utilizadas possibilitando auditoria
dessas configurações
• Centraliza a adminstração
• Acelera a criação e a configuração dos servidores
4
Área, dia/mês/ano
Por que usar o Puppet?
• Roda em todos SO‟s comuns : Linux, Mac, Windows...
• Vantagens em servidores idênticos ou similares.
• Controle de versão
• É utilizado até quando se tem um único servidor
• Uma outra utilização é quando temos que construir uma
workstation de desenvolvimento de um modo mais
consistente, conseguimos algo praticamente idêntico do
ambiente de produção para cada desenvolvedor.
5
Área, dia/mês/ano
Por que usar o Puppet?
Alternativas:
• CFEngine
- O mais antigo
- Rápido
- Consome poucos recursos
• Chef
- Configuração escrita em Ruby
- Muito Flexível
• Salt Stack
- Configuração via YAML (muito simples, intuitivo)
• Ansible
- Não requer agentes rodando nos nós
6
Área, dia/mês/ano
Por que usar o Puppet?
Vantagens do Puppet
• Linguagem declarativa
- Menos Bugs de configuração
- Mais configurações do que programação
• Configurações idempotentes
• Completamente extensível
- Todos elementos primitivos do Puppet podem
ser estendidos pelo usuário em Ruby.
7
Área, dia/mês/ano
E se não utilizarmos o Puppet?
• Perde-se tempo, dinheiro e energia.
• Comete-se mais erros, provoca downtime, fere sua
reputação.
• No caso de um problema em um servidor,
reconstrui-lo ou pior, reconstruir vários seria uma
grande tarefa resultando em mais downtime, erros,
etc.
8
Área, dia/mês/ano
Puppet is serious business!
Algumas das empresas que utilizam Puppet:
9
Área, dia/mês/ano
Puppet is serious business!
Por trás do Puppet encontramos investidores como:
1
0
Área, dia/mês/ano
Puppet is serious business!
• Ferramenta Open – Apache License
• Empresa oferece suporte e uma versão Enterprise
• Feita por um SysAdmin para SysAdmin
• Desenhada com base em DevOps
• Funciona em modo cliente/servidor e autônomo
1
1
Área, dia/mês/ano
Resumindo
• Puppet é um Software que permite automação.
Configuramos um servidor central e os agents
sincronizam com ele.
• É um sistema descritivo. Decidimos se um arquivo
deve existir, definimos permissões, conteúdo,
decidimos se um pacote de software deve ser
instalado, e a cada execução ele irá garantir que
tudo fique do jeito que foi especificado
• Podemos fazer deploy da App e ainda ter o controle
de versão!
1
2
Área, dia/mês/ano
Funcionamento do modo
Cliente/Servidor do Puppet
• O agente gera um certificado digital
• O Puppet master precisa autorizar esse certificado
• Sem a autorização o agente não comunica com o
master
• Toda a comunicação é segura!
1
3
Área, dia/mês/ano
Funcionamento do modo
Cliente/Servidor do Puppet
1
4
Puppet Master
Puppet Agent
8139
Server
8140
Client
Área, dia/mês/ano
Funcionamento do modo
Cliente/Servidor do Puppet
1
5
Área, dia/mês/ano
Puppet Resources
Área, dia/mês/ano
Resources
Recurso é a unidade fundamental da modelagem
Cada recurso define um aspecto do sistema
São como Legos
Recursos são
combinados para
que o sistema
chegue ao estado
desejado
A ordem não importa!
Área, dia/mês/ano
Resources
Os recursos são escritos em uma linguagem de modelagem declarativa
Exemplo:
Sintaxe do recurso:
• Tipo do recurso
• Bloco ( colchetes )
• Título do recurso separado
do corpo por „:‟
• Corpo consiste em pares de
atributo e valor
• Tipo e título devem ser únicos
Área, dia/mês/ano
Resources
Recursos similares podem ser agrupados em Tipos
A descrição de um recurso é abstraída de sua implementação, o que permite
uma descrição ser válida para qualquer tipo de sistema. Isto devido a sua camada
De abstração de recursos (RAL)
Área, dia/mês/ano
Resources
RAL :
Cada recurso possui
Um ou mais provedores
Provedores fazem a
ligação entre os tipos de
recurso e o SO correto.
Área, dia/mês/ano
Resources
Área, dia/mês/ano
Resources Types
Exemplo de abordagem de implementação:
Pacotes
* Suporta 23 tipos de provedores de pacote
* Declaramos se o pacote está presente ou ausente
* Declaramos que o pacote sempre deverá estar em sua última
versão
Serviço
* Declaramos se o serviço está sempre rodando ou não
* Declaramos se o serviço será carregado no boot
* Declaramos se o serviço depende de um pacote ou arquivo
Arquivo
* Especificamos permissões e donos
* Declaramos diretórios e links simbólicos
Área, dia/mês/ano
Resources Types
Exemplo instalação, configuração e inicialização do Apache
Como seria no CentOs
# yum install httpd
# chkconfig httpd on
# cp ~/httpd.conf /etc/httpd/conf/
# service httpd start
Área, dia/mês/ano
Resources Types
Exemplo instalação, configuração e inicialização do Apache
Como seria no Debian
# aptitude install apache2
# insserv apache2
# cp ~/httpd.conf /etc/apache2/
# invoke-rc.d apache2 start
Área, dia/mês/ano
Resources Types
No Puppet com apenas uma abordagem
package { 'apache2':
ensure => present,
}
service { 'apache2':
ensure => running,
enable => true,
}
file { '/etc/apache2/httpd.conf':
ensure => present,
mode => „0644‟,
owner => „root‟,
group => „root‟,
ensure => “puppet:///files/apache/httpd.conf”,
}
Área, dia/mês/ano
Resources Types
Exemplo instalação, configuração do editor, ( independe do SO )
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 “jbossas01hom.network.ctbc” {
include editor
}
node “jbossas02hom.network.ctbc” {
include editor
}
Área, dia/mês/ano
Resources Types
Exemplo classe base – padronizando nós
class sudoers {
package { 'sudoers':
ensure => installed,
}
file { '/etc/sudoers':
source => 'puppet:///files/sudo/sudoers',
require => Package['sudoers'],
owner => 'root',
group => 'root',
mode => 440,
}
}
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
Área, dia/mês/ano
Resources Types
Exemplo classe base
class ntpdate {
package { 'ntpdate':
ensure => installed,
}
cron { 'sincroniza horario':
user => 'root',
command => '/usr/sbin/ntpdate ntp.dominio',
minute => 0,
}
}
Pacote ntpdate
• Garantir que esteja
instalado
cron
• Usuário root
• Comando 'ntpdate
ntp.dominio'
• Executar de hora
em hora
Área, dia/mês/ano
Resources Types
Exemplo classe base
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'] ],
}
}
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
Área, dia/mês/ano
Resources Types
Exemplo classe base
class padrao {
include sudoers
include ntpdate
include locale
}
node default{
include padrao
}
Aplicar sudoers
Aplicar ntpdate
Aplicar locale
Todos os nós!
• Aplicar configuração padrão
Área, dia/mês/ano
Resources Types
Exemplo alterar dados em linha de comando
puppet:~# puppet resourse user paulohac
user { paulohac':
ensure => 'absent'
}
puppet:~# puppet resourse user paulohac ensure=present
notice: /User[paulohac]/ensure: created
user { „paulohac':
ensure => 'present'
}
puppet:~# puppet resourse user paulohac ensure=absent
notice: /User[paulohac]/ensure: removed
user { „paulohac':
ensure => 'absent'
}
Área, dia/mês/ano
Verificando mudanças
Puppet Dashboard
Área, dia/mês/ano
Puppet Dashboard
Área, dia/mês/ano
Para a próxima semana
Área, dia/mês/ano
Procedimento manual de instalação
do Agente EM12c em um JBoss
• Acessar servidor via SSH
• Criar diretório para o agente e as bibliotecas
• Deployar .jar de monitoramento
• Copiar vários jars para um diretório de bibliotecas para que o
EM possa reconhecer.
• Modificar a permissão para jboss
• (Re)iniciar servidor
• Talvez remover agente antigo ( Nagios )
3
5
Área, dia/mês/ano
Procedimento manual de instalação
do Agente EM12c em um JBoss
Em números:
200 SERVIDORES
20 MINUTOS POR SERVIDOR
4000 MINUTOS OU 67 HORAS
8 DIAS TRABALHANDO
• Sem documentação
• Sem rastreamento de mudanças
3
6
Área, dia/mês/ano
Resultado concreto
& Recomendações
Área, dia/mês/ano
Resultados
• Documentação Instantânea
• Processos bem definidos
• Ambiente Padronizado
• Restore e backup de mudanças
• Tarefas Automatizadas
Área, dia/mês/ano
Recomendações
• Usar o puppet para executar e controlar mudanças na infraestrutura
• Parar de administrar e começar a desenvolver a infraestrutura
• Nova demanda? Já executar utilizando o Puppet, escrevendo classes
e módulos para executar apenas uma vez e reaproveitar o código
depois.
• Versionar as configurações (svn) criadas no Puppet.
• Escreves módulos e classes da forma mais flexível possível.
• Utilizar módulos prontos do GitHub e PuppetForge.
Área, dia/mês/ano
Puppet web
http://www.puppetlabs.com
http://www.puppetlabs.com/blog/
Twitter
@puppetlabs
@puppetmasterd
IRC
irc.freenode.org
#puppet
#puppet-br

Puppet overview

  • 1.
  • 2.
    Área, dia/mês/ano Administração Manual •Não existe um padrão • Não existem procedimentos • Cada administrador faz do seu jeito • Tarefas repetitivas - Criação de usuários - Elaboração de scripts - Configuração de serviços - Configurações de monitoramento - Criação de imagens de ambientes - Configuração do sistema operacional - Instalação, atualização e remoção de pacotes 2
  • 3.
    Área, dia/mês/ano O queé o Puppet? O que está acontecendo? ESTADO DESEJADO sapato => present
  • 4.
    Área, dia/mês/ano Por queusar o Puppet? • Economia de tempo • Evita erros humanos • Documenta o setup de um servidor • Fim dos longos e estressantes deploys em servidores • O puppet tem por padrão certificado de autenticação SSL • Facilita o trabalho dos administradores dos servidores • Padroniza as configurações utilizadas possibilitando auditoria dessas configurações • Centraliza a adminstração • Acelera a criação e a configuração dos servidores 4
  • 5.
    Área, dia/mês/ano Por queusar o Puppet? • Roda em todos SO‟s comuns : Linux, Mac, Windows... • Vantagens em servidores idênticos ou similares. • Controle de versão • É utilizado até quando se tem um único servidor • Uma outra utilização é quando temos que construir uma workstation de desenvolvimento de um modo mais consistente, conseguimos algo praticamente idêntico do ambiente de produção para cada desenvolvedor. 5
  • 6.
    Área, dia/mês/ano Por queusar o Puppet? Alternativas: • CFEngine - O mais antigo - Rápido - Consome poucos recursos • Chef - Configuração escrita em Ruby - Muito Flexível • Salt Stack - Configuração via YAML (muito simples, intuitivo) • Ansible - Não requer agentes rodando nos nós 6
  • 7.
    Área, dia/mês/ano Por queusar o Puppet? Vantagens do Puppet • Linguagem declarativa - Menos Bugs de configuração - Mais configurações do que programação • Configurações idempotentes • Completamente extensível - Todos elementos primitivos do Puppet podem ser estendidos pelo usuário em Ruby. 7
  • 8.
    Área, dia/mês/ano E senão utilizarmos o Puppet? • Perde-se tempo, dinheiro e energia. • Comete-se mais erros, provoca downtime, fere sua reputação. • No caso de um problema em um servidor, reconstrui-lo ou pior, reconstruir vários seria uma grande tarefa resultando em mais downtime, erros, etc. 8
  • 9.
    Área, dia/mês/ano Puppet isserious business! Algumas das empresas que utilizam Puppet: 9
  • 10.
    Área, dia/mês/ano Puppet isserious business! Por trás do Puppet encontramos investidores como: 1 0
  • 11.
    Área, dia/mês/ano Puppet isserious business! • Ferramenta Open – Apache License • Empresa oferece suporte e uma versão Enterprise • Feita por um SysAdmin para SysAdmin • Desenhada com base em DevOps • Funciona em modo cliente/servidor e autônomo 1 1
  • 12.
    Área, dia/mês/ano Resumindo • Puppeté um Software que permite automação. Configuramos um servidor central e os agents sincronizam com ele. • É um sistema descritivo. Decidimos se um arquivo deve existir, definimos permissões, conteúdo, decidimos se um pacote de software deve ser instalado, e a cada execução ele irá garantir que tudo fique do jeito que foi especificado • Podemos fazer deploy da App e ainda ter o controle de versão! 1 2
  • 13.
    Área, dia/mês/ano Funcionamento domodo Cliente/Servidor do Puppet • O agente gera um certificado digital • O Puppet master precisa autorizar esse certificado • Sem a autorização o agente não comunica com o master • Toda a comunicação é segura! 1 3
  • 14.
    Área, dia/mês/ano Funcionamento domodo Cliente/Servidor do Puppet 1 4 Puppet Master Puppet Agent 8139 Server 8140 Client
  • 15.
    Área, dia/mês/ano Funcionamento domodo Cliente/Servidor do Puppet 1 5
  • 16.
  • 17.
    Área, dia/mês/ano Resources Recurso éa unidade fundamental da modelagem Cada recurso define um aspecto do sistema São como Legos Recursos são combinados para que o sistema chegue ao estado desejado A ordem não importa!
  • 18.
    Área, dia/mês/ano Resources Os recursossão escritos em uma linguagem de modelagem declarativa Exemplo: Sintaxe do recurso: • Tipo do recurso • Bloco ( colchetes ) • Título do recurso separado do corpo por „:‟ • Corpo consiste em pares de atributo e valor • Tipo e título devem ser únicos
  • 19.
    Área, dia/mês/ano Resources Recursos similarespodem ser agrupados em Tipos A descrição de um recurso é abstraída de sua implementação, o que permite uma descrição ser válida para qualquer tipo de sistema. Isto devido a sua camada De abstração de recursos (RAL)
  • 20.
    Área, dia/mês/ano Resources RAL : Cadarecurso possui Um ou mais provedores Provedores fazem a ligação entre os tipos de recurso e o SO correto.
  • 21.
  • 22.
    Área, dia/mês/ano Resources Types Exemplode abordagem de implementação: Pacotes * Suporta 23 tipos de provedores de pacote * Declaramos se o pacote está presente ou ausente * Declaramos que o pacote sempre deverá estar em sua última versão Serviço * Declaramos se o serviço está sempre rodando ou não * Declaramos se o serviço será carregado no boot * Declaramos se o serviço depende de um pacote ou arquivo Arquivo * Especificamos permissões e donos * Declaramos diretórios e links simbólicos
  • 23.
    Área, dia/mês/ano Resources Types Exemploinstalação, configuração e inicialização do Apache Como seria no CentOs # yum install httpd # chkconfig httpd on # cp ~/httpd.conf /etc/httpd/conf/ # service httpd start
  • 24.
    Área, dia/mês/ano Resources Types Exemploinstalação, configuração e inicialização do Apache Como seria no Debian # aptitude install apache2 # insserv apache2 # cp ~/httpd.conf /etc/apache2/ # invoke-rc.d apache2 start
  • 25.
    Área, dia/mês/ano Resources Types NoPuppet com apenas uma abordagem package { 'apache2': ensure => present, } service { 'apache2': ensure => running, enable => true, } file { '/etc/apache2/httpd.conf': ensure => present, mode => „0644‟, owner => „root‟, group => „root‟, ensure => “puppet:///files/apache/httpd.conf”, }
  • 26.
    Área, dia/mês/ano Resources Types Exemploinstalação, configuração do editor, ( independe do SO ) 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 “jbossas01hom.network.ctbc” { include editor } node “jbossas02hom.network.ctbc” { include editor }
  • 27.
    Área, dia/mês/ano Resources Types Exemploclasse base – padronizando nós class sudoers { package { 'sudoers': ensure => installed, } file { '/etc/sudoers': source => 'puppet:///files/sudo/sudoers', require => Package['sudoers'], owner => 'root', group => 'root', mode => 440, } } 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
  • 28.
    Área, dia/mês/ano Resources Types Exemploclasse base class ntpdate { package { 'ntpdate': ensure => installed, } cron { 'sincroniza horario': user => 'root', command => '/usr/sbin/ntpdate ntp.dominio', minute => 0, } } Pacote ntpdate • Garantir que esteja instalado cron • Usuário root • Comando 'ntpdate ntp.dominio' • Executar de hora em hora
  • 29.
    Área, dia/mês/ano Resources Types Exemploclasse base 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'] ], } } 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
  • 30.
    Área, dia/mês/ano Resources Types Exemploclasse base class padrao { include sudoers include ntpdate include locale } node default{ include padrao } Aplicar sudoers Aplicar ntpdate Aplicar locale Todos os nós! • Aplicar configuração padrão
  • 31.
    Área, dia/mês/ano Resources Types Exemploalterar dados em linha de comando puppet:~# puppet resourse user paulohac user { paulohac': ensure => 'absent' } puppet:~# puppet resourse user paulohac ensure=present notice: /User[paulohac]/ensure: created user { „paulohac': ensure => 'present' } puppet:~# puppet resourse user paulohac ensure=absent notice: /User[paulohac]/ensure: removed user { „paulohac': ensure => 'absent' }
  • 32.
  • 33.
  • 34.
  • 35.
    Área, dia/mês/ano Procedimento manualde instalação do Agente EM12c em um JBoss • Acessar servidor via SSH • Criar diretório para o agente e as bibliotecas • Deployar .jar de monitoramento • Copiar vários jars para um diretório de bibliotecas para que o EM possa reconhecer. • Modificar a permissão para jboss • (Re)iniciar servidor • Talvez remover agente antigo ( Nagios ) 3 5
  • 36.
    Área, dia/mês/ano Procedimento manualde instalação do Agente EM12c em um JBoss Em números: 200 SERVIDORES 20 MINUTOS POR SERVIDOR 4000 MINUTOS OU 67 HORAS 8 DIAS TRABALHANDO • Sem documentação • Sem rastreamento de mudanças 3 6
  • 37.
  • 38.
    Área, dia/mês/ano Resultados • DocumentaçãoInstantânea • Processos bem definidos • Ambiente Padronizado • Restore e backup de mudanças • Tarefas Automatizadas
  • 39.
    Área, dia/mês/ano Recomendações • Usaro puppet para executar e controlar mudanças na infraestrutura • Parar de administrar e começar a desenvolver a infraestrutura • Nova demanda? Já executar utilizando o Puppet, escrevendo classes e módulos para executar apenas uma vez e reaproveitar o código depois. • Versionar as configurações (svn) criadas no Puppet. • Escreves módulos e classes da forma mais flexível possível. • Utilizar módulos prontos do GitHub e PuppetForge.
  • 40.