Tutorial do Puppet para iniciantes: O que é o Puppet e como usá-lo?
Antes de aprendermos o Puppet, vamos entender:
O que é Gerenciamento de Configuração?
O gerenciamento de configuração é o processo de manutenção de software e sistemas de computador (por exemplo, servidores, armazenamento, redes) em um estado conhecido, desejado e consistente. Também permite acesso a um registro histórico preciso do estado do sistema para fins de gerenciamento e auditoria de projetos.
Os administradores de sistema executam principalmente tarefas repetitivas, como instalar servidores, configurar esses servidores, etc. Esses profissionais podem automatizar essa tarefa escrevendo scripts.
No entanto, é um trabalho difícil quando se trabalha em uma infraestrutura enorme. A ferramenta de gerenciamento de configuração como um Puppet foi introduzida para resolver esses problemas.
O que é Marionete?
Fantoche é uma ferramenta de gerenciamento de sistema para centralizar e automatizar o processo de gerenciamento de configuração. O Puppet também é usado como ferramenta de implantação de software. É um software de gerenciamento de configuração de código aberto amplamente utilizado para configuração, gerenciamento, implantação e orquestração de servidores de vários aplicativos e serviços em toda a infraestrutura de uma organização.
O Puppet foi especialmente projetado para gerenciar a configuração do Linux e Windows sistemas. Está escrito em Ruby e usa seu exclusivo DOMain Specífico Llinguagem (DSL) para descrever a configuração do sistema.
Quais são as versões do Puppet?
O fantoche vem em duas versões:
- Fantoche de código aberto: É uma versão básica da ferramenta de gerenciamento de configuração Puppet, também conhecida como Open Source Puppet. Ele está disponível diretamente no site do Puppet e é licenciado pelo sistema Apache 2.0.
- Empresa de marionetes: Versão comercial que oferece recursos como relatórios de conformidade, orquestração, controle de acesso baseado em função, GUI, API e ferramentas de linha de comando para gerenciamento eficaz de nós.
O que o fantoche pode fazer?
Por exemplo, você tem uma infraestrutura com cerca de 100 servidores. Como administrador de sistema, é sua função garantir que todos esses servidores estejam sempre atualizados e funcionando com todas as funcionalidades.
Para fazer isso, você pode usar o Puppet, que permite escrever um código simples que pode ser implantado automaticamente nesses servidores. Isso reduz o esforço humano e torna o processo de desenvolvimento rápido e eficaz.
O fantoche executa as seguintes funções:
- O Puppet permite definir configurações distintas para cada host.
- A ferramenta permite monitorar continuamente os servidores para confirmar se a configuração necessária existe ou não e se não foi alterada. Se a configuração for alterada, a ferramenta Puppet reverterá para a configuração predefinida no host.
- Ele também fornece controle sobre todo o sistema configurado, para que uma alteração centralizada seja efetuada automaticamente.
- Ele também é usado como uma ferramenta de implantação, pois implanta software automaticamente no sistema. Ele implementa o infraestrutura como um código porque as políticas e configurações são escritas como código.
Puppet DSL e paradigmas de programação
Antes de aprendermos o Puppet DSL, vamos entender os paradigmas de programação:
Um paradigma de programação é um estilo que você usa na programação de computadores.
Quatro tipos de paradigmas são:
- Imperativo.
- Declarativo.
- Funcional (que é considerado um subconjunto desse paradigma declarativo)
- Orientado a Objeto.
Vamos nos concentrar em Imperativo e Declarativo.
Paradigmas Imperativos
Este paradigma de programação expressa a lógica de uma computação(O que fazer) e descreve seu fluxo de controle(Como fazer)
Exemplo:
Suponha que você esteja indo para o seu escritório, você reserva um táxi e começa a dar instruções passo a passo ao motorista até chegar ao escritório. Especificar o que fazer e como fazer é um estilo imperativo.
Paradigmas Declarativos
Este paradigma de programação expressa a lógica de uma computação(O que fazer) sem descrever seu fluxo de controle(Como fazer)
Exemplo:
Suponha que você esteja indo para o seu escritório, reserve um táxi Uber e especifique o destino final (Escritório). Especificar o que fazer e não como fazer é um estilo declarativo.
Paradigm | O que fazer | Como fazer |
---|---|---|
imperativo | Sim | Sim |
Declarativo | Sim | Não |
Puppet usa um paradigma de programação declarativo
O Puppet usa uma abordagem de programação declarativa.
Exemplo: Crie um usuário no sistema:
Isso pode ser feito usando o padrão de programação Imperative por um shell script: Aqui especificamos como criar o usuário e quais comandos usar no sistema operativo.
No entanto, isso pode ser feito usando o padrão de programação declarativo com apenas algumas linhas de código fantoche, linguagem específica de domínio (DSL) do fantoche e ainda obter o mesmo resultado.
Modelos de implantação de ferramentas de gerenciamento de configuração
Existem dois modelos de implantação para ferramentas de gerenciamento de configuração :
- Modelo de implantação baseado em push: iniciado por um nó mestre.
- Modelo de implantação baseado em pull: iniciado por agentes.
Modelo de implantação baseado em push
Neste modelo de implantação, o servidor mestre envia as configurações e o software para os agentes individuais. Após verificar uma conexão segura, o mestre executa comandos remotamente nos agentes. Por exemplo, Ansible e pilha de sal.
Modelo de implantação baseado em pull.
Neste modelo de implantação, servidores individuais entram em contato com um servidor mestre, verificam e estabelecem uma conexão segura, baixam suas configurações e software e, em seguida, configuram-se adequadamente — por exemplo, Puppet e Chef.
Como funciona o fantoche?
O Puppet é baseado em um modelo de implantação Pull, onde os nós do agente fazem check-in regularmente após cada 1800 segundos com o nó mestre para ver se algo precisa ser atualizado no agente. Se algo precisar ser atualizado, o agente extrai os códigos fantoches necessários do mestre e executa as ações necessárias.
Vamos explicar com um exemplo:
Exemplo: Mestre – Configuração do Agente:
O Mestre
Uma máquina baseada em Linux com software Puppet Master instalado. É responsável por manter as configurações na forma de códigos fantoches. O nó mestre só pode ser Linux.
Os Agentes
As máquinas de destino gerenciadas por um fantoche com o software do agente fantoche instalado nelas.
O agente pode ser configurado em qualquer sistema operacional compatível, como Linux ou Windows or Solaris ou Mac OS.
A comunicação entre mestre e agente é estabelecida através de certificados seguros.
Comunicação entre o Mestre e o Agente
Passo 1) Uma vez estabelecida a conectividade entre o agente e o mestre, o agente Puppet envia os dados sobre seu estado para o servidor Puppet master. Eles são chamados de fatos: essas informações incluem o nome do host, detalhes do kernel, endereço IP, detalhes do nome do arquivo, etc.…
Passo 2) O Puppet Master utiliza esses dados e compila uma lista com a configuração a ser aplicada ao agente. Esta lista de configurações a serem executadas em um agente é conhecida como Catálogo. Isso pode ser alterado, como instalação de pacotes, atualizações ou remoções, criação de sistema de arquivos, criação ou exclusão de usuários, reinicialização do servidor, alterações na configuração de IP, etc.
Passo 3) O agente usa esta lista de configurações para aplicar quaisquer alterações de configuração necessárias no nó.
Caso não haja desvios na configuração, o Agente não realiza nenhuma alteração na configuração e deixa o nó rodar com a mesma configuração.
Passo 4) Uma vez feito isso, o nó reporta ao puppet master indicando que a configuração foi aplicada e concluída.
Blocos de fantoches
O Puppet oferece flexibilidade para integrar relatórios com ferramentas de terceiros usando APIs do Puppet.
Quatro tipos de blocos de construção Puppet são
- Recursos
- Classes
- Manifesto
- Módulos
Recursos de fantoches
Os recursos do Puppet são os blocos de construção do Puppet.
Os recursos são os funções integradas que são executados no back-end para executar as operações necessárias no fantoche.
Aulas de fantoches
Uma combinação de diferentes recursos pode ser agrupada em uma única unidade chamada classe.
Manifesto de Marionetes
Manifesto é um diretório que contém arquivos DSL fantoches. Esses arquivos têm uma extensão .pp. A extensão .pp significa programa fantoche. O código do fantoche consiste em definições ou declarações de classes do fantoche.
Módulos de fantoches
Módulos são uma coleção de arquivos e diretórios, como manifestos e definições de classe. Eles são as unidades reutilizáveis e compartilháveis no Puppet.
Por exemplo, a MySQL módulo para instalar e configurar MySQL ou o módulo Jenkins para gerenciar Jenkins, etc.
Tipos de recursos do Puppet
Em geral, um sistema consiste em arquivos, usuários, serviços, processos, pacotes, etc. No Puppet, eles são chamados de recursos. Os recursos são os blocos de construção fundamentais na
Fantoche. Todas as operações em agentes fantoches são realizadas com a ajuda de recursos fantoches.
Os recursos Puppet são ferramentas prontas usadas para executar várias tarefas e operações em qualquer plataforma suportada. Podemos usar um único recurso fantoche para executar uma tarefa específica ou podemos usar vários recursos fantoches juntos para executar algumas implantações complexas de configurações de aplicativos.
Os recursos podem ter diferentes tipos. Usos de fantoches recursos e tipos de recursos para descrever a configuração de um sistema.
Existem três tipos de recursos:
- Núcleo do fantoche ou tipos de recursos integrados.
- Tipos de recursos definidos pelo fantoche.
- Tipos de recursos personalizados do Puppet.
Núcleo do fantoche ou tipos de recursos integrados
Os tipos de recursos principais ou integrados são os tipos de recursos puppet pré-construídos fornecidos com o software puppet. Todos os tipos de recursos principais ou integrados do Puppet são escritos e mantidos pela equipe do Puppet.
Tipos de recursos definidos por fantoches
Os tipos de recursos definidos são tipos de recursos leves escritos em linguagem declarativa Puppet usando uma combinação de tipos de recursos existentes.
Tipos de recursos personalizados do Puppet
Os tipos de recursos personalizados são tipos de recursos totalmente personalizados escritos em Ruby.
Vamos explorar os tipos de recursos fantoches…
No terminal, digite o seguinte comando para exibir uma lista de subcomandos relevantes do Puppet:
Puppet --help
No nosso caso, estamos interessados no subcomando “recurso”que usaremos para encontrar informações sobre os tipos de recursos de marionetes integrados.
No terminal, digite qualquer um dos seguintes comandos para exibir uma lista de Ações associado ao subcomando fantoche “recurso":
Puppet help resource Puppet resource --help
Nesse caso, temos o recurso como subcomando e –tipos como ação.
O Puppet possui 49 tipos de recursos principais integrados.
No terminal, digite o seguinte comando para exibir uma lista de tipos de recursos de marionetes integrados disponíveis:
puppet resource –types
Cada tipo suporta uma lista de atributos. Esses atributos fornecem uma descrição detalhada que o Puppet usa para gerenciar o recurso.
Para descobrir todos os atributos associados ao tipo de recurso fantoche, use o seguinte comando:
puppet describe <resource type name>
Os parâmetros listarão todos os atributos disponíveis para esse tipo de recurso.
pacote de descrição de fantoches
É difícil para uma nova pessoa entender e relacionar muitos arquivos de código fantoche não gerenciados. É aqui que precisamos de algum agrupamento para unir as operações. O objetivo é resolver um único problema, como todas as operações necessárias para configurar o ssh em um servidor ou serviço NTP ou um servidor web completo ou servidor de banco de dados do zero.
O que são aulas de fantoches?
Classes de fantoches são a coleção de recursos de fantoches agrupados como uma única unidade.
O Puppet introduziu classes para tornar a estrutura reutilizável e organizada.
Primeiro, precisamos definir uma classe usando a sintaxe de definição de classe; as classes devem ser únicas e podem ser declaradas apenas uma vez com o mesmo nome:
class <class-name> { <Resource declarations> }
Exemplo:
class ntpconfig { file { "/etc/ntp.conf": ensure=> "present", content=> "server 0.centos.pool.ntp.org iburst\n", } }
Até agora definimos apenas a classe, mas não a usamos em lugar nenhum. Significa que este código que escrevemos nunca será executado a menos que declaremos esta classe em outro lugar.
Declaração de Classe
Para usar uma classe definida no código, use o incluir palavra chave.
class ntpconfig { file { "/etc/ntp.conf": ensure=> "present", content=> "server 0.centos.pool.ntp.org iburst\n", } } include ntpconfig
Vamos entender isso com um cenário real.
Instalação de demonstração NTP
Primeiro, certifique-se de que o pacote NTP ainda não esteja presente no servidor, o comando a seguir não retornará nada se o telnet não estiver presente no servidor:
rpm -qa | grep -i ntp
Como podemos ver, o pacote NTP já está presente no servidor. Vamos remover o pacote NTP existente:
yum remove ntp
Após remover o pacote, certifique-se de que o arquivo ntp.conf não exista:
ls -lrt /etc/ntp.conf
Verifique se o serviço NTP não existe executando o seguinte comando:
systemctl status ntp
Crie um novo arquivo .pp para salvar o código. Na linha de comando:
vi demontp.pp
Mude para o modo de inserção pressionando i no teclado.
Digite o seguinte código para criar um novo arquivo:
# Class Definition class ntpconfig { # Installing NTP Package package {"ntp": ensure=> "present", } # Configuring NTP configuration file file {"/etc/ntp.conf": ensure=> "present", content=> "server 0.centos.pool.ntp.org iburst\n", } # Starting NTP services service {"ntpd": ensure=> "running", } }
Depois de terminar a edição: pressione esc
Para salvar o arquivo, pressione :wq!
O próximo passo é verificar se o código contém algum erro de sintaxe. Execute o seguinte comando:
puppet parser validate demontp.pp
Certifique-se de que você mudou para o raiz para poder completar o teste sem nenhum erro, executando o comando:
su root
Teste é a próxima etapa no processo de criação de código. Execute o seguinte comando para realizar um teste de fumaça:
Puppet applies demontp.pp --noop
O último passo é corrida o boneco em modo real e verifique a saída.
puppet apply demontp.pp
O Puppet não fez nada porque a aula de demonstração era apenas definido mas não Declarado.
Portanto, até que você declare a classe fantoche, o código não será aplicado.
Vamos declarar a classe demo dentro do mesmo código usando incluir o nome da classe no final do código:
# Class Definition class ntpconfig { # Installing NTP Package package {"ntp": ensure=> "present", } # Configuring NTP configuration file file {"/etc/ntp.conf": ensure=> "present", content=> "server 0.centos.pool.ntp.org iburst\n", } # Starting NTP services service {"ntpd": ensure=> "running", } } # Class Declaration include ntpconfig
Novamente verificar se o código contém algum erro de sintaxe. Execute o seguinte comando:
puppet parser validate demontp.pp
Certifique-se de que você mudou para o raiz para poder completar o teste sem nenhum erro, executando o comando:
su root
Ensaios é a próxima etapa no processo de criação de código. Execute o seguinte comando para realizar um teste de fumaça:
Puppet apply demontp.pp --noop
O último passo é corrida o boneco em modo real e verifique a saída.
puppet apply demontp.pp
Desta vez o código é aplicado porque a classe foi definida e depois declarada.
Certifique-se de que o ntp.conf já exista:
ls -lrt /etc/ntp.conf
Verifique se o serviço NTP foi iniciado executando o seguinte comando:
systemctl status ntpd