Puppet overview

40
Área, dia/mês/ano https://puppetlabs.com https://github.com/puppetlabs

Transcript of Puppet overview

Page 1: Puppet overview

Área, dia/mês/ano

https://puppetlabs.com

https://github.com/puppetlabs

Page 2: Puppet overview

Área, dia/mês/ano

Administração Manual

• Não existe um padrão• Não existem procedimentos• Cada administrador faz do seu jeito• Tarefas repetitivas

- Criação de usuários- Elaboração de scripts- Configuração de serviços- Configurações de monitoramento- Criação de imagens de ambientes- Configuração do sistema operacional- Instalação, atualização e remoção de pacotes

2

Page 3: Puppet overview

Área, dia/mês/ano

O que é o Puppet?

O que está acontecendo?

ESTADO DESEJADO

sapato => present

Page 4: Puppet overview

Área, dia/mês/ano

Por que usar o Puppet?

• Economia de tempo• Evita erros humanos• Documenta o setup de um servidor• Fim dos longos e estressantes deploys em servidores• O puppet tem por padrão certificado de autenticação SSL• Facilita o trabalho dos administradores dos servidores• Padroniza as configurações utilizadas possibilitando auditoria

dessas configurações• Centraliza a adminstração• Acelera a criação e a configuração dos servidores

4

Page 5: Puppet overview

Área, dia/mês/ano

Por que usar o Puppet?

• Roda em todos SO’s comuns : Linux, Mac, Windows...• Vantagens em servidores idênticos ou similares.• Controle de versão• É utilizado até quando se tem um único servidor• Uma outra utilização é quando temos que construir uma

workstation de desenvolvimento de um modo mais consistente, conseguimos algo praticamente idêntico do ambiente de produção para cada desenvolvedor.

5

Page 6: Puppet overview

Área, dia/mês/ano

Por que usar o Puppet?

Alternativas:• 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 - Não requer agentes rodando nos nós

6

Page 7: Puppet overview

Área, dia/mês/ano

Por que usar o Puppet?

Vantagens do Puppet• Linguagem declarativa - Menos Bugs de configuração - Mais configurações do que programação• Configurações idempotentes• Completamente extensível - Todos elementos primitivos do Puppet podem ser estendidos pelo usuário em Ruby.

7

Page 8: Puppet overview

Área, dia/mês/ano

E se não utilizarmos o Puppet?

• Perde-se tempo, dinheiro e energia.• Comete-se mais erros, provoca downtime, fere sua

reputação. • No caso de um problema em um servidor,

reconstrui-lo ou pior, reconstruir vários seria uma grande tarefa resultando em mais downtime, erros, etc.

8

Page 9: Puppet overview

Área, dia/mês/ano

Puppet is serious business!

Algumas das empresas que utilizam Puppet:

9

Page 10: Puppet overview

Área, dia/mês/ano

Puppet is serious business!

Por trás do Puppet encontramos investidores como:

10

Page 11: Puppet overview

Área, dia/mês/ano

Puppet is serious business!

• Ferramenta Open – Apache License• Empresa oferece suporte e uma versão Enterprise• Feita por um SysAdmin para SysAdmin• Desenhada com base em DevOps• Funciona em modo cliente/servidor e autônomo

11

Page 12: Puppet overview

Área, dia/mês/ano

Resumindo

• Puppet é um Software que permite automação. Configuramos um servidor central e os agents sincronizam com ele.

• É um sistema descritivo. Decidimos se um arquivo deve existir, definimos permissões, conteúdo, decidimos se um pacote de software deve ser instalado, e a cada execução ele irá garantir que tudo fique do jeito que foi especificado

• Podemos fazer deploy da App e ainda ter o controle de versão!

12

Page 13: Puppet overview

Área, dia/mês/ano

Funcionamento do modo Cliente/Servidor do Puppet

• O agente gera um certificado digital• O Puppet master precisa autorizar esse certificado• Sem a autorização o agente não comunica com o

master• Toda a comunicação é segura!

13

Page 14: Puppet overview

Área, dia/mês/ano

Funcionamento do modo Cliente/Servidor do Puppet

14

Puppet Master

Puppet Agent

8139 Server

