Oficina Puppet latinoware

Preview:

DESCRIPTION

Slides do Oficina de Puppet no Latinoware 2012

Citation preview

Gerência de Configurações c/ PuppetPatrocínio: 4Linux

José Augusto (Guto) Carvalhogutocarvalho@4linux.com.br

Thursday, October 25, 12

- Desenvolvimento- Soluções e Aplicativos- Treinamento

Baseados em:- Softwares Livres- Open Source- Padrões Abertos

Para construir sua infraestrutura de TI e criar novas soluções de negócio.

Prestação de serviços em:- Consultoria- Suporte- Projetos

Thursday, October 25, 12

Consultor/SysAdmin (LPIC-3) na 4Linux

12 anos de experiência com tecnologias FOSS

Blogueiro FOSS há 6 anos no site gutocarvalho.net

Atuação em vários projetos de Governo no MDA, MINC, EBC/RADIOBRÁS, MPS/DATAPREV, ITI/PR, CEF, MD/SIPAM, DETRAN/DF, CAIXA

Há 2 anos trabalhando com gerência de configurações em ambientes virtualizados e clouds privadas em Brasília

whoami

Thursday, October 25, 12

Oficina PuppetThursday, October 25, 12

Plano de Trabalho

50 min de apresentação GC & Puppet

60 min hands on puppet serverless

60 min hands on puppet master

10 min para perguntas

Thursday, October 25, 12

AgendaApresentando Cenários

Gerência de Configurações e Infraestrutura como Código

Puppet como solução de Gerência de Configurações

Hands On: Puppet Serverless

Hands On: Puppet Master

Hands On: Puppet Dashboard

Perguntas

Thursday, October 25, 12

Virtualização - Tendência

Thursday, October 25, 12

Virt. e seus BenefíciosMenor consumo de energia

Melhor aproveitamento de espaço físico

Melhor aproveitamento de hardware (sem hw ocioso)

Maior segurança com isolamento de ambientes

Pode-se trabalhar disponibilidade e balanceamento

Facilidade de provisionamento e gerenciamento

Thursday, October 25, 12

Cloud Computing - Tendência

Thursday, October 25, 12

Cloud e seus BenefíciosHiper escalável

Rápida e elástica

Abstração de hardware

Infraestrutura dinâmica

Alta disponibilidade

Investimento atraente para projetos emergentes

Thursday, October 25, 12

ProvisionamentoPodemos criar 500 VM’s em

poucos minutos

Thursday, October 25, 12

Como Administrar 500 VM’s?

Thursday, October 25, 12

Configuração Manual?

Thursday, October 25, 12

Acesso Secure Shell (ssh)?

Thursday, October 25, 12

Host a Host?

Thursday, October 25, 12

Quantos SysAdmins são necessários para administrar 500 servidores?

Thursday, October 25, 12

Qual a velocidade nas mudanças em seu ambiente?

Thursday, October 25, 12

Qual a probabilidade de falhas decorrentes de mudanças manuais?

Thursday, October 25, 12

Você consegue manter todo o seu ambiente padronizado?

Thursday, October 25, 12

Seu custo com manutenção e equipes técnicas está aumentando?

Thursday, October 25, 12

Está difícil colocar suas configurações nos trilhos?

Thursday, October 25, 12

Como resolver isto?Como obtenho controle e

padronização em meu ambiente ?

Thursday, October 25, 12

Gerência de Configurações

Thursday, October 25, 12

Padronização

Thursday, October 25, 12

Automatização

Thursday, October 25, 12

Controle

Thursday, October 25, 12

Integridade

Thursday, October 25, 12

Desempenho

Thursday, October 25, 12

Agilidade nas mudanças

Thursday, October 25, 12

PuppetFerramenta de nova geração que implementa gerência de

configurações para seu ambiente.

Thursday, October 25, 12

Visão Rápida

Framework Open Source para Gerência de Configurações

Oferece um cojunto de ferramentas para manipular estados

Nos permite trabalhar a Infraestrutura como código

Funciona localmente ou via rede

