gutocarvalho.net

cotidiano simples, vida feliz

gerenciando configurações com o puppet

By

1. Gerência de Configurações

Recentemente abordei as metodologias de gerência manual de servidores de serviços e os problemas comuns decorrentes desta prática, falei um pouco de gerência de configurações e de algumas ferramentas que implementam este tipo de automatização.

Uma das ferramentas mencionadas foi o Puppet e no mesmo artigo prometi abordar suas características e principais funcionalidades.

2. Sobre o Puppet

O puppet é uma ferramenta de gerência de configurações mantida pela empresa PuppetLabs – fundada em 2005.

http://www.puppetlabs.com

2.1) O que é o Puppet?

O Puppet essencialmente é uma ferramenta open-source que faz parte de uma nova geração de sistemas para automatização de servidores e serviços.

Ele é composto por uma linguagem declarativa que nos permite expressar as configurações que nossos servidores devem ter, fazendo isto através de uma sintaxe simples e prática.

Ele nos oferece um cliente (agente) e um servidor (master) para distribuir estas configurações em nosso parque.

2.2) O que ele tem de especial?

Na minha opinião o modelo que o puppet propõe é de fato o que o diferencia do restante das ferramentas – de nova geração – que implantam gerência de configuração e automatização.

No puppet essencialmente tudo é MODELADO e tratado como se fossem DADOS.

O estado atual do node (servidor), a configuração desejada, as ações tomadas durante as configurações são representados como ‘dados’ e inseridos em um catálogo.

Ele pode funcionar de duas formas, você pode criar configurações e aplicar localmente usando o recurso APPLY, ou você pode trabalhar em modo AGENTE/MESTRE (cliente/servidor).

Vamos falar do modo AGENTE/MESTRE primeiramente, neste a aplicação de configurações depende da comunicação entre o PuppetAgent e o PuppetMaster, essa comunicação segue alguns passos bem simples, são eles:

Passo 1

Cada node (servidor com puppet agent) a cada N minutos faz uma requisição de catálogo para o puppetmaster, junto com a requisição de catálogo ele envia os dados e fatos relativos ao seu estado atual.

Passo 2

O servidor puppetmaster classifica os dados e os fatos recebidos, avalia quais configurações foram declaradas para este node, avalia se há necessidade de aplicar alguma mudança, compila um catálogo com estas informações e devolve para o node (servidor com puppet agent).

Passo 3

Ao receber o catálogo, o node (servidor com puppet agent) avalia seu estado atual e as referências do catálogo, caso exista uma diferença ele aplica as configurações utilizando os recursos e obdecendo interdependências que o catálogo traz, buscando assim manter um estado de sistema compatível com as configurações declaradas para ele no puppetmaster.

Passo 4

Ao aplicar as configurações do catálogo, o node (servidor com puppet agent) reporta seu ‘novo’ estado atual para o puppetmaster.

Representação gráfica destes passos

Diagrama retirado do site puppetlabs.com

Em essência, fazendo uma analogia simples, podemos dizer que são tiradas fotos da situação atual do sistema do node (servidor com agente) e isto é comparado com uma foto de como ele deveria estar. O agente por sua vez fará as mudanças necessárias para a situação atual esteja sempre refletindo a foto ‘de como ele deveria estar’.

É importante entender que é o agente do puppet que se conecta no servidor puppetmaster a cada N minutos para checar se há alguma modificação que deve ser aplicada.

Normalmente outras ferramentas fazem um tipo de gerenciamento mais agressivo – com menor controle, onde o servidor de configurações (master) se conecta nos nodes (servidores) e aplica as configurações, as vezes sem considerar dependências e sem possibilitar rastreio ou um retorno simplificado destas mudanças, algo como se fosse um clusterssh rodando comandos em centenas de servidores.

2.3) Benefícios além da automatização

Os benefícios do Puppet e sua arquitetura vão muito além da automatização de configurações, muito além de evitar problemas e incidentes em nosso ambiente.

Com o Puppet podemos simular mudanças de configurações, podemos ter um rastreamento de mudanças, podemos ter um histórico do ciclo de vida do sistema que está sendo gerenciado por ele, podemos trabalhar com provisionamento, deploy, padronização, e as declarações de configuração em si já são um tipo simplificado – mas eficiente – de documentação do seu ambiente.