8140Client

Page 15: Puppet overview

Área, dia/mês/ano

Funcionamento do modo Cliente/Servidor do Puppet

15

Page 16: Puppet overview

Área, dia/mês/ano

Puppet Resources

Page 17: Puppet overview

Área, dia/mês/ano

Resources

Recurso é a unidade fundamental da modelagemCada recurso define um aspecto do sistema

São como Legos

Recursos são combinados para

que o sistema chegue ao estado

desejado

A ordem não importa!

Page 18: Puppet overview

Área, dia/mês/ano

Resources

Os recursos são escritos em uma linguagem de modelagem declarativaExemplo:

Sintaxe do recurso:• Tipo do recurso• Bloco ( colchetes )• Título do recurso separado do corpo por ‘:’• Corpo consiste em pares de atributo e valor• Tipo e título devem ser únicos

Page 19: Puppet overview

Área, dia/mês/ano

Resources

Recursos similares podem ser agrupados em Tipos

A descrição de um recurso é abstraída de sua implementação, o que permiteuma descrição ser válida para qualquer tipo de sistema. Isto devido a sua camadaDe abstração de recursos (RAL)

Page 20: Puppet overview

Área, dia/mês/ano

Resources

RAL :

Cada recurso possuiUm ou mais provedores

Provedores fazem a ligação entre os tipos derecurso e o SO correto.

Page 21: Puppet overview

Área, dia/mês/ano

Resources

Page 22: Puppet overview

Área, dia/mês/ano

Resources Types

Exemplo de abordagem de implementação:Pacotes

* Suporta 23 tipos de provedores de pacote* Declaramos se o pacote está presente ou ausente* Declaramos que o pacote sempre deverá estar em sua última versão

Serviço* Declaramos se o serviço está sempre rodando ou não* Declaramos se o serviço será carregado no boot* Declaramos se o serviço depende de um pacote ou arquivo

Arquivo* Especificamos permissões e donos* Declaramos diretórios e links simbólicos

Page 23: Puppet overview

Área, dia/mês/ano

Resources TypesExemplo instalação, configuração e inicialização do ApacheComo seria no CentOs

# yum install httpd

# chkconfig httpd on

# cp ~/httpd.conf /etc/httpd/conf/

# service httpd start

Page 24: Puppet overview

Área, dia/mês/ano

Resources TypesExemplo instalação, configuração e inicialização do ApacheComo seria no Debian

# aptitude install apache2

# insserv apache2

# cp ~/httpd.conf /etc/apache2/

# invoke-rc.d apache2 start

Page 25: Puppet overview

Área, dia/mês/ano

Resources TypesNo Puppet com apenas uma abordagempackage { 'apache2':

ensure => present,}service { 'apache2':

ensure => running,enable => true,}file { '/etc/apache2/httpd.conf':

ensure => present,mode => ‘0644’,owner => ‘root’,group => ‘root’,ensure => “puppet:///files/apache/httpd.conf”,

}

Page 26: Puppet overview

Área, dia/mês/ano

Resources TypesExemplo instalação, configuração do editor, ( independe do SO )

