O documento apresenta Daniel Sobral e seu trabalho com gestão automática de configuração usando Puppet. Ele explica quem ele é, os objetivos da apresentação e dá uma visão geral de como o Puppet funciona, incluindo recursos, catálogos e a organização de elementos como sites, nós, módulos e classes.
3. Quem sou eu?
Daniel Sobral
Mestrado em Computação
Administrador de Sistemas
Programador
Colaborador dos projetos FreeBSD e Scala
Entusiasta de Métodos Ágeis
Não trabalho para Puppet Labs
@dcsobral
10. Objetivos
Explicar o que é Gestão Automática de Configuração
Apresentar os benefícios
11. Objetivos
Explicar o que é Gestão Automática de Configuração
Apresentar os benefícios
Resumir alternativas
12. Objetivos
Explicar o que é Gestão Automática de Configuração
Apresentar os benefícios
Resumir alternativas
Descrever o funcionamento do Puppet
13. Objetivos
Explicar o que é Gestão Automática de Configuração
Apresentar os benefícios
Resumir alternativas
Descrever o funcionamento do Puppet
Ensinar a usar o Puppet
14. Objetivos
Explicar o que é Gestão Automática de Configuração
5 minutos
Apresentar os benefícios
5 minutos
Resumir alternativas
5 minutos
Descrever o funcionamento do Puppet
25 minutos
Ensinar a usar o Puppet
55 minutos
15.
16. Configuração
Tudo aquilo que pode ser modificado, e modifique a
funcionalidade do sistema:
Arquivos de Configuração
Usuários Cadastrados
Serviços Rodando
Pacotes Instalados
etc
etc
Etc
17. Gestão
Aplicar nos servidores a configuração desejada
Monitorar servidores contra mudanças
Corrigir alterações da configuração esperada
18. Gestão Automática de
Configuração
Funciona mais ou menos assim:
Servidor rio20prod01:
Servidor de Linux de Produção com Wordpress servindo o site
rio20
19.
20.
21. Meus benefícios favoritos:
Padronização dos Servidores
Todos servidores de um determinado tipo tem
exatamente a mesma configuração relevante
Agilidade para Mudar a Configuração
Controle de versão
Você sabe quando e o que mudou na configuração
Você pode voltar a versões anteriores
Você tem um backup de como o servidor deve ser
Menor Tempo para se Criar Novos Servidores
22.
23. Qual a diferença?
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
Acessa servidores via SSH
Não requer daemons rodando nos clientes
24. Vantagens do Puppet
Linguagem declarativa
Menos “bugs” de configuração
Mais configuração do que programação
Configurações Idempotentes
Pode-se aplicar uma configuração já aplicada em erros
Completamente extensível
Todos elementos primitivos do Puppet podem ser
estendidos pelo usuário em Ruby
Protocolos Padrões (HTTPS, certificados)
Tecnologia conhecida
25.
26. Modos De Funcionamento
Cliente/Servidor
Daemon no cliente consultando servidor
periodicamente
Daemon no cliente ativado a partir do servidor
Processo no cliente disparado via crontab
Processo no cliente disparado manualmente
Stand-Alone
Via crontab
Manualmente
30. Cliente processando o catálogo
Ordena Dependências entre Recursos
Confere Estado de Cada Recurso
• Modifica Configuração do Recurso
• Notifica Outros Recursos
Envia Relatório para o Puppet Master
31. Fatos?
Informações básicas a respeito do cliente:
Qual é o sistema operacional?
Qual é a versão?
A máquina é virtual ou física?
Quantos processadores?
Quanta memória?
Não inclui, por exemplo:
Quais pacotes estão instalados
Quais usuários estão cadastrados
Mas podem ser extendidos!
32. Catálogo?
Conjunto de recursos, seus atributos e suas
dependências
Recurso:
Um arquivo (conteúdo, permissão, dono, etc)
Um serviço (se deve estar rodando ou não)
Um pacote (se deve estar instalado ou não, versão)
Um usuário (nome, uid, grupos, home, etc)
Uma entrada na crontab (o que executar, quando)
etc
Pode-se criar novos recursos!
34. Recurso
Tipo Nome
user { 'ze':
Atributos
ensure => present,
gid => 1000,
require => Group['ze'],
}
MetaAtributo
35. Recurso
Tipo Determina o que será configurado
• “user” cria, modifica e remove usuários
Nome Identificação única de um recurso
• Em alguns casos, provê informações adicionais
• O nome de “user” é o nome do usuário sendo configurado
Atributos Descrevem a configuração do recurso
• “ensure” de “user” determina se o usuário deve estar presente ou não
• “gid” de “user” informa o grupo primário
36. Meta Atributos
Comuns a todos os recursos
Descrevem relações entre recursos ou forma de
funcionamento
Exemplos:
Dependência (require, before)
Gatilhos (notify, subscribe)
Categorização (tag)
Nome alternativo (alias)
Dia e Horário em que pode ser aplicado (schedule)
37.
38. Elementos de Organização
Site Contém todo o resto
Nó Configuração de um servidor
Módulo Agrupamento temático de configurações
Classe Grupo de configurações
Definição Grupo de configurações parametrizado
Recurso Um elemento de configuração
Arquivo Arquivos servidos pelo puppet
Template Arquivos servidos pelo puppet parametrizados
40. Organização de Recursos
Site
Nós Módulos Classes Definições Recursos Arquivos Templates
Classes Classes Classes Classes
Definições Definições Definições Definições
Recursos Arquivos Recursos Recursos
Templates
41.
42. Um exemplo prático: o nó
Classe
node "rio20prod01" {
include linux-server
rio20def { 'rio20prod01':
site => 'rio20.dom.com.br',
}
}
Definição Parâmetro da Definição
46. Um exemplo prático: a classe
Outras Classes
class linux-server {
# Include classes common to all
linux servers
include localmta
include ntpdate
include puppet::conf
include ssh::server
include sudoers
47.
48. Um exemplo prático: a definição
Parâmetro a ser recebido
Recursos
define rio20def($site) {
include wordpress
package { 'php5': ensure => installed, }
wordpress::app { "rio20": password => "senha", site => "$site", }
deployers { 'rio20': }
file { '/etc/apache2/apache2.conf':
ensure => present,
owner => 'root',
group => 'root', Definições
mode => 644,
source => 'puppet:///files/rio20/apache2/apache2.conf',
require => Package['apache2'],
notify => Service['apache2'],
}
file { '/etc/php5/apache2/php.ini':
ensure => present,
49. Classes vs Definições
Também é permitido às classes serem parametrizadas
Capacidade relativamente recente
Uma classe só pode ser inclusa uma única vez
Definições podem ser inclusas múltiplas vezes, com
múltiplos nomes
50.
51. Um exemplo prático: o recurso
Tipo Nome
file { "/etc/apache2/sites-available/default":
ensure => present,
owner => 'root',
group => 'root', Atributos
mode => 644,
content => template('wordpress/apache.erb'),
require => Package['apache2'],
notify => Service['apache2'], MetaAtributos
}
52.
53. Proposta
Não usaremos o Puppet Master
Usaremos o Puppet stand-alone manual
Vamos criar a configuração em etapas
A cada etapa, introduzimos um recurso novo
A propósito,
Essa é a forma como eu crio minhas configurações.
54. O exercício
Criar uma configuração para aplicações PHP
Servindo páginas dinâmicas via Apache
E páginas estáticas via Nginx
Código gerado durante a Agile Brazil 2012:
https://github.com/dcsobral/puppet-demo-
agilebrazil2012
Exemplo de módulo com essas características:
https://github.com/dcsobral/puppet-wordpress
Nota: não usar em produção – versão do github não seta
keys e salts (bom exercício – ver módulo de mysql para
idéias)
55. Comandos Úteis
puppet Pega configurações no Puppet
agent Master
puppet
apply Pega configurações de um arquivo
puppet
resource Examina ou modifica um resource
puppet
describe Lista resources e explica atributos