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

Post on 11-Jun-2015

1.570 views 0 download

description

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

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

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...