Oficina de infraestrutura como código (apresentando o Puppet)

Preview:

DESCRIPTION

A oficina apresenta o conceito de gerência de configurações e apresenta o Puppet como solução para implantar esse tipo de gerência.

Citation preview

Brasília/DF 2013-04-27

Infraestrutura como código - Apresentando PuppetGuto Carvalho

sexta-feira, 16 de agosto de 13

Oficina infraestrutura como código Apresentando: Puppet

Guto Carvalhogutocarvalho@gmail.com

sexta-feira, 16 de agosto de 13

José Augusto (Guto) Carvalho

Consultor/SysAdmin/DevOp (LPIC-3 e PCP-201);

14 anos de experiência com TI e FOSS;

Blogueiro TI/FOSS há 10 anos no site gutocarvalho.net;

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

Entusiasta DevOps (sysadmin em recuperação) desde 2010.

whoami

FOSS => Free and Open Source Software

sexta-feira, 16 de agosto de 13

Plano de Trabalho

50 minutos de apresentação

10 minutos para perguntas

3 horas de mão na massa

Slidedeck disponível em slideshare.com/gutocarvalho

sexta-feira, 16 de agosto de 13

Agenda

Teoria

Configuração de VMs

Instalação de Puppet

Mão na Massa (Resource Types)

Dashboard & Foreman

sexta-feira, 16 de agosto de 13

Administração de sistemas e serviços

sexta-feira, 16 de agosto de 13

Virtualização

sexta-feira, 16 de agosto de 13

Cloud Computing

sexta-feira, 16 de agosto de 13

Administração Manual

sexta-feira, 16 de agosto de 13

Administração Manual

Tarefas repetitivas

Não existem padrões

Não existem procedimentos

sexta-feira, 16 de agosto de 13

Cada sysadmin faz do seu jeito

sexta-feira, 16 de agosto de 13

Tarefas RepetitivasCriaçã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

sexta-feira, 16 de agosto de 13

A medida que o parque aumenta administrá-lo fica mais complicado

sexta-feira, 16 de agosto de 13

Você vai percerber que...Fica mais difícil identificar e corrigir problemas

Fica mais difícil manter ambientes complexos funcionando

Fica mais difícil manter seu parque padronizado

Sua produtividade diminui a media que o ambiente cresce

Sua capacidade de entrega não é mais a mesma

Você nunca chega em casa no mesmo horário

Você trabalha muitos finais de semana e madrugadas

sexta-feira, 16 de agosto de 13

Maior risco de falhas

sexta-feira, 16 de agosto de 13

Maior tempo gasto para executar mudanças

sexta-feira, 16 de agosto de 13

Criação de usuário

450 máquinas 3 minutos por máquina

1350 minutos ou 22,5 horas450 trocas de senhas

sexta-feira, 16 de agosto de 13

Procedimento para criar usuário

Acessar o servidor por ssh

Se tornar root

Criar usuário

Especificar senha temporária

Especificar permissões no sudoers

sexta-feira, 16 de agosto de 13

Instalação de agente de

monitoramento450 máquinas

10 minutos por máquina4500 minutos ou 75 horas9 dias trabalhando 8 h.p.d

sexta-feira, 16 de agosto de 13

Procedimento para instalar zabbix

Acessar servidor via ssh

Adicionar repositório APT

Atualizar índices

Instalar pacote

Ajustar arquivo zabbix_agentd.conf

Reiniciar agente zabbix

Remover agente antigo (nagios).

sexta-feira, 16 de agosto de 13

Documentação inexistente

sexta-feira, 16 de agosto de 13

Não há rastreamento de mudanças

sexta-feira, 16 de agosto de 13

sexta-feira, 16 de agosto de 13

Você começa a ter a sensação de estar sendo engolido por seu ambiente?

sexta-feira, 16 de agosto de 13

Como resolver estes problemas?Como obtenho controle e padronização em meu ambiente ?

sexta-feira, 16 de agosto de 13

Gerência de Configurações

sexta-feira, 16 de agosto de 13

Padronização