class editor {$vim = $operatingsystem ? {

'RedHat' => 'vim-enhanced','CentOS' => 'vim-enhanced','Fedora' => 'vim-enhanced',default => 'vim',

}package { "$vim":ensure => present,alias => 'vim',# provider => yum, apt, ports?}

}

node “jbossas01hom.network.ctbc” {include editor

}node “jbossas02hom.network.ctbc” {

include editor}

Page 27: Puppet overview

Área, dia/mês/ano

Resources TypesExemplo classe base – padronizando nós

class sudoers {package { 'sudoers':

ensure => installed,}file { '/etc/sudoers':

source => 'puppet:///files/sudo/sudoers',require => Package['sudoers'],owner => 'root',group => 'root',mode => 440,

}}

Pacote sudoers• Garantir que esteja

instalado

Arquivo /etc/sudoers• Conteúdo comum a

todas as máquinas• Requer pacote sudoers• Usuário root• Grupo root• Permissão 440

Page 28: Puppet overview

Área, dia/mês/ano

Resources TypesExemplo classe base

class ntpdate {package { 'ntpdate':

ensure => installed,}cron { 'sincroniza horario':

user => 'root',command => '/usr/sbin/ntpdate ntp.dominio',minute => 0,

}}

Pacote ntpdate• Garantir que esteja

instalado

cron• Usuário root• Comando 'ntpdate

ntp.dominio'• Executar de hora

em hora

Page 29: Puppet overview

Área, dia/mês/ano

Resources TypesExemplo classe baseclass locale {

package { 'locales':ensure => installed,}file { '/etc/default/locale':

ensure => present,content => 'LANG=pt_BR.UTF-8',require => Package['locales'],

}file { '/etc/locale.gen':

ensure => present,source => '/root/exemplo/locale.gen',require => Package['locales'],

}exec { '/usr/sbin/locale-gen':

subscribe => File['/etc/locale.gen'],refreshonly => true,require => [ Package['locales'], File['/etc/locale.gen'] ],

}}

Pacote locales - instalado

Arquivo /etc/default/locale - conteúdo

Arquivo /etc/locale.gen - conteúdo

Executar /usr/sbin/locale.gen• Sempre que locale.gen for

alterado• Só quando houver

alteração• Requer pacote locales e

arquivo locale.gen

Page 30: Puppet overview

Área, dia/mês/ano

Resources TypesExemplo classe base

class padrao {include sudoersinclude ntpdateinclude locale

}

node default{include padrao

}

Aplicar sudoersAplicar ntpdateAplicar locale

Todos os nós!• Aplicar configuração padrão

Page 31: Puppet overview

Área, dia/mês/ano

Resources TypesExemplo alterar dados em linha de comandopuppet:~# puppet resourse user paulohacuser { paulohac':

ensure => 'absent'}puppet:~# puppet resourse user paulohac ensure=presentnotice: /User[paulohac]/ensure: createduser { ‘paulohac':

ensure => 'present'}puppet:~# puppet resourse user paulohac ensure=absentnotice: /User[paulohac]/ensure: removeduser { ‘paulohac':

ensure => 'absent'}

Page 32: Puppet overview

Área, dia/mês/ano

Verificando mudançasPuppet Dashboard

Page 33: Puppet overview

Área, dia/mês/ano

Puppet Dashboard

Page 34: Puppet overview

Área, dia/mês/ano

Para a próxima semana

Page 35: Puppet overview

Área, dia/mês/ano

Procedimento manual de instalação do Agente EM12c em um JBoss

• Acessar servidor via SSH• Criar diretório para o agente e as bibliotecas• Deployar .jar de monitoramento • Copiar vários jars para um diretório de bibliotecas para que o

EM possa reconhecer.• Modificar a permissão para jboss• (Re)iniciar servidor• Talvez remover agente antigo ( Nagios )

35

Page 36: Puppet overview

Área, dia/mês/ano

Procedimento manual de instalação do Agente EM12c em um JBoss

Em números:

200 SERVIDORES20 MINUTOS POR SERVIDOR4000 MINUTOS OU 67 HORAS8 DIAS TRABALHANDO

• Sem documentação• Sem rastreamento de mudanças

36

Page 37: Puppet overview

Área, dia/mês/ano

Resultado concreto & Recomendações

Page 38: Puppet overview

Área, dia/mês/ano

Resultados

• Documentação Instantânea• Processos bem definidos• Ambiente Padronizado• Restore e backup de mudanças• Tarefas Automatizadas

Page 39: Puppet overview

Área, dia/mês/ano

Recomendações

• Usar o puppet para executar e controlar mudanças na infraestrutura• Parar de administrar e começar a desenvolver a infraestrutura• Nova demanda? Já executar utilizando o Puppet, escrevendo classes

e módulos para executar apenas uma vez e reaproveitar o código depois.

• Versionar as configurações (svn) criadas no Puppet.• Escreves módulos e classes da forma mais flexível possível.• Utilizar módulos prontos do GitHub e PuppetForge.

Page 40: Puppet overview

Área, dia/mês/ano

Puppet web

http://www.puppetlabs.comhttp://www.puppetlabs.com/blog/

Twitter@puppetlabs@puppetmasterd

IRCirc.freenode.org#puppet#puppet-br