AĂŠcio dos Santos Pires
Novatec
© Novatec Editora Ltda. 2017. Todos os direitos reservados e protegidos pela Lei 9.610 de 19/02/1998. É proibida a reprodução desta obra, mesmo parcial, por qualquer processo, sem prévia autorização, por escrito, do autor e da Editora. Editor: Rubens Prates FC20171011 Revisão gramatical: Smirna Cavalheiro Revisão técnica: André Luis Boni Déo Editoração eletrônica: Carolina Kuwabata Capa: Carolina Kuwabata ISBN: 978-85-7522-624-7 Histórico de impressões: Outubro/2017
Primeira edição
Novatec Editora Ltda. Rua Luís Antônio dos Santos 110 02460-000 – São Paulo, SP – Brasil Tel.: +55 11 2959-6529 Email: novatec@novatec.com.br Site: www.novatec.com.br Twitter: twitter.com/novateceditora Facebook: facebook.com/novatec LinkedIn: linkedin.com/in/novatec
capítulo 1
Apresentação do Puppet
1.1 O que é o Puppet? Puppet é uma ferramenta e plataforma que possibilita a gerência de configuração de servidores e serviços. Fornece uma maneira de padronizar a entrega e operação de um software, não importando em qual sistema operacional será executado.
1.2 Características do Puppet O Puppet possui as seguintes características: • É composto por uma linguagem de configuração declarativa, na qual você define a configuração desejada do sistema. • Utiliza uma arquitetura cliente/servidor para a distribuição da configuração, mas também pode aplicar configurações de forma independente. • É extensível por meio de módulos e plugins, desenvolvidos na linguagem Ruby. • Simula as mudanças da configuração sem realizar alterações no host gerenciado. Com isso você pode visualizar antecipadamente as divergências e/ou bugs na execução do código.
16
Capítulo 1 ■ Apresentação do Puppet
17
• Permite o acompanhamento do histórico de um sistema à medida que o agente Puppet executa novos ciclos de configuração. • Possui suporte aos principais sistemas operacionais, tais como: CentOS, Debian, Fedora, Red Hat, Scientific Linux, Suse, Ubuntu, HP-UX, AIX, FreeBSD, OpenBSD, OS X, Windows (edições Server e Desktop). Veja a lista completa em https://docs.puppet.com/puppet/latest/ system_requirements.html#platforms-with-packages. O Puppet possui duas versões: Enterprise e Open Source. A versão Enterprise é paga e possui uma interface web para visualização de relatórios e configuração do ambiente. Você pode ter acesso gratuito para gerenciar até 10 servidores. Já a versão Open Source é gratuita e não possui um limite de servidores gerenciados. Não possui uma interface web oficial, mas existem ferramentas desenvolvidas pela comunidade que possibilitam a visualização de relatórios. No link https://puppet.com/product/ puppet-enterprise-and-open-source-puppet você encontra mais detalhes sobre as diferenças entre as duas versões. Neste livro será abordada apenas a versão Open Source.
1.3 Um breve resumo da história do Puppet O Puppet foi desenvolvido na linguagem Ruby por Luke Kanies, que em 2005 fundou a empresa Puppet Labs e hoje também se chama Puppet. O site oficial é https://puppet.com. Até a versão 2.7.0, o Puppet era distribuído sob a licença GPLv21 (General License Public) e recebeu melhorias de vários desenvolvedores ao redor do mundo. A partir das versões seguintes, o Puppet continuou com o código aberto, mas passou a ser distribuído sob a licença Apache 2.02. No link https://puppet.com/misc/version-history você tem acesso ao histórico de lançamento das últimas versões. No link https://puppet.com/misc/puppetenterprise-lifecycle você pode ver as informações sobre o tempo de suporte e o clico de vida das versões mais recentes. 1 Termos, em inglês, da licença GPLv2 https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html 2 Termos, em inglês, da licença Apache 2.0 https://www.apache.org/licenses/LICENSE-2.0
18
Gerência de configuração com Puppet
1.4 Mudando a forma de trabalho do administrador de sistemas A equipe de administradores de sistemas é responsável pelo funcionamento e configuração de uma grande quantidade de servidores e serviços. Administrar um grande ambiente da forma tradicional implica, constantemente, realizar tarefas repetitivas, que podem ser automatizadas com o uso de scripts, mas eles executam as instruções de forma imperativa e sequencial. Além disso, é necessário recorrer, às vezes, a uma imagem customizada de um sistema operacional a ser instalada em vários servidores e também é possível recorrer a um loop de sessões remotas, via SSH, para execução de uma série de comandos ou scripts. Essa forma de trabalho é mais suscetível a erros, principalmente quando se trabalha sob grande pressão e não oferece produtividade escalável; ou seja, à medida que o número de servidores aumenta, mais tempo será necessário para a equipe de administradores configurar todo o ambiente a cada alteração ou atualização nos softwares. Além disso, no decorrer do tempo, a documentação do ambiente tende a ficar desatualizada devido à falta de tempo para atualizá-la e testá-la para ter certeza de que funcionará em caso de necessidade. Para ajudar os administradores de sistemas, o Puppet faz uso da linguagem declarativa ou Ruby DSL3. O código desenvolvido nessa linguagem é fácil de ser lido e também funciona como a documentação da infraestrutura. Com isso você consegue facilmente compartilhar o código com outras pessoas, testar e aplicar as alterações que deseja fazer em seu ambiente, além de criar versões do que está sendo desenvolvido. O mesmo código pode ser distribuído e executado de forma simultânea em centenas ou milhares de servidores, de forma que a equipe de administradores consegue gerenciá-los paralelamente no menor tempo possível. Em cada etapa da execução é possível ter acesso aos relatórios que auxiliarão a equipe na tomada de decisões, e provará que o ambiente está em conformidade com a configuração especificada.
3 Mais detalhes sobre DSL https://en.wikipedia.org/wiki/Domain-specific_language
Capítulo 1 ■ Apresentação do Puppet
19
1.5 Como o Puppet funciona? O Puppet, na maioria das vezes, trabalha na arquitetura cliente/servidor. O código desenvolvido é chamado de catálogo e é distribuído pelo Puppet Server. Em cada host a ser gerenciado, também chamado de node, é instalado o Puppet Agent. O Puppet Agent inicia a comunicação criptografada com o Puppet Server, por padrão, na porta 8140/TCP e envia uma lista de informações sobre o node e o sistema operacional em que está sendo executado; essas informações são chamadas de fatos. O Puppet Server checará se o node possui um certificado conhecido e autenticado. Se possuir, verificará se o node está apto a receber algum catálogo. Se estiver, será gerado o catálogo, levando em consideração os fatos recebidos do Puppet Agent, um grafo que contém todos os resources (recursos) e os relacionamentos entre si. Em seguida, o Puppet Server enviará o catálogo de forma criptografada. O Puppet Agent, por sua vez, verificará se o ambiente do node está em conformidade com o especificado e corrigirá as divergências. Ao final da execução do catálogo, o Puppet Agent enviará um relatório do que foi alterado ou não. Todas essas atividades acontecem na camada de transação do Puppet. A Figura 1.1 mostra um exemplo da comunicação entre o Puppet Agent e Puppet Server.
Figura 1.1 – Comunicação entre o Puppet Server e Agent.
20
Gerência de configuração com Puppet
Mais detalhes sobre a compilação do catálogo e envio dos relatórios podem ser encontrados, respectivamente, nas seguintes páginas: • https://docs.puppet.com/puppet/latest/subsystem_catalog_compilation.html • https://docs.puppet.com/puppet/latest/reporting_about.html • https://docs.puppet.com/puppet/latest/report.html • https://docs.puppet.com/puppet/latest/format_report.html O Puppet Agent é configurado, por padrão, para ser executado a cada 30 minutos, mas também pode ser executado sob demanda.
1.6 Componentes do Puppet O Puppet é formado por vários componentes, dentre eles serão mostrados apenas alguns dos mais usados: • Puppet Server – é um daemon que compila os catálogos de configurações a serem enviados aos nodes, de acordo com os fatos fornecidos pelo Puppet Agent. É nele que os códigos Puppet, geralmente organizados em módulos, são instalados. Ele também atua como uma autoridade certificadora, assinando e reconhecendo os certificados enviados pelos agentes. Mais informações podem ser obtidas em https://docs.puppet.com/puppetserver/ latest/services_master_puppetserver.html. • PuppetDB – é um sistema de armazenamento de dados rápido, escalável e confiável. Ele armazena todos os dados gerados nos relatórios enviados pelo Puppet Agent e oferece recursos avançados de busca junto com uma API4 (Application Programming Interface). Ele possui suporte ao banco de dados PostreSQL. Mais informações estão disponíveis em https://docs.puppet.com/puppetdb. • PuppetBoard – é uma interface web que se comunica com o PuppetDB para permitir a visualização de relatórios e fatos de cada node. Foi desenvolvido para funcionar com o Puppet Open Source e é uma das muitas alternativas que tentam suprir a falta de uma interface web oficial, que só existe no Puppet Enterprise. Mais informações podem ser encontradas em https://github.com/voxpupuli/puppetboard. 4 Definição de API https://en.wikipedia.org/wiki/Application_programming_interface
Capítulo 1 ■ Apresentação do Puppet
21
• Puppet Agent – aplicação cliente do Puppet que coleta informações (também chamadas de fatos) do node e as envia ao Puppet Server. Em seguida, recebe o catálogo do Server e o aplica ao host. Esta aplicação pode ser executada periodicamente de forma agendada usando o cron, sob demanda ou de forma interativa, para fins de teste. Mais informações em https://docs.puppet.com/puppet/latest/man/agent.html. • Puppet Forge – é um repositório público para armazenamento e compartilhamento de módulos Puppet desenvolvidos pela comunidade. Você pode desenvolver seus próprios módulos ou baixar e usar os que foram desenvolvidos por outras pessoas que compartilharam no Puppet Forge. Mais informações em https://forge.puppet.com. • Facter – é uma biblioteca de perfis multiplataforma do Puppet. Ela descobre e relata informações ou fatos de cada host. Esses fatos são enviados pelo Puppet Agent ao Server, que os utiliza na compilação do catálogo. Mais informações podem ser obtidas em https://docs.puppet. com/facter. • Hiera – é uma ferramenta que busca por dados de configuração que permite separar os dados do código Puppet. Com ela você pode definir dados para diferentes nodes usando o mesmo código, em vez dos dados serem armazenados dentro do código. Mais informações em https://docs.puppet.com/hiera/latest. • IDE5 (Integrated Development Environment) – esse é um componente opcional a ser usado para desenvolver código Puppet. Você pode usar desde um simples editor de texto a uma ferramenta gráfica. As seguintes IDEs possuem um plugin para auxiliar no desenvolvimento de código Puppet.
IntelliJ IDEA: • Site: https://www.jetbrains.com/idea • Plugin para Puppet: https://plugins.jetbrains.com/plugin/7180-puppetsupport 5 Definição de IDE https://en.wikipedia.org/wiki/Integrated_development_environment
22
Gerência de configuração com Puppet
Netbeans: • Site: https://netbeans.org/downloads • Plugin para Puppet: https://github.com/tropyx/NetBeansPuppet
Visual Studio: • Site: https://www.visualstudio.com • Plugin para Puppet: h t t p s : / / m a r k e t p l a c e . v i s u a l s t u d i o . c o m / items?itemName=MSOpenTech.PuppetPlugin
Sublime Text: • Site: https://www.sublimetext.com • Plugin para Puppet: https://github.com/russCloak/SublimePuppet
ATOM: • Site: https://atom.io • Plugin para Puppet: https://atom.io/packages/linter-puppet
1.7 Suporte e documentação A empresa Puppet (https://www.puppet.com) oferece suporte diretamente aos clientes e também por meio de empresas parceiras. No Brasil não é diferente e já contamos com diversas empresas que prestam suporte e treinamento. Dentre essas, cito a Instruct (http://instruct.com.br). A lista completa de parceiros pode ser obtida em https://puppet.com/partners. Além do suporte ofertado pela Puppet e seus parceiros, existem comunidades de usuários do produto na internet. A seguir estão os links dos principais materiais de apoio oferecidos pela comunidade Puppet-BR, bem como o site deste livro e outros itens gratuitos oferecidos pela Puppet:
Capítulo 1 ■ Apresentação do Puppet
23
• Manual do Puppet – https://docs.puppet.com • Emulador do Puppet – https://puppet.com/product/emulator#emulator • VM de aprendizado do Puppet – https://puppet.com/download-learning-vm • Treinamentos gratuitos sobre Puppet – https://learn.puppet.com/category/ self-paced-training
• Slides sobre o Puppet – https://pt.slideshare.net/PuppetLabs • Puppet Forge – https://forge.puppet.com • Puppet Style Guide – https://docs.puppet.com/puppet/latest/style_guide.html • Puppet Enterprise (gratuito para até 10 nodes) – https://puppet.com/ download-puppet-enterprise
• Site oficial deste livro – http://puppet.aeciopires.com • Comunidade Puppet-BR: • Site – http://puppet-br.org • Apostila – http://apostila.puppet-br.org • Meetups – https://www.meetup.com/pt-BR/puppet-br/ • Lista – https://groups.google.com/forum/#!forum/puppet-users-br • Telegram – http://telegram.me/puppetbr • GitHub – https://github.com/puppet-br • GitLab – https://gitlab.com/puppet-br