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