Oferece uma linguagem declarativa para descrever configurações de sistemas e serviços

Thursday, October 25, 12

Sobre a ferramenta

Suporte a Linux, BSDs, Solaris e Windows (19 tipos de OS)

Criado por Luke Kaines (CEO e Fundador Puppetlabs)

Empresa PuppetLabs mantém a Ferramenta

Ferramenta OpenSource (Licença Apache)

Recebeu grandes investimentos

Empresa oferece Suporte Corporativo e Versão Enterprise

Thursday, October 25, 12

Feito por um SysAdmin para SysAdmins

Thursday, October 25, 12

Eficiente para uso DevOps

Thursday, October 25, 12

Especificações

Escrito em Ruby

Extensível usando código Ruby

Funciona em modo Autônomo (serverless)

Funciona em modo Cliente/Servidor usando API REST

Provê comunicação segura usando SSL

Thursday, October 25, 12

Quem usa o Puppet?

Thursday, October 25, 12

ArquiteturaComo funciona o Puppet?

Thursday, October 25, 12

Resource Abstraction Layer

Thursday, October 25, 12

Puppet: RAL

Resource Abstraction Layer = RAL

Camada de Abstração de Recursos

Fale o que você quer que seja feito

Não se preocupe em como será feito

O Puppet sabe como fazer

Thursday, October 25, 12

Instale Pacote X

Thursday, October 25, 12

Remova usuário Z

Thursday, October 25, 12

(Re)inicie serviço Y

Thursday, October 25, 12

Tratamento de Informações

O grande diferencial do Puppet é a forma como ele trata as informações de seus nodes

Thursday, October 25, 12

Tratamento de informações

No Puppet tudo é modelado e tratado como ‘dados’

O estado atual de um node (servidor) é um dado

Um pacote instalado em um node é um dado

Um usuário em um servidor é um dado

Thursday, October 25, 12

Os dados são inseridos em catálogos para serem utilizadosO catálogo é processado pelo node e as modificações

são aplicadas de acordo com o que foi declarado.

Thursday, October 25, 12

Processamento do Catálogo

1) Agente Requisita Catálogo1.1) Agente envia Fatos para Master2) Master Processa Fatos e Compara2.1) Master Produz e envia Catálogo3) Node Recebe, Compara e Aplica4) Node informa estado atual ao Master5) Sistema reflete catálogo

Thursday, October 25, 12

Idempotência

Thursday, October 25, 12

ConfiguraçõesVoláteis e Dados

Puppet MasterMódulos Estáticos

Ambiente Puppet

LDAP DNS MONIT SYSLOG

JBOSS APACHE MYSQL PGSQL

Puppet Agents

Camada de Aplicação

Camada de Serviços Estruturantes

Thursday, October 25, 12

Administração Instâncias

Administrar Cloud IaaS ou uma infra Virtualizada não é difícil

Escalabilidade automática é um recurso fantástico na Cloud

Balanceamento e Alta disponibiliade são recursos nativos de Virt.

Criar novos servidores é muito fácil tanto na Cloud quanto em Virt.

Administrar centenas de nodes? Aqui começa a complicar.

Thursday, October 25, 12

Quando seu ambiente começar a crescer demais você vai perceber administrá-lo não é tão simples.

Thursday, October 25, 12

Adicionando Nodes

ZABBIX

JBOSS

POSTGRESQL

MEMCACHED

NGINX

Thursday, October 25, 12

Adicionando Nodes

ZABBIX

POSTGRESQL

MEMCACHED

NGINX

Adicionar um novo node representa N mudanças

JBOSS

Thursday, October 25, 12

Adicionando Nodessysadmin-utilszabbix-agent

ntpconflocaleshostsusers

localmtasmtpdvimrc

backup-agentapt-repos

ZABBIX

POSTGRESQL

MEMCACHED

NGINX

JBOSS

Thursday, October 25, 12

Como o Puppet pode ajudar?

Automatizando todo o seu ambiente

Provendo maior produtividade com menor esforço

Padronizando seus nodes logo após a criação e instalação

