Infraestrutura ágil com Puppet - CISL

Preview:

DESCRIPTION

Palestra sobre gerenciamento de configuração de infraestrutura com Puppet e conceitos de infraestrutura ágil.

Citation preview

Brasília/DF

Infraestrutura ágil com Puppet por Guto Carvalho

CISL 20142014.04.07

José Augusto (Guto) Carvalho

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

14 anos de experiência com TI e FOSS;

Blogueiro TI/FOSS há 13 anos (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

Plano de Trabalho

70 minutos de apresentação

25 minutos de demonstração

25 minutos para perguntas

Faça perguntas quando quiser

Slidedeck disponível em slideshare.com/gutocarvalho

Infraestrutura ÁgilUm modelo inteligente e economicamente viável

Infraestrutura ágil é um conceito ainda em formação, mas ele envolve principalmente gerência de configurações, orquestração, provisionamento dinâmico e metodologias ágeis de trabalho em grupo.

Nesta apresentação focaremos na gerência de configurações, uma de suas mais importantes características.

Tendências

VirtualizaçãoHoje podemos rodar centenas de servidores virtuais, com d i f e r e n t e s s i s t e m a s operacionais em um mesmo host em nosso datacenter

Cloud ComputingHoje podemos rodar todos os nossos sistemas em nodes (vms) em nuvens públicas ou privadas e nosso parque pode aumentar ou diminuir de forma dinâmica e automática

Diminuição de CustosAs empresas hoje buscam aumentar a qualidade de seus produtos e serviços mas sem aumentar os seus custos de manutenção e operação

Agilidade e FlexibilidadeAs empresas querem hoje f e r r a m e n t a s q u e l h e s permitam atuar de forma ágil e flexível dentro do seu negócio, algo que se adapte as suas necessidades de forma plena e concreta

Novo tipo de profissionalAs empresas estão buscando no mercado profissionais m u l t i - d i s c i p l i n a r e s , dinâmicos, criativos, com domínio em diferentes tecnologias para dar vazão a demandas e trabalhar com inovação

Desafios

Desafios na TI de hojeComo administrar parques crescentes?

Como manter nosso parque padronizado?

Como manter nosso parque seguro?

Como manter a qualidade do serviço executado?

Como manter o custo de manutenção baixo, sem perder qualidade?

Como saber quantos profissionais eu preciso para administrar meu ambiente?

Cenário Virtual

Mjolnir Solutions Inc.

Possui um datacenter em sua sede com 750 VMs

Contratou 50 Nodes Cloud (IASS)

Precisa manter rodando 800 servidores virtuais

Dúvidas

Dúvidas comuns

Como faço mudanças rápidas em diversos ambientes e servidores?

Como faço para atender demandas em tempo hábil?

Como faço para manter a documentação atualizada?

Como evitar ao máximo downtime durante as mudanças?

Quantos sysadmins eu preciso para administrar 800 VMs?

Depende de como você faz a administração!

Sysadmin ArtesãoHoje ainda é comum encontrar sysadmins que trabalham com a d m i n i s t r a ç ã o m a n u a l , utilizando um método quase artesanal, executando tarefas repetitivas cotidianamente

Atualização de Pacotes?ssh servidor001.dominio.local ssh servidor002.dominio.local ssh servidor003.dominio.local

… ssh servidor800.dominio.local

Instalação de Apps?ssh servidor001.dominio.local ssh servidor002.dominio.local ssh servidor003.dominio.local

… ssh servidor800.dominio.local

Criação de Usuários?ssh servidor001.dominio.local ssh servidor002.dominio.local ssh servidor003.dominio.local

… ssh servidor800.dominio.local

Tarefas RepetitivasCriação de usuário em servidores

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

Exemplo de processo 1Atualização de um agente de monitoramento (ubuntu)

ssh servidor001.dominio.local

sudo -i

apt-get install agente-monitoramento-2.0

vim /etc/agente-monitoramento/agent.conf

restart agente-monitoramento

exit

Exemplo de processo 2Atualização de um agente de monitoramento (centos)

ssh servidor002.dominio.local

su -

yum install agente-monitoramento-2.0

vim /etc/agente-monitoramento/agent.conf

service agente-monitoramento restart

exit

Exemplo de processo 3Atualização de um agente de monitoramento (debian)

ssh servidor003.dominio.local

su -

aptitude install agente-monitoramento-2.0

vim /etc/agente-monitoramento/agent.conf

/etc/init.d/agente-monitoramento restart

exit

Exemplo de processo 4Atualização de um agente de monitoramento (fedora)

ssh servidor004.dominio.local

sudo -i

yum install agente-monitoramento-2.0

vim /etc/agente-monitoramento/agent.conf

systemctl restart agente-monitoramento

exit

Cada sistema operacional lida de uma forma muito particular com seus recursos, e todas estas exceções precisam ser cuidadosamente avaliadas e tratadas.

O uso de scripts ajuda, mas o sysadmin vai passar a dividir seu tempo administrando VMs e ajustando seus scripts para atender as mais diferentes exceções.

Fatalmente uma das duas atividades será negligenciada, i s to va i gerar fa lhas e problemas.

Cada sysadmin executará demandas de uma forma distinta, isto gera um ambiente sem padrões, impossível de rastear mudanças.

A medida que o parque aumentar ficará cada vez mais difíci l administrar, identificar e corrigir problemas.

Mudanças es t ruturantes que afetarem todo parque levarão mais tempo para serem concluídas pois no percurso muitas coisas vão quebrar.

Com o excesso de demandas e ambiente crescendo cada vez mais, documentar perderá prioridade e isto criará um ambiente de alto risco, obscuro e desconhecido

Pausa

Sabe como o sysadmin se sente ao atuar em um incidente em ambiente não documentado? Acompanhe…

Documentação é importante para você saber lidar com uma situação inesperada

Continuando…

Percepções da empresa

Aumenta o custo de manutenção devido a retrabalho

Aumenta o desgaste físico e psíquico da equipe

A produtividade da equipe diminui (entregas)

A qualidade do serviço oferecido diminui (uptime)

Ocorre uma grande rotatividade de funcionários

Tarefas RepetitivasExecutadas manualmente significam retrabalho

RetrabalhoPara a empresa significa maior custo e menor lucro

RetrabalhoPara o sysadmin significa menos tempo com a família

RetrabalhoPara ambos significa menor p r odu t i v i dade e meno r qualidade no que se faz e no que se entrega.

Desperdício de tempoé uma característica comum n e s t e m o d e l o d e a d m i n i s t r a ç ã o d e infraestrutura

ExemploO cliente deseja instalar um agente de monitoramento em todas as 800 VMs, removendo qualquer traço do produto antigo no final do procedimento

Procedimento para instalar o agente

Acessar servidor via ssh

Adicionar repositório APT/YUM

Instalar pacote

Ajustar arquivo de configuração

Reiniciar agente

Remover agente antigo

Instalação de agente de

monitoramento800 máquinas

10 minutos por máquina 8000 minutos ou 133 horas 16 dias trabalhando 8 h.p.d

Considerando o modelo manual de adminis t ração e o re t rabalho decorrente de falhas humanas, teremos um analista focado em uma demanda simples por cerca de 1 mês.

O modelo manual éum modelo caro e insustentável

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

Gerência de Configurações

Gerência de Configurações

Padronização

Controle

Integridade

Produtividade

Agilidade

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

configurações para seu ambiente.

Puppet em poucas palavras

É documentação executável

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

Sintaxe simples, prática e natural para sysadmins

Oferece suporte a diversos tipos de sistemas operacionais unix, linux windows

Sobre a ferramenta

Ferramenta Open Source - Apache License

Ferramenta mantida pela empresa Puppetlabs

Suporte comercial

Criado por Luke Kaines (CEO e Fundador Puppetlabs)

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

Recebeu pesados investimentos em 2012/2013

Feito por um SysAdmin para SysAdmins

Desenhada para uso DevOps

Visão DevOps

Tech SpecsEscrito em Ruby

Extensível usando código Ruby

Funciona em modo autônomo (sem servidor)

Funciona em modo cliente e servidor

Usa RESTful API

Oferece comunicação segura com uso de certificados digitais

Clientes Puppet Enterprise

Parcerias

Parcerias

Alguns cases no Brasil

ArquiteturaComo funciona o Puppet?

O Puppet pode funcionar em modo masterless, isto significa sem servidor. Você pode aplicar uma configuração do Puppet diretamente a um sistema operacional apenas com o agente instalado.

O Puppet também funciona em modo cliente e servidor. Isto significa que vicê instalará o puppet master em alguma VMs e seus agentes irão se comunicar com ele para obter configurações.

Existem cenários de uso de Puppet masterless distribuído, usando GIT. Neste modelo as configurações do Puppet são obtidas via GIT e o agente é acionado via cron periódicamente

Tratamento de informaçõese o uso de dados pelo Puppet

Todas as informações de uma sistema operacional, seja um pacote, usuário, arquivo ou serviço são consideradas um 'dado' para o puppet.

Quando construímos configurações, estas são convertidas em catálogos XML, estes por sua vez são lidos pelos agentes e a configuração é então aplicada ao sistema operacional.

Entenda como funcionaa relação cliente e servidor

Tudo é feito pelo agente localmente, o servidor não se conecta na máquina para aplicar as configurações.

O servidor puppet é apenas o repositório de configurações, ele tem apenas o dever de construir e enviar o catálogo quando isso for solicitado por um agente.

Abstraçãomenor preocupação e maior resultado

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 precisa fazer o que você pediu

Instale Pacote X

Remova usuário Z

(Re)inicie serviço Y

O Puppet é orientado a estados, nós criamos configurações definindo estes e s t a d o s , é u m a v e r d a d e i r a documentação executável.

IdempotênciaCaracterística exclusiva do Puppet, nenhum outro faz isto.

Puppet na redeEntenda como funciona a comunicação com o Master

Modo cliente e 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

Puppet Visão em Rede

Puppet Master

Puppet Agent

8140 TCP puppet agent -t SSL

envio do catálogo

Fluxo Cliente/Servidor

Instalação do node

Fluxo Cliente/Servidor

Instalação do node

Inicialização do puppet

Fluxo Cliente/Servidor

Instalação do node

Geração de Certificado

Inicialização do puppet

Fluxo Cliente/Servidor

Instalação do node

Geração de Certificado

Envio de Certificado

Inicialização do puppet

Fluxo Cliente/Servidor

Instalação do node

Geração de Certificado

Master Assina Certificado

Envio de Certificado

Inicialização do puppet

Fluxo Cliente/Servidor

Instalação do node

Geração de Certificado

Agente Sincroniza

Master Assina Certificado

Envio de Certificado

Inicialização do puppet

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 manual Assinatura pode ser automática por domínio Assinatura pode ser automática em qualquer requisição

O agente se comunica com o master a cada N minutos, você configura N

Configurações Volá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

Quais recursos estão disponíveis?

Recursos do Puppet

Resource Types

Parâmetros e Meta-parâmetros

Templates e Definições

Classes e Módulos

Funções e Condicionais

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.

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

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

Resource Type: FileEspecifique permissões e owners

Declare arquivos, diretórios e links

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

Exemplos

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?

Instala, Configura e Inicia

# aptitude install apache2!

# insserv apache2!

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

# invoke-rc.d apache2 start

no debian seria assim:

Instala, Configura e Inicia

# yum install httpd!

# chkconfig httpd on!

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

# service httpd start

no redhat/centos seria assim:

Como seria no Puppet?

Puppet ManifestsArquivos com extensão.pp, neles expressamos nossas

necessidades utilizando a sintaxe declarativa do Puppet

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

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”,!

}

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”,!

}

