View
304
Download
0
Embed Size (px)
Á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:
10
Á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
11
Á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!
12
Á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!
13
Área, dia/mês/ano
Funcionamento do modo Cliente/Servidor do Puppet
14
Puppet Master
Puppet Agent
8139 Server
8140Client
Área, dia/mês/ano
Funcionamento do modo Cliente/Servidor do Puppet
15
Área, dia/mês/ano
Puppet Resources
Área, dia/mês/ano
Resources
Recurso é a unidade fundamental da modelagemCada 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 declarativaExemplo:
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 permiteuma descrição ser válida para qualquer tipo de sistema. Isto devido a sua camadaDe abstração de recursos (RAL)
Área, dia/mês/ano
Resources
RAL :
Cada recurso possuiUm ou mais provedores
Provedores fazem a ligação entre os tipos derecurso 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 TypesExemplo instalação, configuração e inicialização do ApacheComo seria no CentOs
# yum install httpd
# chkconfig httpd on
# cp ~/httpd.conf /etc/httpd/conf/
# service httpd start
Área, dia/mês/ano
Resources TypesExemplo instalação, configuração e inicialização do ApacheComo seria no Debian
# aptitude install apache2
# insserv apache2
# cp ~/httpd.conf /etc/apache2/
# invoke-rc.d apache2 start
Área, dia/mês/ano
Resources TypesNo Puppet com apenas uma abordagempackage { '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 TypesExemplo 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 TypesExemplo 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 TypesExemplo 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 TypesExemplo classe baseclass 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 TypesExemplo classe base
class padrao {include sudoersinclude ntpdateinclude locale
}
node default{include padrao
}
Aplicar sudoersAplicar ntpdateAplicar locale
Todos os nós!• Aplicar configuração padrão
Área, dia/mês/ano
Resources TypesExemplo alterar dados em linha de comandopuppet:~# puppet resourse user paulohacuser { paulohac':
ensure => 'absent'}puppet:~# puppet resourse user paulohac ensure=presentnotice: /User[paulohac]/ensure: createduser { ‘paulohac':
ensure => 'present'}puppet:~# puppet resourse user paulohac ensure=absentnotice: /User[paulohac]/ensure: removeduser { ‘paulohac':
ensure => 'absent'}
Área, dia/mês/ano
Verificando mudançasPuppet 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 )
35
Área, dia/mês/ano
Procedimento manual de instalação do Agente EM12c em um JBoss
Em números:
200 SERVIDORES20 MINUTOS POR SERVIDOR4000 MINUTOS OU 67 HORAS8 DIAS TRABALHANDO
• Sem documentação• Sem rastreamento de mudanças
36
Á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.comhttp://www.puppetlabs.com/blog/
Twitter@puppetlabs@puppetmasterd
IRCirc.freenode.org#puppet#puppet-br