2.4) Principais vantagens

  • Redução de custos de manutenção de computadores – equipe pequena gerenciando um grande parque;
  • Diminuição da sobrecarga em sua equipe – menos horas extras no trabalho, mais horas dos seus admins com suas famílias. Isto significa menor estresse para toda equipe e maior produtividade e criatividade;
  • Diminuição do downtime de seu ambiente  – padronização significa maior controle e eficiência;
  • Ao diminuir downtime consequentemente evitamos multas  de contratos SLA;
  • Temos maior facilidade para executar atualização de sistemas e serviços de forma controlada;
  • Temos maior facilidade e flexibilidade para distribuir configurações para todo o parque de forma controlada;
  • Temos maior facilidade e flexibilidade para implantar novas soluções com menor trauma e consequentemente menor custo, fazendo isto em todo o parque de uma vez  – imagine por exemplo implantar um novo agente de monitoramento em centenas de servidores;
  • Retorno de uma configuração ou de arquivos modificados de forma fácil e simplificada através do filebucket;
  • Excelentes ferramentas em linha de comando que nos permitem usá-lo de forma fácil;
  • Acelerar a criação de novos servidores;
  • Acelerar a criação de novos serviços;

Poderia continuar, mas essas são ao meu ver as principais e mais importantes vantagens.

2.5) Se preocupe com o que é importante

Ao usar o puppet, quando formos criar nossas configurações, não precisamos nos preocupar com o tipo do sistema operacional ou com o tipo de gerenciador de pacotes que aquele sistema operacional usa.

O Puppet vai detectar qual é o seu sistema operacional e tomar conta da situação.

E ele suporta muitos tipos de OS, funciona em diversos sistemas Linux com diversos gerenciadores de pacotes (APT, YUM, PORTS), funciona em MAC OSX, funciona em BSD’s e já estão desenvolvendo suporte a ambientes Windows – ainda em BETA.

Ao detectar seu OS ele vai utilizar o gerenciador de pacotes padrão e os recursos disponíveis presentes naquele sistema operacional.

Logo se você criar uma configuração que declara a instalação do pacote VIM por exemplo, se estiver no Debian ele vai usar o APT, se estiver no CENTOS vai usar o YUM, se estiver no FREEBSD vai usar o PORTS e assim por diante.

Você se preocupa com a configuração e ele com o resto.

Mas se quiser personalizar ou declarar qual o tipo de gerenciador de pacote ele deve usar, você pode, no caso do Debian pode especificar se deve usar APT ou APTITUDE no RHEL se deve usar YUM ou UP2DATE (versões legadas), tudo isso é fácilmente configurável.

2.5) Um pouco mais sobre o Puppet

  • O Puppet está na versão 2.7 no momento em que escrevo este Post;
  • O Puppet é open-source e regido pela licença apache 2.0 a partir da versão 2.7 , as versões anteriores usavam licença GPL;
  • No Puppet para construir as configurações usamos uma linguagem declarativa (DSL) para expressar o que queremos;
  • O Puppet foi escrito em RUBY por que o desenvolvedor que o criou (o qual trabalhava essencialmente com PERL) conversou com um amigo que disse que RUBY era legal, ao testar o RUBY ele gostou tanto da linguagem que algumas poucas horas de investimento – coding – foram suficientes para criar o primeiro protótipo funcional;
  • A partir do puppet 2.6 já é possível escrever configurações em RUBY puro;
  • Ele funciona em distros Linux incluindo RHEL (e seus derivados CentOS e Oracle Linux), Fedora, Debian, Mandriva, Ubuntu, SUSE, em também em vários sistemas UNIX (Solaris, BSD, Mac OS X, AIX, HP-UX), e tem um suporte BETA a sistemas Microsoft.
  • O puppet é utilizado pela Wikimedia Foundation, Dell, Rackspace, Zynga, Twitter, New York Stock Exchange, Disney, Citrix Systems, Oracle, The University of North Texas, Los Alamos National Laboratory, Stanford University, Google, dentre outros.

2.6) Ferramentas Complementares

Puppet Dashboard

Essa ferramenta oferece um painel web com diversas informações acerca da aplicação de configurações em cada Node do Puppet, ele traz informações dos nodes e facilita o gerenciamento e geração de relatórios.

http://puppetlabs.com/puppet/related-projects/dashboard/

Foreman

O Foreman vai além do Puppet Dashboard, além de oferecer informações dos nodes, informações acerca de aplicação de configurações, ele também oferece recursos para trabalharmos com provisionamento, inventário dos sistemas com base nos fatos de cada node e até mesmo instalação e reinstalação de nodes por completo.

http://theforeman.org/

3) Encerrando

Bom, acho que isto é suficiente como introdução, no próximo post vamos por a mão na massa e entender passo a passo o funcionamento do Puppet, primeiro aprendendo seus recursos, sintaxe e aplicando as configurações localmente e depois trabalhando em modo agente/master.

4) Referências

http://www.puppetlabs.com/
http://docs.puppetlabs.com/

[s]
GutoCarvalho

