Download - Oficina Puppet latinoware
Gerência de Configurações c/ PuppetPatrocínio: 4Linux
José Augusto (Guto) [email protected]
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',=> '[email protected]',=> '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 @[email protected]
4linux na rede Contato
slideshare.net/gutocarvalhohttp://gutocarvalho.net
Thursday, October 25, 12