resource type parameter

title value

A mesma configuração atende a diversos sistemas operacionais, a sintaxe é simples e direta. É uma declaração de estados que o Puppet vai interpretar e aplicar.

Documentação Executável.

Mais exemplos

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!}

Apenas com as informações do node, já podemos entender o que ele faz e quais ferramentas o puppet gerencia nele, é outro tipo de documentação.

Variáveis e FatosFatos (facter)

vimpackage => vim-puppet, !apacheservice => apache2, !ntpconfrhel => ntp.conf.rhel, !servername => $facts[fqdn],

Constantes e Variáveisdomain fqdn hostname interfaces ipaddress_eth0 ipaddress_eth1 ipaddress_lo lsbdistid lsbdistrelease

=> hacklab, => puppetmaster.hacklab, => puppetmaster, => eth0,eth1,lo, => 10.0.2.15, => 192.168.56.150, => 127.0.0.1, => debian, => 6.0.5,

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

Condicionaisif $operatingsystem == '"CentOS" {! $package_name = 'ntp',! $service_name = 'ntpd',! $conf_file = 'ntp.conf.el',! }! elseif $operatingsystem == 'Debian' { ! $package_name = 'ntp',! $service_name = 'ntp',! $conf_file = 'ntp.conf.debian',! }!else { notify { “Sistema desconhecido”: }! }!....

