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 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
5. Á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
6. Á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
7. Á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
8. Á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
11. Á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
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 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
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 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
19. Á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)
22. Á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
23. Á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
24. Á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
25. Á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”,
}
26. Á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
}
27. Á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
28. Á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
30. Á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
31. Á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'
}
35. Á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
36. Á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
39. Á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.