sexta-feira, 16 de agosto de 13

Automatização

sexta-feira, 16 de agosto de 13

Controle

sexta-feira, 16 de agosto de 13

Integridade

sexta-feira, 16 de agosto de 13

Agilidade nas mudanças

sexta-feira, 16 de agosto de 13

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

configurações para seu ambiente.

sexta-feira, 16 de agosto de 13

Puppet em poucas palavras

sexta-feira, 16 de agosto de 13

Puppet em poucas palavras

Nos permite parar de administrar e começar a desenvolver nossa infra

Nos permite reaproveitar código para construir configurações

Oferece linguagem declarativa para criar configurações

Sintaxe simples, prática e natural para sysadmins

Oferece suporte a Linux, BDBs, OSX e Windows

sexta-feira, 16 de agosto de 13

Sobre a ferramenta

sexta-feira, 16 de agosto de 13

Sobre a ferramenta

Ferramenta Open Source - Apache License

Ferramenta mantida pela empresa Puppetlabs

Empresa oferece suporte e versão enterprise

Criado por Luke Kaines (CEO e Fundador Puppetlabs)

Cases de uso com gandes players (HP, CISCO, VMWARE...)

Recebeu pesados investimentos (VMWARE 30bi)

sexta-feira, 16 de agosto de 13

Sobre a ferramenta

Ferramenta Open Source - Apache License

Ferramenta mantida pela empresa Puppetlabs

Empresa oferece suporte e versão enterprise

Criado por Luke Kaines (CEO e Fundador Puppetlabs)

Cases de uso com gandes players (HP, CISCO, VMWARE...)

Recebeu pesados investimentos (VMWARE 30bi)

sexta-feira, 16 de agosto de 13

Feito por um SysAdmin para SysAdmins

sexta-feira, 16 de agosto de 13

Desenhada para uso DevOps

sexta-feira, 16 de agosto de 13

sexta-feira, 16 de agosto de 13

DEVOPS

Developers (Dev)Operations (Ops)

sexta-feira, 16 de agosto de 13

Visão DevOpssexta-feira, 16 de agosto de 13

Veja palestra DevOps do Flisol/DF 2013

sexta-feira, 16 de agosto de 13

Tech Specs

sexta-feira, 16 de agosto de 13

Tech SpecsEscrito em Ruby

Extensível usando código Ruby

Funciona em modo autônomo e serverless

Funciona em modo cliente.servidor

Usa RESTful API

Oferece comunicação segura com uso de certificados digitais

sexta-feira, 16 de agosto de 13

Cases Puppet Enterprise

sexta-feira, 16 de agosto de 13

Cases Puppet Gov Brasil

Detran/DFEBC - Empresa Brasil de ComunicaçãoCAIXA (expresso)CAIXA (estação financeira)CAIXA (proinfo)SERPRO....

sexta-feira, 16 de agosto de 13

ArquiteturaComo funciona o Puppet?

sexta-feira, 16 de agosto de 13

Resource Abstraction Layer(RAL)

sexta-feira, 16 de agosto de 13

Resource Abstraction Layer

sexta-feira, 16 de agosto de 13

Resource Abstraction Layer

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

sexta-feira, 16 de agosto de 13

Instale Pacote X

sexta-feira, 16 de agosto de 13

Remova usuário Z

sexta-feira, 16 de agosto de 13

(Re)inicie serviço Y

sexta-feira, 16 de agosto de 13

Tratamento de Informações

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

sexta-feira, 16 de agosto de 13

Tratamento de informações

sexta-feira, 16 de agosto de 13

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

sexta-feira, 16 de agosto de 13

Os dados são inseridos em catálogos pelo master

O catálogo é processado pelo node e as modificações são aplicadas de acordo com o que foi declarado.

sexta-feira, 16 de agosto de 13

Processamento do Catálogo

1) Agente Requisita Catálogo2) Agente envia Fatos para Master3) Master Processa Fatos e Compara4) Master Produz e envia Catálogo5) Node Recebe, Compara e Aplica6) Node informa estado atual ao Master7) Sistema reflete catálogo