15 Comments

  1. Bruno Anjos
    maio 22, 2012 at 16:41

    Excelente Guto.

    O puppet parece ser uma solução muito interessante, no momento estou vendo a documentação e montando um laboratório.

    Achei muito bacana os seus posts – parabéns!

  2. maio 23, 2012 at 9:27

    Guto, ótimo post. Não sabia que o puppet podia cuidar da instalação de pacotes também. O que me faz perguntar porque eu ainda não o uso.
    Mal posso esperar pelo post “mão na massa”!

  3. maio 23, 2012 at 19:04

    Obrigado Bruno, aguarde os próximos, sugestões e melhorias são bem vindas em todos os posts.

  4. maio 23, 2012 at 19:06

    Ulysses,

    O Puppet faz muitas coisas, o próximo post está 80% pronto, estou fazendo no Dokuwiki pois formatar lá é bem mais rápido, ainda estou pensando se só farei um link para wiki ou se trago aqui para o WP. Dúvida cruel, vamos ver se acho um plugin markdown para o WP.

    Quanto a usar o Puppet, espero que te ajude a acabar com suas tarefas repetitivas, seja em modo autônomo ou client-server.

    [s]
    Guto

  5. Well Santos
    junho 19, 2012 at 16:50

    Cara, muito bom teu post, já lí muitos deles. Estou procurando tutoriais ou aulas sobre puppet(além do PuppetLabs) e é bem difícil encontrar. Aproveito pra perguntar, vc sabe d cursos/treinamentos/aulas presenciais ou online sobre deploy com Puppet? Desde já agradeço. Grande abraço.

  6. junho 28, 2012 at 8:44

    Well Santos,

    Estou montando um curso online para moodle, assim que estiver pronto aviso no Blog.

    [s]
    Guto

  7. julho 11, 2012 at 18:21

    Não vejo a hora de ler a continuação deste trabalho, parebéns Guto

  8. Rodrigo de Lima Vieira
    setembro 10, 2012 at 13:54

    Cabra macho esse puppet!
    Parabéns pelos posts Gutera, só hoje consegui um tempo para começar a ler.
    Na sua opinião, o puppet também atenderia um sysadmin autônomo a colocar ordem em diversos servidores que já implementou em diversos clientes diferentes? Ou a uma empresa de consultoria a administrar os servidores de seus clientes com contrato?
    Em ambos os casos eu imagino um puppet master nas mãos do sysadmin autônomo ou na empresa de consultoria e os agentes (clientes) nos servidores dos diversos clientes?
    Você acha viável? Ou já estamos saindo muito do foco do puppet? Teria outra solução para recomendar?

    Abraço.

  9. outubro 29, 2012 at 8:59

    Rodrigo,

    Você pode ter um puppermaster na internet fazendo isto, criando um environment para cada cliente, a única questão é que seu cliente terá de abrir a porta 8139 para saída da rede dele (node do seu cliente > seu servidor puppetmaster) e na sua rede você teria que abrir a porta 8140 para conexões de fora chegarem em seu puppetmaster, ou mesmo ter um puppetmaster para cada cliente, vai de caso a caso.

    Normalmente implanto no própio cliente um servidor puppetmaster para administrar seus nodes.

    Respondendo sua pergunta, ele atenderia ambos cenários que você cita, organizar o que já está rodando, aqui a experiencia que tivemos foi em um empresa que estava imersa em um caos de 8 anos de administração falha, com o puppet nos padronizamos e tomamos as rédeas do ambiente.

    [s]
    Guto

  10. André Martinelli Agunzi
    março 31, 2014 at 16:18

    Alguém teria algum curso em video do puppet labs ?

  11. abril 6, 2014 at 8:55

    André,

    No site da puppetlabs você vai encontrar alguns screencasts curtos e pontuais.

    http://docs.puppetlabs.com

    Os cursos oficiais da Puppetlabs são pagos e presenciais, não há vídeos destes cursos e o material oficial só é disponibilizado para os alunos, e eles por sua vez assinam termo de confidencialidade.

    Contudo, há uma farta documentação no site deles, eu mesmo aprendi tudo pelo site e fazendo labs em VM’s.

    Recomendo a leitura do material.

    [s]
    Guto

  12. Mauro Felipe
    julho 24, 2014 at 23:03

    Guto,

    Você está preparando algum artigo sobre rules e profiles?
    Na sua opinião, qual a melhor arquitetura hoje para implementação do puppet em um cenário complexo com ambientes segmentados e vários tipos de servidores?

    Parabéns pelos excelentes materiais que você escreveu e disponibilizou para todos.

    Grande abraço!

  13. outubro 22, 2015 at 12:17
  14. Quintela Carvalho
    novembro 6, 2015 at 0:45

    Muito interessante a ferramenta, não conhecia, me despertou curiosidade sobre a aplicação. espero que tenham mais posts sobre o assunto, parabéns.

  15. agosto 23, 2017 at 23:23

    major online retailers that accept paypal

    gerenciando configurações com o puppet | gutocarvalho.net

Deixe uma resposta