Puppet Cloud IaaS

Preview:

DESCRIPTION

Gerenciamento de Configurações em Nuvem usando Puppet.

Citation preview

Gerência de Configurações em CloudPuppet em ambientes IaaS

José Augusto (Guto) Carvalhogutocarvalho@gmail.com

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

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 @gutocarvalhogutocarvalho@gmail.com

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

Recommended