Upload
daniel-sobral
View
1.571
Download
0
Embed Size (px)
DESCRIPTION
Palestra Introdutória do Workshop de mesmo nome da Agile Brazil 2012.
Citation preview
Gestão Automática de Configuração Usando Puppet
Daniel Capó Sobral
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
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
Quem são vocês?Quem é administrador de sistemas?
Quem são vocês?Quem é administrador de sistemas?Quem é programador?
Quem são vocês?Quem é administrador de sistemas?Quem é programador?Quem se considera “devops”?
Quem são vocês?Quem é administrador de sistemas?Quem é programador?Quem se considera “devops”?Quem já conhece o Puppet?
Objetivos
ObjetivosExplicar o que é Gestão Automática de
Configuração
ObjetivosExplicar o que é Gestão Automática de
ConfiguraçãoApresentar os benefícios
ObjetivosExplicar o que é Gestão Automática de
ConfiguraçãoApresentar os benefíciosResumir alternativas
ObjetivosExplicar o que é Gestão Automática de
ConfiguraçãoApresentar os benefíciosResumir alternativasDescrever o funcionamento do Puppet
ObjetivosExplicar o que é Gestão Automática de
ConfiguraçãoApresentar os benefíciosResumir alternativasDescrever o funcionamento do PuppetEnsinar a usar o Puppet
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
Gestão Automática de Configuração
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
GestãoAplicar nos servidores a configuração
desejadaMonitorar servidores contra mudançasCorrigir alterações da configuração esperada
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
Benefícios
Uma história real
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
Alternativas
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
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
Como Funciona o Puppet
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
Visão por altoPuppetMaster
PuppetClients
Cliente executando
PuppetMaster
PuppetClient
Fatos
Catálogo
Relatório
Servidor preparando catálogo
Catálogo
Quem é o cliente?
Fatos do cliente
Classes, definições e recursos
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
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!
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!
Recurso
user { 'ze': ensure => present, gid => 1000, require => Group['ze'],}
Recurso
user { 'ze': ensure => present, gid => 1000, require => Group['ze'],}
Tipo Nome
Atributos
MetaAtributo
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
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)
Organização de uma Configuração
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
Árvore do Puppet
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
O Nó
O nó associa recursos,definições e classes a
um cliente.
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
O Módulo
O módulo agrupa classes,definições, arquivos e
templates comum temacomum.
Um exemplo prático: o módulo
A Classe
A classe contém umconjunto de configurações
que se deseje aplicarsempre em juntas,
uma única vez.
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
A Definição
A definição é similar àclasse, mas recebe
parâmetros e pode serinclusa várias vezes.
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
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
O Recurso
O recurso descreve umitem de configuração.
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
Prática
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.
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)
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
Um início modestoPacote Apache2Serviço Apache2
DependênciasServiço antes de Pacote?Require e Before
Arquivos de ConfiguraçãoNúmero de arquivos abertos: nofile
CompletandoMod-rewriteMod-deflatePHP5
Temos Uma Classe!ClasseIncluindo classesNodes
NGINX e definesDefineClasse com parâmetro
Conflito de Porta e TemplatesVariáveisPorts.conf e o ERB Template
Carregando Novas ConfiguraçõesNotify e Subscribe
Instalando, ou não, o NGINXIf
The Endfor now...