Modificando configurações de forma controlada

Mantendo o estado declarado para cada node/instância

Thursday, October 25, 12

Insira o Puppet na imagem de instalação de seus nodes.

Thursday, October 25, 12

Pare de administrar e começe a desenvolver sua infra

Thursday, October 25, 12

Não tenha medo de realizar atualizações, o puppet faz pra você!

Thursday, October 25, 12

Você pode fazer deploy de sua APPVocê pode controlar a versão de sua APP

Thursday, October 25, 12

Como funciona o modo cliente/servidor?

Thursday, October 25, 12

Puppet Visão em Rede

Puppet Master

Puppet Client

8140 TCPClient

puppetd -t

8139 TCPServer

puppetrunSSL

Thursday, October 25, 12

Arquitetura Cliente/Servidor

O agente gera um certificado digital

O master precisa autorizar o certificado

Sem autorização o agente não pode se comunicar

Toda a comunicação entre agente e master é segura

Thursday, October 25, 12

Fluxo Cliente/Servidor

Instalação do node

Thursday, October 25, 12

Fluxo Cliente/Servidor

Instalação do node

Inicialização do puppet

Thursday, October 25, 12

Fluxo Cliente/Servidor

Instalação do node

Geração de Certificado

Inicialização do puppet

Thursday, October 25, 12

Fluxo Cliente/Servidor

Instalação do node

Geração de Certificado

Envio de Certificado

Inicialização do puppet

Thursday, October 25, 12

Fluxo Cliente/Servidor

Instalação do node

Geração de Certificado

Master Assina Certificado

Envio de Certificado

Inicialização do puppet

Thursday, October 25, 12

Fluxo Cliente/Servidor

Instalação do node

Geração de Certificado

Agente Sincroniza

Master Assina Certificado

Envio de Certificado

Inicialização do puppet

Thursday, October 25, 12

Fluxo Cliente/Servidor

Instalação do node

Geração de Certificado

Agente Sincroniza

Master Assina Certificado

Envio de Certificado

Inicialização do puppet

Modalidades de Assinatura de CertificadoAssinatura pode ser manualAssinatura pode ser automática por domínioAssinatura pode ser automática em qualquer requisição

Thursday, October 25, 12

O agente se comunica com o master a cada N minutos

Thursday, October 25, 12

E quais os recursos disponíveis para gerenciar sistemas e serviços?

Como manipulo estados do meu ambiente?

Thursday, October 25, 12

Recursos do Puppet

Resource Types

Parâmetros e Meta-parâmetros

Templates e Definições

Classes e Módulos

Funções e Condicionais

Thursday, October 25, 12

Puppet Resource Types

Arquivos e Diretórios

Usuários

Alias

Pacotes

Serviços

Yum Repos

Augeas

Hosts

SSH

Cron

O puppet oferece 38 tipos de recursos nativos, e você pode estendê-lo.

Thursday, October 25, 12

Resource Type: PackagesSuporte a 23 tipos de provedores de pacotes

Faz a abstração do OS

Declare se o pacote deve estar presente ou ausente

Declare se o pacote deve sempre estar em sua última versão

Thursday, October 25, 12

Resource Type: ServicesSuporta 11 tipos de sistemas INIT para inicializar serviços

Declare se um serviço deve estar sempre rodando

Declare se um serviço deve ser carregado no boot

Declare se um serviço depende de um pacote ou arquivo

Thursday, October 25, 12

Resource Type: FileEspecifique permissões e owners

Declare arquivos, diretórios e links

Controle de mudanças usando até 15 tipos de checksums

Thursday, October 25, 12

ExemplosThursday, October 25, 12

Instala, Configura e Inicia

# aptitude install apache2

# update-rc.d -f apache2 defaults

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

# invoke-rc.d apache2 start

debian-way

Thursday, October 25, 12

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

 service { 'apache2':

ensure => running,enable => true,}

file { 'httpd.conf':path => “/etc/apache2/httpd.conf”,source => “/etc/puppet/files/httpd.conf”,}

Instala, Configura e Inicia

