O que é Marionete?
No DevOps, você deseja automatizar o maior número possível de tarefas. A configuração manual de ambientes leva semanas com vastas infraestruturas. Quando tudo está configurado, você está apagando incêndios em vez de implementar novas soluções eficazes, como servidores Rancher.
O Puppet ajuda a automatizar tarefas manuais para provisionar sistemas e implantar aplicativos rapidamente. O gerenciamento dinâmico de infraestrutura está no centro do Puppet.
Este artigo explica o que é o Puppet, quais problemas ele resolve e como usar o Puppet para automatizar trabalhos manuais como uma equipe de DevOps com sucesso.
O que é Marionete?
Puppet é uma ferramenta IaC (Infrastructure as Code) para gerenciar vários servidores. Escrito em Ruby (principalmente), Puppet opera em vários sistemas do tipo Unix e também suporta Windows.
O software é altamente maduro, com o lançamento inicial em 2005. Puppet vem como software livre, de código aberto, e uma versão proprietária também está disponível para infraestruturas complexas.
Para que serve o fantoche?
O Puppet automatiza o gerenciamento e a implantação da configuração do servidor. O software permite puxar cordas e gerenciar estados em vários sistemas ao mesmo tempo, e a abordagem reduz a configuração manual e o gerenciamento de servidores individualmente.
Puppet define o estado desejado para o sistema em vez de como chegar lá. A configuração se aplica a várias plataformas e dispositivos e mantém o estado em toda a infraestrutura. No geral, há menos necessidade de os administradores de sistema apagarem incêndios, permitindo que a equipe de DevOps implemente soluções de servidor novas e melhores.
Gerenciamento de configuração de marionetes
Os scripts de automação ajudam a lidar com tarefas repetitivas, como instalar e configurar servidores. No entanto, ao trabalhar com uma infraestrutura extensa, os scripts de automação não são dimensionados.
O gerenciamento de configuração fornece uma solução para configurações de infraestrutura extensas. As práticas são consideradas a espinha dorsal do DevOps e permitem lançamentos de software frequentes e mais confiáveis em um pipeline de DevOps estabelecido.
O gerenciamento da configuração do servidor ocorre graças à abordagem de infraestrutura como código. No caso do Puppet, o código de gerenciamento do servidor está no código Puppet, que é semelhante ao Ruby. A linguagem é declarativa e descreve uma configuração baseada em modelo.
Como funciona o fantoche?
Puppet usa uma abordagem cliente-servidor e consiste nos seguintes sistemas:
- O Puppet Master é um servidor com o daemon Puppet Master que gerencia informações cruciais do sistema para todos os nós usando manifestos.
- Os Puppet Agents são nós com o Puppet instalado neles com o daemon do Puppet Agent em execução.
As seções abaixo explicam os elementos e terminologia essenciais do Puppet, que ajudam a esclarecer como o Puppet funciona.
Topologia e arquitetura de marionetes
Puppet utiliza uma arquitetura cliente/servidor que consiste no Puppet Master e Puppet Agents. Os Puppet Agents usam o modo pull para pesquisar o mestre e recuperar informações de configuração específicas do nó e do site.
A topologia segue os seguintes passos:
- Um nó executando um daemon Puppet Agent reúne todas as informações (fatos) sobre si mesmo e o agente envia os fatos ao Puppet Master.
- O Puppet Master usa os dados para criar um catálogo sobre como o nó deve ser configurado e o envia de volta ao Puppet Agent.
- O Puppet Agent se configura com base no catálogo e se reporta ao Puppet Master.
Puppet usa um utilitário chamado Facter para descobrir informações do sistema. A ferramenta vem com a instalação do Puppet por padrão.
Mestre de Marionetes
O Puppet Master é um daemon executado em um servidor dedicado. O Puppet Master é a fonte de informações e autoridade de configuração como um nó de servidor. O mestre envia instruções para todos os nós do agente e supervisiona a configuração do sistema.
O Puppet Master é responsável pelas seguintes tarefas:
- Criando um catálogo para os agentes.
- Transferências de arquivos de um servidor de arquivos para agentes.
- Aceitando certificados SSL de agentes.
- Armazenando manifestos de configuração.
O Puppet usa o gerenciamento de acesso de identidade por meio de um usuário e grupo dedicado, fornecendo segurança e expondo apenas as informações necessárias aos agentes. No entanto, nem todas as ações exigem privilégios elevados.
Agentes de marionetes
O Puppet Agent é um daemon Puppet executado em um sistema ou nó. Os agentes têm certos privilégios no nó para aplicar catálogos de configuração extraídos do Puppet Master.
Para receber permissões de comunicação, um agente solicita um certificado SSL durante o primeiro contato com o mestre. O certificado é verificado sempre que o agente solicita ao mestre atualizações de configuração antes de enviar as informações. Um mestre também se autentica nos agentes para garantir as informações de configuração corretas.
Os agentes Puppet modificam a configuração do sistema e exigem permissões de root para executar tarefas.
Criptografia de marionetes e segurança de comunicação
Puppet usa OpenSSL para comunicação e segurança. Com base nos protocolos SSL e TLS, o Puppet usa criptografia SSL/TLS padrão e certificados SSL para autenticação e verificação de agente/mestre. Além disso, o Puppet criptografa o fluxo de tráfego entre os agentes e servidores usando SSL/TLS usando SHA-256 como o hash padrão.
Os métodos de criptografia no Puppet garantem o seguinte:
- Autenticação e verificação do mestre/agente.
- Evitando violações de dados entre o mestre e os agentes.
O mestre gera seu próprio certificado de CA, chave privada, CRL (Lista de Revogação de Certificados) e um certificado de servidor. O certificado do servidor é enviado aos agentes para habilitar a comunicação SSL e TLS.
Vantagens do Puppet e por que você deve usá-lo
Puppet é uma das ferramentas de automação de gerenciamento de configuração mais antigas e populares. Abaixo estão cinco vantagens que dão boas razões para começar a usar o Puppet.
1. Código aberto
Puppet é open source, o que torna a tecnologia extensível. Bibliotecas e módulos personalizados enriquecem projetos individuais para se adequar ao seu caso de uso.
O código aberto também vem com o benefício de ter uma comunidade ativa. Muitas discussões, fóruns e especialistas estão prontos para ajudar e responder a perguntas.
2. Abstração de recursos
As tarefas de configuração são repetitivas e as mesmas etapas geralmente são necessárias em servidores com sistemas operacionais diferentes por meio de etapas específicas da plataforma. Lembrar todos os comandos é uma tarefa impossível.
Facter ajuda Puppet a descobrir as especificidades e alcançar a abstração. Dados específicos do sistema e detalhes do sistema operacional são todos familiares ao Puppet graças ao Facter.
3. Idempotência
Configurações redundantes são um problema complexo ao trabalhar com vários servidores, e o Puppet visa aplicar apenas as alterações que afetam o sistema. Se o estado desejado da infraestrutura for alcançado, o Puppet não executa os comandos. Esse recurso Puppet é conhecido como idempotência, o que ajuda a reduzir a redundância e aumentar a eficiência.
4. Multiplataforma
Puppet abrange uma ampla gama de plataformas, o que aumenta o número de servidores no processo de automação de configuração. A ferramenta funciona em Windows, OS X, sistemas baseados em Debian, Fedora, Gentoo, RHEL e Solaris.
5. Flexível
A linguagem Puppet inclui uma maneira de substituir instruções e criar exceções para diferentes cenários. O Puppet também auxilia no agendamento de ações de manutenção específicas periodicamente.
Conclusão
Puppet é uma ferramenta poderosa para gerenciar configurações e tarefas de servidor, e é uma excelente opção para servidores estáveis que não mudam dinamicamente ou com frequência.
Para ver como o Puppet se compara a outras tecnologias semelhantes, confira nosso artigo de comparação:Ansible vs. Terraform vs. Puppet.
Computação em Nuvem