65
Gestão Automática de Configuração Usando Puppet Daniel Capó Sobral

Gestão automática de configuração usando puppet

Embed Size (px)

DESCRIPTION

Palestra Introdutória do Workshop de mesmo nome da Agile Brazil 2012.

Citation preview

Page 1: Gestão automática de configuração usando puppet

Gestão Automática de Configuração Usando Puppet

Daniel Capó Sobral

Page 2: Gestão automática de configuração usando puppet

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

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

Quem são vocês?Quem é administrador de sistemas?

Page 5: Gestão automática de configuração usando puppet

Quem são vocês?Quem é administrador de sistemas?Quem é programador?

Page 6: Gestão automática de configuração usando puppet

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

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

Objetivos

Page 9: Gestão automática de configuração usando puppet

ObjetivosExplicar o que é Gestão Automática de

Configuração

Page 10: Gestão automática de configuração usando puppet

ObjetivosExplicar o que é Gestão Automática de

ConfiguraçãoApresentar os benefícios

Page 11: Gestão automática de configuração usando puppet

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

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

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

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

Gestão Automática de Configuração

Page 16: Gestão automática de configuração usando puppet

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

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

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

Benefícios

Page 20: Gestão automática de configuração usando puppet

Uma história real

Page 21: Gestão automática de configuração usando puppet

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

Alternativas

Page 23: Gestão automática de configuração usando puppet

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

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

Como Funciona o Puppet

Page 26: Gestão automática de configuração usando 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

Page 27: Gestão automática de configuração usando puppet

Visão por altoPuppetMaster

PuppetClients

Page 28: Gestão automática de configuração usando puppet

Cliente executando

PuppetMaster

PuppetClient

Fatos

Catálogo

Relatório

Page 29: Gestão automática de configuração usando puppet

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

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

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

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

Recurso

user { 'ze': ensure => present, gid => 1000, require => Group['ze'],}

Page 34: Gestão automática de configuração usando puppet

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

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

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

Organização de uma Configuração

Page 38: Gestão automática de configuração usando puppet

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

Árvore do Puppet

Page 40: Gestão automática de configuração usando 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

Page 41: Gestão automática de configuração usando puppet

O Nó

O nó associa recursos,definições e classes a

um cliente.

Page 42: Gestão automática de configuração usando puppet

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

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

Um exemplo prático: o módulo

Page 45: Gestão automática de configuração usando puppet

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

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

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

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

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

O Recurso

O recurso descreve umitem de configuração.

Page 51: Gestão automática de configuração usando puppet

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

Prática

Page 53: Gestão automática de configuração usando puppet

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

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

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

Um início modestoPacote Apache2Serviço Apache2

Page 57: Gestão automática de configuração usando puppet

DependênciasServiço antes de Pacote?Require e Before

Page 58: Gestão automática de configuração usando puppet

Arquivos de ConfiguraçãoNúmero de arquivos abertos: nofile

Page 59: Gestão automática de configuração usando puppet

CompletandoMod-rewriteMod-deflatePHP5

Page 60: Gestão automática de configuração usando puppet

Temos Uma Classe!ClasseIncluindo classesNodes

Page 61: Gestão automática de configuração usando puppet

NGINX e definesDefineClasse com parâmetro

Page 62: Gestão automática de configuração usando puppet

Conflito de Porta e TemplatesVariáveisPorts.conf e o ERB Template

Page 63: Gestão automática de configuração usando puppet

Carregando Novas ConfiguraçõesNotify e Subscribe

Page 64: Gestão automática de configuração usando puppet

Instalando, ou não, o NGINXIf

Page 65: Gestão automática de configuração usando puppet

The Endfor now...