Infraestrutura como código com Puppet e Mcollective

Preview:

DESCRIPTION

Free Software Day - Taguatinga/DF - 2013

Citation preview

sábado, 21 de setembro de 13

Infraestrutura como códigoPuppet & Mcollective

TAGUATINGA/DF - 2013--09-21sábado, 21 de setembro 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

sábado, 21 de setembro de 13

Plano de Trabalho

40 minutos de apresentação

10 minutos para perguntas

Faça perguntas quando quiser

Slidedeck disponível em slideshare.com/gutocarvalho

sábado, 21 de setembro de 13

AgendaGerência de configurações

Infraestrutura como código

Ferramentas de infraestrutura como código;

Puppet como solução de gerência de configurações

Puppet arquitetura, funcionamento e recursos

Mcollective

Perguntas

sábado, 21 de setembro de 13

Administração de sistemas e serviços

sábado, 21 de setembro de 13

Virtualização

sábado, 21 de setembro de 13

Cloud Computing

sábado, 21 de setembro de 13

Administração Manual

sábado, 21 de setembro de 13

Administração Manual

Tarefas repetitivas

Não existem padrões

Não existem procedimentos

sábado, 21 de setembro de 13

Cada sysadmin faz do seu jeito

sábado, 21 de setembro 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

sábado, 21 de setembro de 13

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

sábado, 21 de setembro 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

sábado, 21 de setembro de 13

Maior risco de ocorrer falhas

sábado, 21 de setembro de 13

Maior tempo gasto para executar mudanças

sábado, 21 de setembro de 13

Quanto tempo se gasta para criar um usuário em 450 servidores?

sábado, 21 de setembro 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

sábado, 21 de setembro de 13

Criação de usuário450 máquinas 3 minutos por máquina1350 minutos ou 22,5 horas450 trocas de senhas

sábado, 21 de setembro de 13

Quanto tempo se gasta parainstalar um agente de monitoramento em 450 servidores removendo o agente antigo?

sábado, 21 de setembro 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).

sábado, 21 de setembro 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

sábado, 21 de setembro de 13

Documentação inexistente

sábado, 21 de setembro de 13

Não há rastreamento de mudanças

sábado, 21 de setembro de 13

Demandas pipocando...

sábado, 21 de setembro de 13

Ambiente pipocando...

sábado, 21 de setembro de 13

Estresse aumentando...

sábado, 21 de setembro de 13

E você começa a ter a sensação de estar sendo engolido por seu ambiente.

sábado, 21 de setembro de 13

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

sábado, 21 de setembro de 13

Gerência de Configurações

sábado, 21 de setembro de 13

Padronização

sábado, 21 de setembro de 13

Automatização

sábado, 21 de setembro de 13

Controle

sábado, 21 de setembro de 13

Integridade

sábado, 21 de setembro de 13

Agilidade nas mudanças

sábado, 21 de setembro de 13

Ferramentas de GC

sábado, 21 de setembro de 13

sábado, 21 de setembro de 13

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

configurações para seu ambiente.

sábado, 21 de setembro de 13

Puppet em poucas palavras

sábado, 21 de setembro 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

sábado, 21 de setembro de 13

Sobre a ferramenta

sábado, 21 de setembro 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

sábado, 21 de setembro 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

sábado, 21 de setembro de 13

Feito por um SysAdmin para SysAdmins

sábado, 21 de setembro de 13

Desenhada para uso DevOps

sábado, 21 de setembro de 13

Visão DevOpssábado, 21 de setembro de 13

Tech Specs

sábado, 21 de setembro de 13

Tech SpecsEscrito em Ruby

Extensível usando código Ruby

Funciona em modo autônomo (serverless)

Funciona em modo cliente.servidor

Usa RESTful API

Oferece comunicação segura com uso de certificados digitais

sábado, 21 de setembro de 13

Clientes Puppet Enterprise

sábado, 21 de setembro de 13

Parcerias

sábado, 21 de setembro de 13

Parcerias

sábado, 21 de setembro de 13

ArquiteturaComo funciona o Puppet?

sábado, 21 de setembro de 13

sábado, 21 de setembro de 13

AbstraçãoÉ mais fácil e rápido usar o Puppet!

sábado, 21 de setembro de 13

Resource Abstraction Layer (RAL)

sábado, 21 de setembro de 13

sábado, 21 de setembro de 13

Resource Abstraction Layer

sábado, 21 de setembro 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

sábado, 21 de setembro de 13

Instale Pacote X

sábado, 21 de setembro de 13

Remova usuário Z

sábado, 21 de setembro de 13

(Re)inicie serviço Y

sábado, 21 de setembro de 13

Tratamento de Informações

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

sábado, 21 de setembro de 13

Tratamento de informações

sábado, 21 de setembro 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

A versão do sistema operacional é um dado

A arquitetua do sistema é um dado

sábado, 21 de setembro 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.

sábado, 21 de setembro de 13

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

sábado, 21 de setembro de 13

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

sábado, 21 de setembro de 13

Idempotência

sábado, 21 de setembro 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

sábado, 21 de setembro de 13

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

Você pode controlar fazer rollback

sábado, 21 de setembro de 13

Puppet em rede, como funciona?

sábado, 21 de setembro 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

sábado, 21 de setembro de 13

Puppet Visão em Rede

Puppet Master

Puppet Client

8140/ TCPpuppet agent

acesso seguro ssl

sábado, 21 de setembro de 13

Fluxo Cliente/Servidor

Instalação do node

sábado, 21 de setembro de 13

Fluxo Cliente/Servidor

Instalação do node

Inicialização do puppet

sábado, 21 de setembro de 13

