Gerência de Configurações em CloudPuppet em ambientes IaaS
José Augusto (Guto) [email protected]
Wednesday, August 8, 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
Há 2 anos trabalhando com gerência de configurações em ambientes virtualizados e clouds privadas em Brasília
whoami
Wednesday, August 8, 12
Puppet em IaaSWednesday, August 8, 12
Plano de Trabalho
40 minutos de apresentação
5 minutos para perguntas
Wednesday, August 8, 12
Agenda
Gerência de Configurações
Infraestrutura como Código
Puppet como solução de Gerência de Configurações
Puppet Arquitetura, Funcionamento e Recursos
Perguntas
Wednesday, August 8, 12
Cloud Computing - Tendência
Wednesday, August 8, 12
Cloud e seus BenefíciosHiper escalável
Rápida e elástica
Abstração de hardware
Infraestrutura dinâmica
Alta disponibilidade
Investimento atraente
Wednesday, August 8, 12
ProvisionamentoPodemos criar 500 VM’s em
poucos minutos
Wednesday, August 8, 12
Como Administrar 500 VM’s?
Wednesday, August 8, 12
Configuração Manual?
Wednesday, August 8, 12
Acesso Secure Shell (ssh)?
Wednesday, August 8, 12
Host a Host?
Wednesday, August 8, 12
Quantos SysAdmins são necessários para administrar 500 servidores?
Wednesday, August 8, 12
Qual a velocidade nas mudanças em seu ambiente?
Wednesday, August 8, 12
Qual a probabilidade de falhas decorrentes de mudanças manuais?
Wednesday, August 8, 12
Você consegue manter todo o seu ambiente padronizado?
Wednesday, August 8, 12
Seu custo com manutenção e equipes técnicas está aumentando?
Wednesday, August 8, 12
Está difícil colocar suas configurações nos trilhos?
Wednesday, August 8, 12
Como resolver isto?Como obtenho controle e
padronização em meu ambiente ?
Wednesday, August 8, 12
Gerência de Configurações
Wednesday, August 8, 12
Padronização
Wednesday, August 8, 12
Automatização
Wednesday, August 8, 12
Controle
Wednesday, August 8, 12
Integridade
Wednesday, August 8, 12
Desempenho
Wednesday, August 8, 12
Agilidade nas mudanças
Wednesday, August 8, 12
PuppetFerramenta de nova geração que implementa gerência de
configurações para seu ambiente.
Wednesday, August 8, 12
Visão Rápida
Infraestrutura como código
Pare de administrar e comece a desenvolver sua infra
Reuse código para gerenciar seu parque com facilidade
Linguagem declarativa para descrever configurações (DSL)
Wednesday, August 8, 12
Sobre a ferramentaSuporte a Linux, BSDs, Solaris e Windows
Criado por Luke Kaines (CEO e Fundador)
Empresa PuppetLabs mantém a Ferramenta
Ferramenta OpenSource (Licença Apache)
Recebeu grandes investimentos
Empresa oferece Suporte e Versão Enterprise
Wednesday, August 8, 12
Feito por um SysAdmin para SysAdmins
Wednesday, August 8, 12
Eficiente para uso DevOps
Wednesday, August 8, 12
EspecificaçõesEscrito em Ruby
Extensível usando código Ruby
Funciona em modo Autônomo (serverless)
Funciona em modo Cliente/Servidor
RESTful API
Comunicação segura (SSL Certificate)
Wednesday, August 8, 12
Cases Puppet
Wednesday, August 8, 12
ArquiteturaComo funciona o Puppet?
Wednesday, August 8, 12
Resource Abstraction Layer(RAL)
Wednesday, August 8, 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
Wednesday, August 8, 12
Instale Pacote X
Wednesday, August 8, 12
Remova usuário Z
Wednesday, August 8, 12
(Re)inicie serviço Y
Wednesday, August 8, 12
Tratamento de Informações
O grande diferencial do Puppet é a forma como ele trata as informações de seus nodes
Wednesday, August 8, 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
Wednesday, August 8, 12
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.
Wednesday, August 8, 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
Wednesday, August 8, 12
Idempotência
Wednesday, August 8, 12
ConfiguraçõesVoláteis e Dados
Puppet MasterMódulos Estáticos
Funcionamento
LDAP DNS MONIT SYSLOG
JBOSS APACHE MYSQL PGSQL
Puppet Agents
Camada de Aplicação
Camada de Serviços Estruturantes
Wednesday, August 8, 12
Puppet Visão em Rede
Puppet Master
Puppet Client
8140 TCPClient
puppetd -t
8139 TCPServer
puppetrunSSL
Wednesday, August 8, 12
Administração IaaS
Administrar uma cloud IaaS não é algo complicado
Escalabilidade automática é um recurso fantástico
Ter elasticidade é fundamental
Criar novos servidores é muito fácil
Administrar centenas de nodes? Aqui começa a complicar.
Wednesday, August 8, 12
Quando seu ambiente IaaS começar a crescer demais você vai perceber administrá-lo não é tão simples.
Wednesday, August 8, 12
Adicionando Nodes
ZABBIX
JBOSS
POSTGRESQL
MEMCACHED
NGINX
Wednesday, August 8, 12
Adicionando Nodes
ZABBIX
POSTGRESQL
MEMCACHED
NGINX
Adicionar um novo node representa N mudanças
JBOSS
Wednesday, August 8, 12
Adicionando Nodessysadmin-utilszabbix-agent
ntpconflocaleshostsusers
localmtasmtpdvimrc
backup-agentapt-repos
ZABBIX
POSTGRESQL
MEMCACHED
NGINX
JBOSS
Wednesday, August 8, 12
Como o Puppet pode ajudar?
Automatizando seu ambiente
Gerando maior produtividade com menor esforço
Padronizando seus nodes logo após a instalação
Modificando configurações de forma controlada
Wednesday, August 8, 12
Insira o Puppet na imagem de instalação de seus nodes.
Wednesday, August 8, 12
Não tenha medo de realizar atualizações, o puppet faz pra você!
Wednesday, August 8, 12
Você pode fazer deploy de sua APPVocê pode controlar a versão de sua APP
Wednesday, August 8, 12
Como funciona o modo cliente/servidor?
Wednesday, August 8, 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
Wednesday, August 8, 12
Fluxo Cliente/Servidor
Instalação do node
Wednesday, August 8, 12
Fluxo Cliente/Servidor
Instalação do node
Inicialização do puppet
Wednesday, August 8, 12
Fluxo Cliente/Servidor
Instalação do node
Geração de Certificado
Inicialização do puppet
Wednesday, August 8, 12
Fluxo Cliente/Servidor
Instalação do node
Geração de Certificado
Envio de Certificado
Inicialização do puppet
Wednesday, August 8, 12
Fluxo Cliente/Servidor
Instalação do node
Geração de Certificado
Master Assina Certificado
Envio de Certificado
Inicialização do puppet
Wednesday, August 8, 12
Fluxo Cliente/Servidor
Instalação do node
Geração de Certificado
Agente Sincroniza
Master Assina Certificado
Envio de Certificado
Inicialização do puppet
Wednesday, August 8, 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
Wednesday, August 8, 12
O agente se comunica com o master a cada N minutos
Wednesday, August 8, 12
Quais recursos estão disponíveis?
Wednesday, August 8, 12
Recursos do Puppet
Resource Types
Parâmetros e Meta-parâmetros
Templates e Definições
Classes e Módulos
Funções e Condicionais
Wednesday, August 8, 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.
Wednesday, August 8, 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
Wednesday, August 8, 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
Wednesday, August 8, 12
Resource Type: FileEspecifique permissões e owners
Declare arquivos, diretórios e links
Controle de mudanças usando até 15 tipos de checksums
Wednesday, August 8, 12
ExemplosWednesday, August 8, 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
Wednesday, August 8, 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
Wednesday, August 8, 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
Wednesday, August 8, 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}
Wednesday, August 8, 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}
Wednesday, August 8, 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,
Wednesday, August 8, 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', }}....
Wednesday, August 8, 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',
Wednesday, August 8, 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
Wednesday, August 8, 12
Como acompanho mudanças?
Wednesday, August 8, 12
Puppet Dashboard
Wednesday, August 8, 12
Posso fazer mudanças em tempo real?
Wednesday, August 8, 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
Wednesday, August 8, 12
Qual o resultado concreto?
Wednesday, August 8, 12
Documentação Instantânea
Wednesday, August 8, 12
Restore e backup de mudanças
Wednesday, August 8, 12
Processos bem definidos
Wednesday, August 8, 12
Ambiente Padronizado
Wednesday, August 8, 12
Tarefas Automatizadas
Wednesday, August 8, 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
Wednesday, August 8, 12
Tecnologia trabalhando para você
Wednesday, August 8, 12
Puppet e a nuvem
Wednesday, August 8, 12
Puppet & Cloud IaaSCloud Tools (FOSS) Cloud Hosts
Ganeti
Wednesday, August 8, 12
Boas PráticasWednesday, August 8, 12
Use API do fornecedor
Wednesday, August 8, 12
Desenvolva sua Infra
Wednesday, August 8, 12
Versione suas configurações
Wednesday, August 8, 12
Reaproveite Código
Wednesday, August 8, 12
GitHub & PuppetForge
Wednesday, August 8, 12
Pesquise!
Wednesday, August 8, 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 PMWednesday, August 8, 12
4Linux & PuppetLabs1o Parceiro no Brasil
Consultores Especializados
Cases no Governo Federal
Suporte Puppet Enterprise
Treinamentos Puppet Master
Wednesday, August 8, 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
Wednesday, August 8, 12
Perguntas?
Wednesday, August 8, 12
Obrigado!
Twitter @[email protected]
Contato
slideshare.net/gutocarvalhogutocarvalho.net
Wednesday, August 8, 12
Recursos Puppet Chef CfEnginePull Yes Yes YesPush No No NoIdempotence Yes Yes YesConfig Language Declarative Ruby DeclarativeWeb UI Yes Yes YesOS Support *NIX,Windows *NIX,Windows *NIX,WindowsLicense Apache Apache GPLCompany Puppetlabs OpsCode CfEngineCloud Yes Yes Yes
Comparando Ferramentas
Wednesday, August 8, 12
Top Related