sexta-feira, 16 de agosto de 13

Processamento do Catálogo

1) Agente Requisita Catálogo2) Agente envia Fatos para Master3) Master Processa Fatos e Compara4) Master Produz e envia Catálogo5) Node Recebe, Compara e Aplica6) Node informa estado atual ao Master7) Sistema reflete catálogo

sexta-feira, 16 de agosto de 13

Idempotência

sexta-feira, 16 de agosto de 13

ConfiguraçõesVoláteis e Dados

Puppet MasterMódulos Estáticos

Visão ampla do Puppet

LDAP DNS MONIT SYSLOG

JBOSS APACHE MYSQL PGSQL

Puppet Agents

Camada de Aplicação

Camada de Serviços Estruturantes

sexta-feira, 16 de agosto de 13

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

sexta-feira, 16 de agosto de 13

sexta-feira, 16 de agosto de 13

Como funciona o modo cliente/servidor?

sexta-feira, 16 de agosto de 13

Modo 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

sexta-feira, 16 de agosto de 13

Puppet Visão em Rede

Puppet Master

Puppet Client

8140 TCPClient

puppetd -t

8139 TCPServer

puppetkickSSL

sexta-feira, 16 de agosto de 13

Fluxo Cliente/Servidor

Instalação do node

sexta-feira, 16 de agosto de 13

Fluxo Cliente/Servidor

Instalação do node

Inicialização do puppet

sexta-feira, 16 de agosto de 13

Fluxo Cliente/Servidor

Instalação do node

Geração de Certificado

Inicialização do puppet

sexta-feira, 16 de agosto de 13

Fluxo Cliente/Servidor

Instalação do node

Geração de Certificado

Envio de Certificado

Inicialização do puppet

sexta-feira, 16 de agosto de 13

Fluxo Cliente/Servidor

Instalação do node

Geração de Certificado

Master Assina Certificado

Envio de Certificado

Inicialização do puppet

sexta-feira, 16 de agosto de 13

Fluxo Cliente/Servidor

Instalação do node

Geração de Certificado

Agente Sincroniza

Master Assina Certificado

Envio de Certificado

Inicialização do puppet

sexta-feira, 16 de agosto de 13

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

sexta-feira, 16 de agosto de 13

O agente se comunica com o master a cada N minutos

sexta-feira, 16 de agosto de 13

Posso forçar execução do agentede forma remota?

sexta-feira, 16 de agosto de 13

sexta-feira, 16 de agosto de 13

Quais recursos estão disponíveis?

sexta-feira, 16 de agosto de 13

Recursos do Puppet

Resource Types

Parâmetros e Meta-parâmetros

Templates e Definições

Classes e Módulos

Funções e Condicionais

sexta-feira, 16 de agosto de 13

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.

sexta-feira, 16 de agosto de 13

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

sexta-feira, 16 de agosto de 13

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

sexta-feira, 16 de agosto de 13

Resource Type: FileEspecifique permissões e owners

Declare arquivos, diretórios e links

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

sexta-feira, 16 de agosto de 13

Exemplossexta-feira, 16 de agosto de 13

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

sexta-feira, 16 de agosto de 13

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

sexta-feira, 16 de agosto de 13

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

sexta-feira, 16 de agosto de 13

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}

sexta-feira, 16 de agosto de 13

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}

sexta-feira, 16 de agosto de 13

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,

sexta-feira, 16 de agosto de 13

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', }}....

sexta-feira, 16 de agosto de 13

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',

sexta-feira, 16 de agosto de 13

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

sexta-feira, 16 de agosto de 13

Como acompanho mudanças?

sexta-feira, 16 de agosto de 13

Puppet Dashboard

sexta-feira, 16 de agosto de 13

sexta-feira, 16 de agosto de 13

Posso fazer mudanças em tempo real?

sexta-feira, 16 de agosto de 13

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

sexta-feira, 16 de agosto de 13

Mão na Massasexta-feira, 16 de agosto de 13