Thursday, October 25, 12

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

 service { 'apache2':

ensure => running,enable => true,}

file { 'httpd.conf':path => “/etc/apache2/httpd.conf”,source => “/etc/puppet/files/httpd.conf”,}

Instala, Configura e Inicia

resource typeparameter

titlevalue

Thursday, October 25, 12

Base Classclass linux-server { include sysadmin-utils include zabbix-agent include ntpconf include locales include hosts include users include localmta include vimrc include backup-agent include apt-repos}

Thursday, October 25, 12

Declarando um nodenode “servidor.dominio” { include linux-server include module}

node “balancer.dominio” { include linux-server include cyrus::backend include postfix::hub include haproxy::mailproxy}

Thursday, October 25, 12

Variáveis e FatosFatos (facter)

vimpackage => vim-puppet,

apacheservice => apache2,

ntpconfrhel => ntp.conf.rhel,

Variáveisdomainfqdnhostnameinterfacesipaddress_eth0ipaddress_eth1ipaddress_lolsbdistidlsbdistrelease

=> hacklab,=> puppetmaster.hacklab,=> puppetmaster,=> eth0,eth1,lo,=> 10.0.2.15,=> 192.168.56.150,=> 127.0.0.1,=> debian,=> 6.0.5,

Thursday, October 25, 12

Condicionaiscase $operatingsystem { CentOS,RedHat: { $package_name = 'ntp', $service_name = 'ntpd', $conf_file = 'ntp.conf.el', } Debian,Ubuntu: { $package_name = 'ntp', $service_name = 'ntp', $conf_file = 'ntp.conf.debian', }}....

Thursday, October 25, 12

Definiçõesproxy::squid { 'ProxyFilial' : http_port squid_mode squid_hostname cache_mem maximum_object_size_in_memory maximum_object_size memory_replacement_policy cache_replacement_policy cache_dir cache_mgr cache_effective_user cache_effective_group dns_nameservers ips_squid }

=> '3128',=> 'transparent',=> 'proxy.4linux',=> '2 GB',=> '6 MB',=> '128 MB',=> 'heap GDSF',=> 'heap LFUDA',=> 'aufs /var/spool/squid 1024 16 256',=> 'monitora@4linux.com.br',=> 'proxy',=> 'proxy',=> '127.0.0.1 10.61.12.2 172.16.1.1',=> '127.0.0.1 192.168.12.3',

Thursday, October 25, 12

Templates

myorigin = <%= hostname %>mydestination = $myhostname, ..., localhost, <%= fqdn %>

Trecho do template postfix/main.cf

myorigin = servidor.dominiomydestination = $myhostname, ..., localhost, servidor.dominio

Substituição de variáveis por fatos

Thursday, October 25, 12

E como acompanho mudanças?

Thursday, October 25, 12

Puppet Dashboard

Thursday, October 25, 12

Posso fazer mudanças em tempo real?

Thursday, October 25, 12

Marionette Collective

Orquestrador de nodes

Execução de Tarefas Paralelas

Interação com centenas de nodes

Inventário descentralizado

Leitura de meta-dados do Puppet

Similar a Fabric e Capistrano

Thursday, October 25, 12

Hands On: Puppet Serverless

Thursday, October 25, 12

http://gutocarvalho.net/dokuwiki

Thursday, October 25, 12

Cenário

1 VM - Debian 64bits - para PuppetServerless (local)

Thursday, October 25, 12

instalando puppet

Thursday, October 25, 12

RAL

Thursday, October 25, 12

RAL

Resource Types

Parameters

Meta-parameters

Provedores

Thursday, October 25, 12

RAL: Modifica & Sincroniza

Verifica o estado atual de um recurso

Compara dados coletados

Aplica mudanças

Thursday, October 25, 12

Recursos

Thursday, October 25, 12

tipo  {  'título':    param1          =>  'valor',    param2          =>  'valor',    param3          =>  'valor',    metaparam1  =>  'valor',    metaparam2  =>  'valor',    function1    =>  'valor',    function2    =>  'valor',}

Exemplo de Recurso

