gestão automática de configuração usando puppet
DESCRIPTION
Palestra Introdutória do Workshop de mesmo nome da Agile Brazil 2012.TRANSCRIPT
![Page 1: Gestão automática de configuração usando puppet](https://reader035.vdocuments.pub/reader035/viewer/2022081519/55799f77d8b42ac1148b46cd/html5/thumbnails/1.jpg)
Gestão Automática de Configuração Usando Puppet
Daniel Capó Sobral
![Page 2: Gestão automática de configuração usando puppet](https://reader035.vdocuments.pub/reader035/viewer/2022081519/55799f77d8b42ac1148b46cd/html5/thumbnails/2.jpg)
Esta apresentação:SpeakerDeck
https://speakerdeck.com/u/dcsobral/p/gestao-automatica-de-configuracao-usando-puppet
SlideSharehttp://www.slideshare.net/dcsobral/gesto-auto
mtica-de-configurao-usando-puppet
![Page 3: Gestão automática de configuração usando puppet](https://reader035.vdocuments.pub/reader035/viewer/2022081519/55799f77d8b42ac1148b46cd/html5/thumbnails/3.jpg)
Quem sou eu?Daniel Sobral
Mestrado em ComputaçãoAdministrador de SistemasProgramadorColaborador dos projetos FreeBSD e ScalaEntusiasta de Métodos ÁgeisNão trabalho para Puppet Labs
@dcsobral
![Page 4: Gestão automática de configuração usando puppet](https://reader035.vdocuments.pub/reader035/viewer/2022081519/55799f77d8b42ac1148b46cd/html5/thumbnails/4.jpg)
Quem são vocês?Quem é administrador de sistemas?
![Page 5: Gestão automática de configuração usando puppet](https://reader035.vdocuments.pub/reader035/viewer/2022081519/55799f77d8b42ac1148b46cd/html5/thumbnails/5.jpg)
Quem são vocês?Quem é administrador de sistemas?Quem é programador?
![Page 6: Gestão automática de configuração usando puppet](https://reader035.vdocuments.pub/reader035/viewer/2022081519/55799f77d8b42ac1148b46cd/html5/thumbnails/6.jpg)
Quem são vocês?Quem é administrador de sistemas?Quem é programador?Quem se considera “devops”?
![Page 7: Gestão automática de configuração usando puppet](https://reader035.vdocuments.pub/reader035/viewer/2022081519/55799f77d8b42ac1148b46cd/html5/thumbnails/7.jpg)
Quem são vocês?Quem é administrador de sistemas?Quem é programador?Quem se considera “devops”?Quem já conhece o Puppet?
![Page 8: Gestão automática de configuração usando puppet](https://reader035.vdocuments.pub/reader035/viewer/2022081519/55799f77d8b42ac1148b46cd/html5/thumbnails/8.jpg)
Objetivos
![Page 9: Gestão automática de configuração usando puppet](https://reader035.vdocuments.pub/reader035/viewer/2022081519/55799f77d8b42ac1148b46cd/html5/thumbnails/9.jpg)
ObjetivosExplicar o que é Gestão Automática de
Configuração
![Page 10: Gestão automática de configuração usando puppet](https://reader035.vdocuments.pub/reader035/viewer/2022081519/55799f77d8b42ac1148b46cd/html5/thumbnails/10.jpg)
ObjetivosExplicar o que é Gestão Automática de
ConfiguraçãoApresentar os benefícios
![Page 11: Gestão automática de configuração usando puppet](https://reader035.vdocuments.pub/reader035/viewer/2022081519/55799f77d8b42ac1148b46cd/html5/thumbnails/11.jpg)
ObjetivosExplicar o que é Gestão Automática de
ConfiguraçãoApresentar os benefíciosResumir alternativas
![Page 12: Gestão automática de configuração usando puppet](https://reader035.vdocuments.pub/reader035/viewer/2022081519/55799f77d8b42ac1148b46cd/html5/thumbnails/12.jpg)
ObjetivosExplicar o que é Gestão Automática de
ConfiguraçãoApresentar os benefíciosResumir alternativasDescrever o funcionamento do Puppet
![Page 13: Gestão automática de configuração usando puppet](https://reader035.vdocuments.pub/reader035/viewer/2022081519/55799f77d8b42ac1148b46cd/html5/thumbnails/13.jpg)
ObjetivosExplicar o que é Gestão Automática de
ConfiguraçãoApresentar os benefíciosResumir alternativasDescrever o funcionamento do PuppetEnsinar a usar o Puppet
![Page 14: Gestão automática de configuração usando puppet](https://reader035.vdocuments.pub/reader035/viewer/2022081519/55799f77d8b42ac1148b46cd/html5/thumbnails/14.jpg)
ObjetivosExplicar o que é Gestão Automática de
Configuração5 minutos
Apresentar os benefícios5 minutos
Resumir alternativas5 minutos
Descrever o funcionamento do Puppet25 minutos
Ensinar a usar o Puppet55 minutos
![Page 15: Gestão automática de configuração usando puppet](https://reader035.vdocuments.pub/reader035/viewer/2022081519/55799f77d8b42ac1148b46cd/html5/thumbnails/15.jpg)
Gestão Automática de Configuração
![Page 16: Gestão automática de configuração usando puppet](https://reader035.vdocuments.pub/reader035/viewer/2022081519/55799f77d8b42ac1148b46cd/html5/thumbnails/16.jpg)
ConfiguraçãoTudo aquilo que pode ser modificado, e
modifique a funcionalidade do sistema:Arquivos de ConfiguraçãoUsuários CadastradosServiços RodandoPacotes Instalados
etc etc
Etc
![Page 17: Gestão automática de configuração usando puppet](https://reader035.vdocuments.pub/reader035/viewer/2022081519/55799f77d8b42ac1148b46cd/html5/thumbnails/17.jpg)
GestãoAplicar nos servidores a configuração
desejadaMonitorar servidores contra mudançasCorrigir alterações da configuração esperada
![Page 18: Gestão automática de configuração usando puppet](https://reader035.vdocuments.pub/reader035/viewer/2022081519/55799f77d8b42ac1148b46cd/html5/thumbnails/18.jpg)
Gestão Automática de ConfiguraçãoFunciona mais ou menos assim:
Servidor rio20prod01: Servidor de Linux de Produção com Wordpress
servindo o site rio20
![Page 19: Gestão automática de configuração usando puppet](https://reader035.vdocuments.pub/reader035/viewer/2022081519/55799f77d8b42ac1148b46cd/html5/thumbnails/19.jpg)
Benefícios
![Page 20: Gestão automática de configuração usando puppet](https://reader035.vdocuments.pub/reader035/viewer/2022081519/55799f77d8b42ac1148b46cd/html5/thumbnails/20.jpg)
Uma história real
![Page 21: Gestão automática de configuração usando puppet](https://reader035.vdocuments.pub/reader035/viewer/2022081519/55799f77d8b42ac1148b46cd/html5/thumbnails/21.jpg)
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çãoControle de versão
Você sabe quando e o que mudou na configuração
Você pode voltar a versões anterioresVocê tem um backup de como o servidor deve
serMenor Tempo para se Criar Novos Servidores
![Page 22: Gestão automática de configuração usando puppet](https://reader035.vdocuments.pub/reader035/viewer/2022081519/55799f77d8b42ac1148b46cd/html5/thumbnails/22.jpg)
Alternativas
![Page 23: Gestão automática de configuração usando puppet](https://reader035.vdocuments.pub/reader035/viewer/2022081519/55799f77d8b42ac1148b46cd/html5/thumbnails/23.jpg)
Qual a diferença?CFEngine
O mais antigoRápidoConsome poucos recursos
ChefConfiguração escrita em RubyMuito Flexível
Salt StackConfiguração via YAML (muito simples, intuitivo)
ANSIBLEAcessa servidores via SSHNão requer daemons rodando nos clientes
![Page 24: Gestão automática de configuração usando puppet](https://reader035.vdocuments.pub/reader035/viewer/2022081519/55799f77d8b42ac1148b46cd/html5/thumbnails/24.jpg)
Vantagens do PuppetLinguagem declarativa
Menos “bugs” de configuraçãoMais configuração do que programação
Configurações IdempotentesPode-se aplicar uma configuração já aplicada em
errosCompletamente extensível
Todos elementos primitivos do Puppet podem ser estendidos pelo usuário em Ruby
Protocolos Padrões (HTTPS, certificados)Tecnologia conhecida
![Page 25: Gestão automática de configuração usando puppet](https://reader035.vdocuments.pub/reader035/viewer/2022081519/55799f77d8b42ac1148b46cd/html5/thumbnails/25.jpg)
Como Funciona o Puppet
![Page 26: Gestão automática de configuração usando puppet](https://reader035.vdocuments.pub/reader035/viewer/2022081519/55799f77d8b42ac1148b46cd/html5/thumbnails/26.jpg)
Modos De FuncionamentoCliente/Servidor
Daemon no cliente consultando servidor periodicamente
Daemon no cliente ativado a partir do servidorProcesso no cliente disparado via crontabProcesso no cliente disparado manualmente
Stand-AloneVia crontabManualmente
![Page 27: Gestão automática de configuração usando puppet](https://reader035.vdocuments.pub/reader035/viewer/2022081519/55799f77d8b42ac1148b46cd/html5/thumbnails/27.jpg)
Visão por altoPuppetMaster
PuppetClients
![Page 28: Gestão automática de configuração usando puppet](https://reader035.vdocuments.pub/reader035/viewer/2022081519/55799f77d8b42ac1148b46cd/html5/thumbnails/28.jpg)
Cliente executando
PuppetMaster
PuppetClient
Fatos
Catálogo
Relatório
![Page 29: Gestão automática de configuração usando puppet](https://reader035.vdocuments.pub/reader035/viewer/2022081519/55799f77d8b42ac1148b46cd/html5/thumbnails/29.jpg)
Servidor preparando catálogo
Catálogo
Quem é o cliente?
Fatos do cliente
Classes, definições e recursos
![Page 30: Gestão automática de configuração usando puppet](https://reader035.vdocuments.pub/reader035/viewer/2022081519/55799f77d8b42ac1148b46cd/html5/thumbnails/30.jpg)
Cliente processando o catálogoOrdena Dependências entre Recursos
Confere Estado de Cada Recurso• Modifica Configuração do Recurso• Notifica Outros Recursos
Envia Relatório para o Puppet Master
![Page 31: Gestão automática de configuração usando puppet](https://reader035.vdocuments.pub/reader035/viewer/2022081519/55799f77d8b42ac1148b46cd/html5/thumbnails/31.jpg)
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 instaladosQuais usuários estão cadastrados
Mas podem ser extendidos!
![Page 32: Gestão automática de configuração usando puppet](https://reader035.vdocuments.pub/reader035/viewer/2022081519/55799f77d8b42ac1148b46cd/html5/thumbnails/32.jpg)
Catálogo?Conjunto de recursos, seus atributos e suas
dependênciasRecurso:
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!
![Page 33: Gestão automática de configuração usando puppet](https://reader035.vdocuments.pub/reader035/viewer/2022081519/55799f77d8b42ac1148b46cd/html5/thumbnails/33.jpg)
Recurso
user { 'ze': ensure => present, gid => 1000, require => Group['ze'],}
![Page 34: Gestão automática de configuração usando puppet](https://reader035.vdocuments.pub/reader035/viewer/2022081519/55799f77d8b42ac1148b46cd/html5/thumbnails/34.jpg)
Recurso
user { 'ze': ensure => present, gid => 1000, require => Group['ze'],}
Tipo Nome
Atributos
MetaAtributo
![Page 35: Gestão automática de configuração usando puppet](https://reader035.vdocuments.pub/reader035/viewer/2022081519/55799f77d8b42ac1148b46cd/html5/thumbnails/35.jpg)
RecursoDetermina o que será configuradoTipo
• “user” cria, modifica e remove usuários
Identificação única de um recursoNome• Em alguns casos, provê informações adicionais• O nome de “user” é o nome do usuário sendo configurado
Descrevem a configuração do recursoAtributos
• “ensure” de “user” determina se o usuário deve estar presente ou não
• “gid” de “user” informa o grupo primário
![Page 36: Gestão automática de configuração usando puppet](https://reader035.vdocuments.pub/reader035/viewer/2022081519/55799f77d8b42ac1148b46cd/html5/thumbnails/36.jpg)
Meta AtributosComuns a todos os recursosDescrevem relações entre recursos ou forma
de funcionamentoExemplos:
Dependência (require, before)Gatilhos (notify, subscribe)Categorização (tag)Nome alternativo (alias)Dia e Horário em que pode ser aplicado
(schedule)
![Page 37: Gestão automática de configuração usando puppet](https://reader035.vdocuments.pub/reader035/viewer/2022081519/55799f77d8b42ac1148b46cd/html5/thumbnails/37.jpg)
Organização de uma Configuração
![Page 38: Gestão automática de configuração usando puppet](https://reader035.vdocuments.pub/reader035/viewer/2022081519/55799f77d8b42ac1148b46cd/html5/thumbnails/38.jpg)
Elementos de OrganizaçãoContém todo o restoSite
Configuração de um servidorNóAgrupamento temático de configuraçõesMódulo
Grupo de configurações Classe
Grupo de configurações parametrizadoDefinição
Um elemento de configuraçãoRecurso
Arquivos servidos pelo puppetArquivoArquivos servidos pelo puppet parametrizadosTemplate
![Page 39: Gestão automática de configuração usando puppet](https://reader035.vdocuments.pub/reader035/viewer/2022081519/55799f77d8b42ac1148b46cd/html5/thumbnails/39.jpg)
Árvore do Puppet
![Page 40: Gestão automática de configuração usando puppet](https://reader035.vdocuments.pub/reader035/viewer/2022081519/55799f77d8b42ac1148b46cd/html5/thumbnails/40.jpg)
Organização de RecursosSite
Nós
Classes
Definições
Recursos
Módulos
Classes
Definições
Arquivos
Templates
Classes
Classes
Definições
Recursos
Definições
Classes
Definições
Recursos
Recursos Arquivos Templates
![Page 41: Gestão automática de configuração usando puppet](https://reader035.vdocuments.pub/reader035/viewer/2022081519/55799f77d8b42ac1148b46cd/html5/thumbnails/41.jpg)
O Nó
O nó associa recursos,definições e classes a
um cliente.
![Page 42: Gestão automática de configuração usando puppet](https://reader035.vdocuments.pub/reader035/viewer/2022081519/55799f77d8b42ac1148b46cd/html5/thumbnails/42.jpg)
Um exemplo prático: o nó
node "rio20prod01" { include linux-server rio20def { 'rio20prod01': site => 'rio20.dom.com.br', }}
Classe
Definição Parâmetro da Definição
![Page 43: Gestão automática de configuração usando puppet](https://reader035.vdocuments.pub/reader035/viewer/2022081519/55799f77d8b42ac1148b46cd/html5/thumbnails/43.jpg)
O Módulo
O módulo agrupa classes,definições, arquivos e
templates comum temacomum.
![Page 44: Gestão automática de configuração usando puppet](https://reader035.vdocuments.pub/reader035/viewer/2022081519/55799f77d8b42ac1148b46cd/html5/thumbnails/44.jpg)
Um exemplo prático: o módulo
![Page 45: Gestão automática de configuração usando puppet](https://reader035.vdocuments.pub/reader035/viewer/2022081519/55799f77d8b42ac1148b46cd/html5/thumbnails/45.jpg)
A Classe
A classe contém umconjunto de configurações
que se deseje aplicarsempre em juntas,
uma única vez.
![Page 46: Gestão automática de configuração usando puppet](https://reader035.vdocuments.pub/reader035/viewer/2022081519/55799f77d8b42ac1148b46cd/html5/thumbnails/46.jpg)
Um exemplo prático: a classe
class linux-server { # Include classes common to all linux servers include localmta include ntpdate include puppet::conf include ssh::server include sudoers
Outras Classes
![Page 47: Gestão automática de configuração usando puppet](https://reader035.vdocuments.pub/reader035/viewer/2022081519/55799f77d8b42ac1148b46cd/html5/thumbnails/47.jpg)
A Definição
A definição é similar àclasse, mas recebe
parâmetros e pode serinclusa várias vezes.
![Page 48: Gestão automática de configuração usando puppet](https://reader035.vdocuments.pub/reader035/viewer/2022081519/55799f77d8b42ac1148b46cd/html5/thumbnails/48.jpg)
Um exemplo prático: a definição
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', mode => 644, source => 'puppet:///files/rio20/apache2/apache2.conf', require => Package['apache2'], notify => Service['apache2'], } file { '/etc/php5/apache2/php.ini': ensure => present,
Parâmetro a ser recebidoRecursos
Definições
![Page 49: Gestão automática de configuração usando puppet](https://reader035.vdocuments.pub/reader035/viewer/2022081519/55799f77d8b42ac1148b46cd/html5/thumbnails/49.jpg)
Classes vs DefiniçõesTambém é permitido às classes serem
parametrizadasCapacidade relativamente recente
Uma classe só pode ser inclusa uma única vez
Definições podem ser inclusas múltiplas vezes, com múltiplos nomes
![Page 50: Gestão automática de configuração usando puppet](https://reader035.vdocuments.pub/reader035/viewer/2022081519/55799f77d8b42ac1148b46cd/html5/thumbnails/50.jpg)
O Recurso
O recurso descreve umitem de configuração.
![Page 51: Gestão automática de configuração usando puppet](https://reader035.vdocuments.pub/reader035/viewer/2022081519/55799f77d8b42ac1148b46cd/html5/thumbnails/51.jpg)
Um exemplo prático: o recurso
file { "/etc/apache2/sites-available/default": ensure => present, owner => 'root', group => 'root', mode => 644, content => template('wordpress/apache.erb'), require => Package['apache2'], notify => Service['apache2'], }
Atributos
MetaAtributos
NomeTipo
![Page 52: Gestão automática de configuração usando puppet](https://reader035.vdocuments.pub/reader035/viewer/2022081519/55799f77d8b42ac1148b46cd/html5/thumbnails/52.jpg)
Prática
![Page 53: Gestão automática de configuração usando puppet](https://reader035.vdocuments.pub/reader035/viewer/2022081519/55799f77d8b42ac1148b46cd/html5/thumbnails/53.jpg)
PropostaNão usaremos o Puppet MasterUsaremos o Puppet stand-alone manualVamos criar a configuração em etapasA cada etapa, introduzimos um recurso novo
A propósito,Essa é a forma como eu crio minhas
configurações.
![Page 54: Gestão automática de configuração usando puppet](https://reader035.vdocuments.pub/reader035/viewer/2022081519/55799f77d8b42ac1148b46cd/html5/thumbnails/54.jpg)
O exercícioCriar uma configuração para aplicações PHPServindo páginas dinâmicas via ApacheE páginas estáticas via NginxCó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-wordpressNota: 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)
![Page 55: Gestão automática de configuração usando puppet](https://reader035.vdocuments.pub/reader035/viewer/2022081519/55799f77d8b42ac1148b46cd/html5/thumbnails/55.jpg)
Comandos ÚteisPega configurações no Puppet Master
puppet agent
Pega configurações de um arquivo
puppet apply
Examina ou modifica um resource
puppet resource
Lista resources e explica atributos
puppet describe
![Page 56: Gestão automática de configuração usando puppet](https://reader035.vdocuments.pub/reader035/viewer/2022081519/55799f77d8b42ac1148b46cd/html5/thumbnails/56.jpg)
Um início modestoPacote Apache2Serviço Apache2
![Page 57: Gestão automática de configuração usando puppet](https://reader035.vdocuments.pub/reader035/viewer/2022081519/55799f77d8b42ac1148b46cd/html5/thumbnails/57.jpg)
DependênciasServiço antes de Pacote?Require e Before
![Page 58: Gestão automática de configuração usando puppet](https://reader035.vdocuments.pub/reader035/viewer/2022081519/55799f77d8b42ac1148b46cd/html5/thumbnails/58.jpg)
Arquivos de ConfiguraçãoNúmero de arquivos abertos: nofile
![Page 59: Gestão automática de configuração usando puppet](https://reader035.vdocuments.pub/reader035/viewer/2022081519/55799f77d8b42ac1148b46cd/html5/thumbnails/59.jpg)
CompletandoMod-rewriteMod-deflatePHP5
![Page 60: Gestão automática de configuração usando puppet](https://reader035.vdocuments.pub/reader035/viewer/2022081519/55799f77d8b42ac1148b46cd/html5/thumbnails/60.jpg)
Temos Uma Classe!ClasseIncluindo classesNodes
![Page 61: Gestão automática de configuração usando puppet](https://reader035.vdocuments.pub/reader035/viewer/2022081519/55799f77d8b42ac1148b46cd/html5/thumbnails/61.jpg)
NGINX e definesDefineClasse com parâmetro
![Page 62: Gestão automática de configuração usando puppet](https://reader035.vdocuments.pub/reader035/viewer/2022081519/55799f77d8b42ac1148b46cd/html5/thumbnails/62.jpg)
Conflito de Porta e TemplatesVariáveisPorts.conf e o ERB Template
![Page 63: Gestão automática de configuração usando puppet](https://reader035.vdocuments.pub/reader035/viewer/2022081519/55799f77d8b42ac1148b46cd/html5/thumbnails/63.jpg)
Carregando Novas ConfiguraçõesNotify e Subscribe
![Page 64: Gestão automática de configuração usando puppet](https://reader035.vdocuments.pub/reader035/viewer/2022081519/55799f77d8b42ac1148b46cd/html5/thumbnails/64.jpg)
Instalando, ou não, o NGINXIf
![Page 65: Gestão automática de configuração usando puppet](https://reader035.vdocuments.pub/reader035/viewer/2022081519/55799f77d8b42ac1148b46cd/html5/thumbnails/65.jpg)
The Endfor now...