http://gutocarvalho.net/dokuwikihttp://172.16.61.105/

puppet serverless

sexta-feira, 16 de agosto de 13

Demonstração do puppet em modo autônomo

sexta-feira, 16 de agosto de 13

puppet resource (ral)

sexta-feira, 16 de agosto de 13

puppet apply manifest.pp

sexta-feira, 16 de agosto de 13

manifests

sexta-feira, 16 de agosto de 13

resource type file

sexta-feira, 16 de agosto de 13

resource type package

sexta-feira, 16 de agosto de 13

resource type service

sexta-feira, 16 de agosto de 13

resource type user

sexta-feira, 16 de agosto de 13

condicionais, templates, definições...

sexta-feira, 16 de agosto de 13

puppet filebucket

sexta-feira, 16 de agosto de 13

puppet parser

sexta-feira, 16 de agosto de 13

Demonstração do puppet modo cliente servidor

sexta-feira, 16 de agosto de 13

site.pp

sexta-feira, 16 de agosto de 13

nodes

sexta-feira, 16 de agosto de 13

classes

sexta-feira, 16 de agosto de 13

módulos

sexta-feira, 16 de agosto de 13

puppet agent --test

sexta-feira, 16 de agosto de 13

Demonstração mcollective

sexta-feira, 16 de agosto de 13

mco puppet runonce -v

sexta-feira, 16 de agosto de 13

mco facts operatingsystem -v

sexta-feira, 16 de agosto de 13

mco shell “uptime” -v

sexta-feira, 16 de agosto de 13

Puppet Labssexta-feira, 16 de agosto de 13

Qual o resultado concreto?

sexta-feira, 16 de agosto de 13

Documentação Instantânea

sexta-feira, 16 de agosto de 13

Processos bem definidos

sexta-feira, 16 de agosto de 13

Ambiente Padronizado

sexta-feira, 16 de agosto de 13

Restore e backup de mudanças

sexta-feira, 16 de agosto de 13

Tarefas Automatizadas

sexta-feira, 16 de agosto de 13

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

Você chegará cedo em casa e suas madrugas e finais de semana serão seus

sexta-feira, 16 de agosto de 13

Comparando

Ambiente com 450 nodesAmbiente com 450 nodesAmbiente com 450 nodes

modo manual puppet

instalando zabbix 75 horas 10 minutos

criando usuário 22 horas 10 minutos

sexta-feira, 16 de agosto de 13

Tecnologia trabalhando para você

sexta-feira, 16 de agosto de 13

Boas Práticassexta-feira, 16 de agosto de 13

Insira o puppet nos templates de seu hypervisor

sexta-feira, 16 de agosto de 13

Use o puppet para executar e controlar mudanças em seu parque

sexta-feira, 16 de agosto de 13

Para de administrar e comece a desenvolver a sua infraestrutura

sexta-feira, 16 de agosto de 13

Nova demanda? Já execute utilizando o Puppet, escreva classes e módulos para que você só tenha que fazer isto 1 vez e reaproveitar o código depois.

sexta-feira, 16 de agosto de 13

Versione as configurações (git) criadas no Puppet.

sexta-feira, 16 de agosto de 13

Reaproveite código, escreva seus módulos da forma mais flexível possível.

sexta-feira, 16 de agosto de 13

Não precisa começar do zero, use módulo prontos do GitHub e

PuppetForge.

sexta-feira, 16 de agosto de 13

Pesquise, há muita informação sobre puppet na rede!

sexta-feira, 16 de agosto de 13

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 PMsexta-feira, 16 de agosto de 13

Puppet Labssexta-feira, 16 de agosto de 13

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

sexta-feira, 16 de agosto de 13

Perguntas?

sexta-feira, 16 de agosto de 13

Obrigado!

Linkedin: http://br.linkedin.com/in/gutocarv

E-mail: gutocarvalho@gmail.com

Contato

Slides: slideshare.net/gutocarvalhoBlog: gutocarvalho.net

Twitter: @gutocarvalho

sexta-feira, 16 de agosto de 13

Recommended