Condicionais

if ( $operatingsystem == 'Debian' ) and ( $lsbdistcodename == 'squeeze' ) {! ! bloco de código! !}

Definiçõesproxy { 'Filial' :! 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.hacklab',!=> '2 GB',!=> '6 MB',!=> '128 MB',!=> 'heap GDSF',!=> 'heap LFUDA',!=> 'aufs /var/spool/squid 1024 16 256',!=> ‘monitora@hacklab.local’,!=> 'proxy',!=> 'proxy',!=> '127.0.0.1 10.61.12.2 172.16.1.1',!=> '127.0.0.1 192.168.12.3',

Definiçõesproxy { 'Matriz' :! 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.hacklab',!=> '8 GB',!=> '6 MB',!=> '512 MB',!=> 'heap GDSF',!=> 'heap LFUDA',!=> 'aufs /var/spool/squid 8096 16 256',!=> ‘monitora@hacklab.local’,!=> 'proxy',!=> 'proxy',!=> '127.0.0.1 10.61.12.2 172.16.1.1',!=> '127.0.0.1 192.168.12.3',

Templates

myorigin = <%= hostname %>!mydestination = $myhostname, ..., localhost, <%= fqdn %>

Trecho do template postfix/main.cf

myorigin = servidor.dominio!mydestination = $myhostname, ..., localhost, servidor.dominio

Substituição de variáveis por fatos

Padronizando nodes

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!}

Node default

node default {! include linux-server!}

Dashboards para Puppet

Puppet Dashboard

Foreman

Outros projetos Puppetlabs

Outros projetos Puppetlabs

PuppetDB (coletor de dados)

Razor (provisionador)

Hiera (separa dados de código)

Facter (fatos do sistema)

Mcollective (orquestrador)

Gerenciadores Externos para o Puppet

Configr

Posso fazer mudanças em tempo real?

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

Provisionamento? É possível ?

Ferramentas de provisionamento VM

!

Foreman

Vagrant

Razor

Sprinkle

Puppet Enterprise

Ferramentas de provisionamento SW

!

Ansible

Salt

Capistrano

Fabric

Demonstração

Qual o resultado concreto?

A o e s c r e v e r m o s a s n o s s a s configurações, estamos expressando o que desejamos ter em nossos nodes, com isto, já estamos construindo nossa documentação.

Aos escrevermos uma configuração, estamos definindo como aquilo de ser instalado, configurado e como deve funcionar. Toda a equipe passa a usar a mesma receita, isto significa que teremos processos padronizados.

O Puppet oferece recursos para você fazer backup e restore de arquivos modificados, portanto, você tem a segurança de poder recuperar ambientes caso precise.

Ao adotar Puppet você não vai mais sentir vontade de executar nada sem ele, tudo já nascerá automatizado e c o n t r o l a d o , c o m p r o c e s s o s e documentação instantânea.

Respostas

Um sysadmin que não usa Puppet consegue administrar no máximo 30 servidores, com alguma dificuldade e muito retrabalho.

Um sysadmin que usa Puppet consegue administrar entre 250 e 1000 s e r v i do r e s c om f a c i l i dade , a quantidade vai depender do nível de automatização e maturidade do profissional e sua equipe.

Para administrar 800 VMs, utilizando Puppet, você precisará de 4 sysadmins, e afirmo que dependendo do nível de automação até menos.

Compare

Ambiente com 800 nodes

modo manual puppet

instalando agente 133 horas N minutos

Benefícios Reais

Maior 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

O sysadmin fará jornadas de trabalho normais, ficará mais tempo com a família, terá mais qualidade de vida e com isso irá produzir mais e melhor.

O negócio de sua empresa vai fluir, ter m e l h o r q u a l i d a d e , m a i o r disponibilidade e menor custo operacional, sendo gerido por uma equipe qualificada e eficiente.

Puppet Labs

Puppetlabs

Suporte Comercial (em inglês)

Programa de treinamento presencial

Programa de certificação para Sysadmins - PCP 201

Programa de certificação para Developers - PCP 301

Puppet Enterprise Dashboard (Gerenciador)

Puppet em números700+ 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

Comunidade brasileira!

Site/Blog http://www.puppetlabs.com http://www.puppetlabs.com/blog/ http://puppet-br.org/ Twitter @puppetlabs @puppetmasterd (luke)

GitHub http://www.github.com/puppelabs

Puppet na rede

Google Groups Puppet-camp, puppet-users, puppet-users-br, puppet-dev

IRC irc.freenode.org #puppet #puppet-br

Existe suporte comercial no Brasil?

• Suporte Oficial Puppetlabs no Brasil • Empresa especializada em Puppet

• Cursos oficiais, Puppet Enterprise, consultoria e suporte

• 1o Parceiro oficial Puppetlabs Brasil

• 1o empresa com pessoas certificados PCP na América Latina

• Acesse http://www.instruct.com.br

Inovando com o Puppet

PUPPET COMO SERVIÇO

• Gerenciamento de Configuração COMO SERVIÇO !

• Automatizar Infraestrutura de GRANDES CORPORAÇÕES !

• Interface intuitiva focada em AGILIDADE e AUTONOMIA !

• Suporte com PROFISSIONAIS CERTIFICADOS (PCP, RHCE, LPI-3) !

• SERVIÇO PIONEIRO para Gestão de Infraestrutura no Brasil

www.configr.com

Perguntas?

Obrigado!

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

E-mail: gutocarvalho@gmail.com

Contato

Slides: slideshare.net/gutocarvalhoBlog: gutocarvalho.net

Twitter: @gutocarvalho

http://puppetlabs.com http://instruct.com.br http://configr.com