Fluxo Cliente/Servidor

Instalação do node

Geração de Certificado

Inicialização do puppet

sábado, 21 de setembro de 13

Fluxo Cliente/Servidor

Instalação do node

Geração de Certificado

Envio de Certificado

Inicialização do puppet

sábado, 21 de setembro de 13

Fluxo Cliente/Servidor

Instalação do node

Geração de Certificado

Master Assina Certificado

Envio de Certificado

Inicialização do puppet

sábado, 21 de setembro 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

sábado, 21 de setembro 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

sábado, 21 de setembro de 13

O agente se comunica com o master a cada N minutos

sábado, 21 de setembro de 13

Quais funcionalidades estão disponíveis?

sábado, 21 de setembro de 13

Funcionalidades

Resource Types

Parâmetros e Meta-parâmetros para Resource Types

Templates (arquivo dinâmicos)

Definições (configurações dinâmicas)

Classes e Módulos

Funções e Condicionais

sábado, 21 de setembro 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.

sábado, 21 de setembro 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

sábado, 21 de setembro 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

sábado, 21 de setembro 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

sábado, 21 de setembro de 13

Exemplossábado, 21 de setembro de 13

Instala, Configura e Inicia

instalar um pacote

ativar um serviço no boot

copiar arquivo de configuração

iniciar serviço instalado

o que queremos fazer?

sábado, 21 de setembro de 13

Instala, Configura e Inicia

# aptitude install apache2

# insserv apache2

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

# invoke-rc.d apache2 start

no debian seria assim:

sábado, 21 de setembro de 13

Instala, Configura e Inicia

# yum install httpd

# chkconfig httpd on

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

# service httpd start

no redhat/centos seria assim:

sábado, 21 de setembro de 13

Como seria no Puppet?

sábado, 21 de setembro de 13

Puppet ManifestsArquivo com extensão.pp em que expressamos nossas

necesidades utilizando a sintaxe declarativa do Puppet.

sábado, 21 de setembro de 13

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

 service { 'apache2':

ensure => running,enable => true,}

file { '/etc/apache2/httpd.conf':ensure => present,mode => ‘0644’,owner => ‘root’,group => ‘root’,ensure => “puppet:///files/apache/httpd.conf”,}

Instala, Configura e Inicia

sábado, 21 de setembro de 13

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

 service { 'apache2':

ensure => running,enable => true,}

file { '/etc/apache2/httpd.conf':ensure => present,mode => ‘0644’,owner => ‘root’,group => ‘root’,ensure => “puppet:///files/apache/httpd.conf”,}

Instala, Configura e Inicia

resource typeparameter

titlevalue

sábado, 21 de setembro de 13

Mais exemplos

sábado, 21 de setembro de 13

Declarando um node (site.pp)

node “servidor.dominio” { include linux-server include module}

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

sábado, 21 de setembro 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,

sábado, 21 de setembro 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', }}....

sábado, 21 de setembro 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',

sábado, 21 de setembro 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

sábado, 21 de setembro de 13

Padronizando nodes

sábado, 21 de setembro 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}

sábado, 21 de setembro de 13

Como acompanho mudanças?

sábado, 21 de setembro de 13

Puppet Dashboard

sábado, 21 de setembro de 13

sábado, 21 de setembro de 13

Posso fazer mudanças em tempo real?

sábado, 21 de setembro 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

sábado, 21 de setembro de 13

Demonstração

sábado, 21 de setembro de 13

Posso provisionar VMs/Instâncias?

sábado, 21 de setembro de 13

Ferramentas de Provisionamento

Puppet/Chef/Ansible

Foreman

Vagrant

Razor

Sprinkle

sábado, 21 de setembro de 13

Qual o resultado concreto?

sábado, 21 de setembro de 13

Documentação Instantânea

sábado, 21 de setembro de 13

Processos bem definidos

sábado, 21 de setembro de 13

Ambiente Padronizado

sábado, 21 de setembro de 13

Restore e backup de mudanças

sábado, 21 de setembro de 13

Tarefas Automatizadas

sábado, 21 de setembro 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

sábado, 21 de setembro 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

sábado, 21 de setembro de 13

Tecnologia trabalhando para você

sábado, 21 de setembro de 13

Boas Práticassábado, 21 de setembro de 13

Insira o puppet nos templates de seu hypervisor

sábado, 21 de setembro de 13

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

sábado, 21 de setembro de 13

Para de administrar e comece a desenvolver a sua infraestrutura

sábado, 21 de setembro 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.

sábado, 21 de setembro de 13

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

sábado, 21 de setembro de 13

Crie manifests pensando em reaproveitamento código, escreva seus módulos e classes da forma mais flexível possível.

sábado, 21 de setembro de 13

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

sábado, 21 de setembro de 13

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

sábado, 21 de setembro de 13

Puppet em números

700+ pessoas online no canal #puppet da irc.freenode.net

8.500+ repositórios no GitHub

1000+ módulos no PuppetForge

5000+ usuários ativos na lista puppet-users com 8000+ tópicos de discussão

sábado, 21 de setembro de 13

Puppet Labs & Luke Kaines

sábado, 21 de setembro de 13

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

Twitter@puppetlabs@puppetmasterd

GitHubhttp://www.github.com/puppelabs

Puppet na rede

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

IRCirc.freenode.org#puppet#puppet-br

sábado, 21 de setembro de 13

Perguntas?

sábado, 21 de setembro de 13

Obrigado!

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

E-mail: gutocarvalho@gmail.com

Contato

Slides: slideshare.net/gutocarvalhoBlog: gutocarvalho.net

Twitter: @gutocarvalho

sábado, 21 de setembro de 13

Recommended