Thursday, October 25, 12

Exemplo de Recurso: User

user  {  'gutocarvalho':    ensure                      =>  'present',    gid                            =>  '500',    home                          =>  '/home/gutocarvalho',    password                  =>  '$6$BE6a/5SJ...KfCy0',    password_max_age  =>  '99999',    password_min_age  =>  '0',    shell                        =>  '/bin/bash',    uid                            =>  '500',}

Thursday, October 25, 12

Recurso, Título, Atributos

Thursday, October 25, 12

puppet resourcevamos manipular estados

usando o comando resource

Thursday, October 25, 12

puppet resource user{

Thursday, October 25, 12

puppet resource package

Thursday, October 25, 12

puppet resource service

Thursday, October 25, 12

resource typesvamos aprender a utilizar tipos distintos de recursos, inserí-los

em manifests e aplicá-los

Thursday, October 25, 12

manifest

Thursday, October 25, 12

puppet apply manifest.pp

Thursday, October 25, 12

resource type: file

Thursday, October 25, 12

resource type: package

Thursday, October 25, 12

resource type: service

Thursday, October 25, 12

resource type: exec

Thursday, October 25, 12

resource type: cron

Thursday, October 25, 12

resource type: host

Thursday, October 25, 12

meta-parâmetrosvamos aprender a utilizar os meta-

parâmetros, eles podem ser utilizados com praticamente todos os resource

types do puppet

Thursday, October 25, 12

meta-parameter: require

Thursday, October 25, 12

meta-parameter: notify

Thursday, October 25, 12

meta-parameter: alias

Thursday, October 25, 12

meta-parameter: subscribe

Thursday, October 25, 12

configuração em trio

Thursday, October 25, 12

package  {  'pacote':                ensure  =>  present,        }  service  {  'servico':                ensure          =>  running,                enable          =>  true,                hasrestart  =>  true,                hasstatus    =>  true,                require        =>  Package['pacote'],        }  file  {  'main.cf':                path        =>  "/etc/pacote/pacote.conf",                source    =>  "/root/puppet/pacote.conf",                owner      =>  'root',                group      =>  'root',                mode        =>  644,                require  =>  Package['pacote'],                notify    =>  Service['servico'],        }

Exemplo Conceitual Trio

Thursday, October 25, 12

Exemplo Real Trio: Postfixpackage  {  'postfix':                ensure  =>  present,}  service  {  'postfix':                ensure          =>  running,                enable          =>  true,                hasrestart  =>  true,                hasstatus    =>  true,                require        =>  Package['postfix'],}  file  {  'main.cf':                path        =>  "/etc/postfix/main.cf",                source    =>  '/root/puppet/main.cf',                owner      =>  'root',                group      =>  'root',                mode        =>  644,                require  =>  Package['postfix'],                notify    =>  Service['postfix'],}

Thursday, October 25, 12

Variáveis, Fatos e Condicionais

Vamos aprender a trabalhar com variáveis, fatos e

condicionais dentro de nossos manifests no puppet

Thursday, October 25, 12

variáveis

Thursday, October 25, 12

fatos

Thursday, October 25, 12

condições

Thursday, October 25, 12

casos

Thursday, October 25, 12

seletores

Thursday, October 25, 12

ClassesVamos aprender a agrupar

configurações dentro de classes

Thursday, October 25, 12

TemplatesVamos aprender a trabalhar com arquivos dinâmicos que

utilizam variáveis e fatos

Thursday, October 25, 12

noop

Thursday, October 25, 12

filebucket local

Thursday, October 25, 12

cenários para uso de puppet serverless

Thursday, October 25, 12

Hands On: Puppet Master

Thursday, October 25, 12

http://gutocarvalho.net/dokuwiki

Thursday, October 25, 12

Cenário

1 VM - Debian 64bits - para PuppetMaster (servidor)

1 VM - Debian 64bits - para PuppetAgent (node)

1 VM - Debian 64bits - para PuppetDashBoard (dashboard)

Thursday, October 25, 12

PuppetMaster: Teoria

API REST

TCP/IP

Certificados Digitais

SSL

Thursday, October 25, 12

Instalando puppetmaster

Thursday, October 25, 12

DNS, Host, Hostname

Thursday, October 25, 12

Estrutura do Master

Thursday, October 25, 12

Instalando PuppetAgent

Thursday, October 25, 12

DNS, Host, Hostname

Thursday, October 25, 12

Estrutura do Agent

Thursday, October 25, 12

Primeiro Contato Agent/Master

Thursday, October 25, 12

Manipulando Certificados no PuppetMaster

Thursday, October 25, 12

NodesVamos entender o que é um

node e como declaramos uma configuração para ele.

Thursday, October 25, 12

Empurrando uma Configuração

Thursday, October 25, 12

ClassesVamos aprender a trabalhar

com classes em modo master/agent.

Thursday, October 25, 12

DefiniçõesVamos aprender a trabalhar com classes parametrizadas

em modo master/agent.

Thursday, October 25, 12

MódulosVamos aprender a trabalhar

com módulos no puppet.

Thursday, October 25, 12

Organizando o Master

Thursday, October 25, 12

EscalandoVamos aprender a substituir o

Webrick pelo Apache com ModPassenger para que o

puppet Escale.

Thursday, October 25, 12

instalando puppetmaster-passenger

Thursday, October 25, 12

Hands On: Puppet Dashboard

Thursday, October 25, 12

instalando o dashboard

Thursday, October 25, 12

integrando master ao dashboard

Thursday, October 25, 12

habilitando reports nos agents

Thursday, October 25, 12

Qual o resultado concreto?

Thursday, October 25, 12

Documentação Instantânea

Thursday, October 25, 12

Restore e backup de mudanças

Thursday, October 25, 12

Processos bem definidos

Thursday, October 25, 12

Ambiente Padronizado

Thursday, October 25, 12

Tarefas Automatizadas

Thursday, October 25, 12

Quais os Benefícios Reais?Thursday, October 25, 12

Benefícios ReaisMaior produtividade em menor tempo

Poucos SysAdmins para muitos nodes

Diminuição de falhas humanas

Maior controle de todo o seu parque

Diminuição do tempo gasto em mudanças

Diminuição do custo de manutenção

Thursday, October 25, 12

Tecnologia trabalhando para você

Thursday, October 25, 12

Puppet & Cloud IaaSCloud Tools (FOSS) Cloud Hosts

Ganeti

Thursday, October 25, 12

Boas PráticasThursday, October 25, 12

Use API do fornecedor

Thursday, October 25, 12

Desenvolva sua Infra

Thursday, October 25, 12

Versione suas configurações

Thursday, October 25, 12

Reaproveite Código

Thursday, October 25, 12

GitHub & PuppetForge

Thursday, October 25, 12

Pesquise!

Thursday, October 25, 12

Puppet em números

727 pessoas online no canal #puppet da irc.freenode.net

8.500 repositórios no GitHub

450 módulos no PuppetForge

4457 usuários ativos na lista puppet-users com 7795 tópicos de discussão

Dados coletados em 2012-08-06 às 10:34 PMThursday, October 25, 12

Site/Bloghttp://www.puppetlabs.comhttp://www.puppetlabs.com/blog/http://puppet-br.org/

Twitter@puppetlabs

GitHubhttp://www.github.com/puppelabs

Puppet na rede

Google GroupsPuppet-camp,puppet-users,puppet-users-br,puppet-dev

IRCirc.freenode.org#puppet#puppet-br

Thursday, October 25, 12

4Linux & PuppetLabs1o Parceiro no Brasil

Consultores Especializados

Cases no Governo Federal

Suporte Puppet Enterprise

Treinamentos Puppet Master

Thursday, October 25, 12

Perguntas?Thursday, October 25, 12

Obrigado!

Twitter @4linuxBR

Facebook /4Linux

Twitter @gutocarvalhogutocarvalho@4linux.com.br

4linux na rede Contato

slideshare.net/gutocarvalhohttp://gutocarvalho.net

Thursday, October 25, 12