Tutorial de Marionetes para Iniciantes: Noções Básicas e DSL

⚡ Resumo Inteligente

O Puppet é uma plataforma de gerenciamento de configuração de código aberto que automatiza o provisionamento, a configuração e a manutenção da consistência de servidores. Ele aplica infraestrutura como código por meio de uma linguagem declarativa de domínio específico, substituindo a administração manual repetitiva em grandes parques de servidores.

  • 🧩 Gerenciamento de configurações: O Puppet mantém servidores, armazenamento e redes em um estado conhecido e consistente, preservando um histórico auditável de cada alteração.
  • ???? Agente-mestre Architextura: Um servidor Linux compila catálogos e agentes no Linux. Windows, SolarisOu então, o Mac OS os aplica por meio de certificados seguros.
  • 🔄 Modelo de tração: Os agentes fazem check-in a cada 1800 segundos, obtêm o código Puppet necessário e corrigem qualquer desvio de configuração no nó.
  • 🧠 DSL declarativa: Escrito em Ruby, o Puppet usa uma linguagem declarativa, então você define o estado final desejado em vez de comandos passo a passo.
  • 🧱 Blocos de construção: Recursos, classes, manifestos e módulos estruturam o código reutilizável, com 49 tipos de recursos principais integrados disponíveis por padrão.
  • ⚙️ Exemplo prático de NTP: Defina e declare uma classe, valide-a com o comando `puppet parser validate`, e então aplique o manifesto usando o comando `puppet apply`.

Tutorial do Puppet explicando os conceitos básicos de gerenciamento de configuração, arquitetura mestre-agente e a DSL declarativa.

O Puppet é uma ferramenta de gerenciamento de configuração de código aberto que permite definir infraestrutura como código e manter grandes conjuntos de servidores em um estado consistente e repetível. Antes de aprendermos sobre o Puppet, vamos primeiro entender o que é gerenciamento de configuração.

O que é Gerenciamento de Configuração?

O gerenciamento de configuração é o processo de manter softwares e sistemas de computador — como servidores, armazenamento e redes — em um estado conhecido, desejado e consistente. Ele também fornece acesso a um registro histórico preciso do estado do sistema para fins de gerenciamento de projetos e auditoria.

Os administradores de sistemas geralmente executam tarefas repetitivas, como instalar e configurar servidores. Esses profissionais podem automatizar esse trabalho escrevendo scripts.

No entanto, essa tarefa se torna difícil quando se trabalha com uma infraestrutura de grande porte. Ferramentas de gerenciamento de configuração, como o Puppet, foram introduzidas para resolver esses problemas.

O que é Marionete?

Fantoche O Puppet é uma ferramenta de gerenciamento de sistemas para centralizar e automatizar o processo de gerenciamento de configuração. Ele 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 diversos 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 Puppet de código aberto. Está disponível diretamente no site da Puppet e é licenciada sob o sistema Apache 2.0.
  • Puppet EnterpriseUma versão comercial que oferece recursos como relatórios de conformidade, orquestração, controle de acesso baseado em funções, uma interface gráfica de usuário (GUI), uma API e ferramentas de linha de comando para o gerenciamento eficaz de nós.

O que o fantoche pode fazer?

Por exemplo, imagine que você tenha uma infraestrutura com cerca de 100 servidores. Como administrador de sistemas, sua função é garantir que todos esses servidores estejam sempre atualizados e funcionando com todas as funcionalidades em pleno funcionamento.

Administrador do sistema trabalhando manualmente nos servidores
System Admin trabalhando manualmente nos servidores

Para isso, você pode usar o Puppet, que permite escrever código simples que pode ser implantado automaticamente nesses servidores. Isso reduz o esforço humano e torna o processo de desenvolvimento mais rápido e eficaz.

Puppet automatiza o gerenciamento de servidores
Puppet automatiza o gerenciamento de servidores

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 e não foi alterada. Caso a configuração seja alterada, o Puppet reverte para a configuração predefinida no host.
  • Também proporciona controle sobre todos os sistemas configurados, de modo que uma alteração centralizada seja automaticamente efetivada em todos os lugares.
  • Também é utilizado como ferramenta de implantação, pois implanta automaticamente o software no sistema. Ele implementa Infraestrutura como código, porque as políticas e configurações são escritas em código.

Puppet DSL e paradigmas de programação

Antes de aprendermos a DSL do Puppet, 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 do paradigma declarativo).
  • Orientado a Objeto.

Vamos nos concentrar nos paradigmas imperativo e declarativo.

Paradigmas Imperativos

Este paradigma de programação expressa a lógica de uma computação (o que fazer) e também descreve seu fluxo de controle (como fazer).

Exemplo:

Imagine que você está indo para o escritório. Você chama 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

Esse paradigma de programação expressa a lógica de uma computação (o que fazer) sem descrever seu fluxo de controle (como fazer).

Exemplo:

Imagine que você está indo para o escritório. Você reserva um Uber e especifica apenas o destino final (o escritório). Especificar o que fazer, mas 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: Criar um usuário no sistema.

Isso pode ser feito usando um padrão de programação imperativa com um script de shell. Aqui, especificamos como criar o usuário e quais comandos usar no script. sistema operativo.

Paradigmas Declarativos

No entanto, isso também pode ser feito usando um padrão de programação declarativa com apenas algumas linhas de código Puppet e a linguagem específica de domínio (DSL) do Puppet, e ainda assim alcançar o mesmo resultado.

Paradigmas Declarativos

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

Nesse 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

Nesse modelo de implantação, os servidores individuais contatam um servidor mestre, verificam e estabelecem uma conexão segura, baixam suas configurações e softwares e, em seguida, se configuram de acordo — por exemplo, Puppet e Chef.

Como funciona o fantoche?

O Puppet é baseado em um modelo de implantação pull, onde os nós agentes fazem check-in regularmente — após cada 1800 segundos — com o nó mestre para verificar se algo precisa ser atualizado no agente. Se uma atualização for necessária, o agente obtém o código Puppet necessário do mestre e executa as ações necessárias.

Vamos explicar isso com um exemplo de uma configuração mestre-agente.

O Mestre

Trata-se de uma máquina baseada em Linux com o software Puppet instalado. Ela é responsável por manter as configurações na forma de código Puppet. O nó mestre só pode ser Linux.

Os Agentes

Essas são as máquinas de destino gerenciadas pelo Puppet, com o software agente do Puppet instalado nelas.

O agente pode ser configurado em qualquer sistema operacional compatível, como o Linux. Windows, Solarisou Mac OS.

A comunicação entre o servidor principal e o agente é estabelecida por meio de certificados de segurança.

Comunicação do Agente Puppet Master
Comunicação do Agente Puppet Master

Comunicação entre o Mestre e o Agente

Passo 1) Assim que a conectividade entre o agente e o servidor mestre é estabelecida, o agente Puppet envia dados sobre seu estado para o servidor mestre Puppet. Esses dados são chamados de "Fatos" e incluem o nome do host, detalhes do kernel, endereço IP, detalhes do nome do arquivo e assim por diante.

Comunicação entre o Mestre e o Agente
Agente envia fatos ao mestre

Passo 2) O servidor Puppet usa esses dados e compila uma lista das configurações a serem aplicadas ao agente. Essa lista de configurações a serem executadas em um agente é conhecida como lista de configurações. catálogoIsso pode incluir instalação, atualização ou remoção de pacotes, criação de sistemas de arquivos, criação ou exclusão de usuários, reinicialização do servidor, alterações na configuração de IP e assim por diante.

Comunicação entre o Mestre e o Agente
Mestre envia um catálogo ao Agente

Passo 3) O agente usa esta lista de configurações para aplicar quaisquer alterações de configuração necessárias no nó.

Se não houver desvios na configuração, o agente não realiza nenhuma alteração de configuração e deixa o nó em execução com a mesma configuração.

Comunicação entre o Mestre e o Agente
O agente aplica a configuração

Passo 4) Assim que concluído, o nó envia um relatório ao servidor Puppet, indicando que a configuração foi aplicada e finalizada.

Blocos de fantoches

O Puppet oferece a flexibilidade de integrar relatórios com ferramentas de terceiros usando APIs do Puppet.

Os quatro tipos de blocos de construção de marionetes são:

  1. Recursos
  2. Classes
  3. Manifesto
  4. 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 executadas em segundo plano para realizar as operações necessárias no Puppet.

Aulas de fantoches

Uma combinação de diferentes recursos pode ser agrupada em uma única unidade chamada classe.

Manifesto de Marionetes

Um manifesto é um diretório que contém arquivos DSL do Puppet. Esses arquivos têm a extensão .pp, que significa programa Puppet. O código Puppet consiste em definições ou declarações de classes Puppet.

Módulos de fantoches

Os 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 O módulo instala e configura. MySQL, e a Jenkins módulo gerencia Jenkins.

Módulos de fantoches
Módulos de fantoches

Tipos de recursos do Puppet

Em geral, um sistema consiste em arquivos, usuários, serviços, processos, pacotes e assim por diante. No Puppet, esses elementos são chamados de recursos e constituem os blocos de construção fundamentais do Puppet.

Todas as operações nos agentes Puppet são realizadas com o auxílio dos recursos do Puppet.

Os recursos do Puppet são ferramentas prontas para uso que permitem executar diversas tarefas e operações em qualquer plataforma compatível. Podemos usar um único recurso do Puppet para realizar uma tarefa específica ou vários recursos do Puppet em conjunto para realizar implantações complexas de configuração 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:

  1. Núcleo do fantoche ou tipos de recursos integrados.
  2. Tipos de recursos definidos pelo fantoche.
  3. 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 pré-construídos do Puppet que acompanham o software. 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 na linguagem declarativa do 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 mais detalhadamente os tipos de recursos do Puppet.

No terminal, digite o seguinte comando para exibir uma lista de subcomandos relacionados ao Puppet:

Puppet --help

Tipos de recursos personalizados do Puppet

No nosso caso, estamos interessados ​​no subcomando “recurso“, que usaremos para encontrar informações sobre os tipos de recursos integrados do Puppet.

No terminal, digite qualquer um dos seguintes comandos para exibir uma lista de Ações associado ao subcomando Puppet “recurso":

Puppet help resource		
Puppet resource --help		

Tipos de recursos personalizados do Puppet

Nesse caso, temos recurso como o subcomando e –tipos como a ação.

O Puppet possui 49 tipos de recursos principais integrados.

No terminal, digite o seguinte comando para exibir uma lista dos tipos de recursos integrados do Puppet disponíveis:

puppet resource –types

Tipos de recursos personalizados do Puppet

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 a um tipo de recurso do Puppet, 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

Tipos de recursos personalizados do Puppet

Para um iniciante, é difícil entender e relacionar muitos arquivos de código Puppet não gerenciados. É aí que precisamos de algum suporte em grupo.ping Integrar operações. O objetivo é resolver um único problema, como todas as operações necessárias para configurar o SSH em um servidor, um serviço NTP ou um servidor web ou de banco de dados completo do zero.

O que são aulas de fantoches?

As aulas de fantoches são coleções de recursos de fantoches agrupados em 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, apenas definimos a classe; não a utilizamos em nenhum lugar. Isso significa que o código que escrevemos nunca será executado a menos que declaremos essa classe em outro lugar.

Declaração de Classe

Para usar uma classe definida em seu 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 do mundo real.

Instalação de demonstração NTP

Primeiro, verifique se o pacote NTP ainda não está presente no servidor. O comando a seguir não retornará nada se o pacote NTP não estiver presente no servidor:

rpm -qa | grep -i ntp

Instalação de demonstração 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 mais:

ls -lrt /etc/ntp.conf

Instalação de demonstração NTP

Verifique se o serviço NTP não existe executando o seguinte comando:

systemctl status ntp

Instalação de demonstração NTP

Crie um novo arquivo .pp para salvar o código. Na linha de comando:

vi demontp.pp

Alterne para o modo de inserção pressionando a tecla "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",
    }
}

Após concluir 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 ter mudado para o raiz O usuário poderá concluir o teste sem erros, executando o seguinte comando:

su root

Testar é 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

A última etapa é corrida Execute o fantoche no modo real e verifique a saída.

puppet apply demontp.pp

O Puppet não executou nada porque a aula de demonstração era apenas isso: definido mas não Declarado.

Portanto, até que você declare a classe Puppet, 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

Mais uma vez, verificar se o código contém algum erro de sintaxe. Execute o seguinte comando:

puppet parser validate demontp.pp

Certifique-se de ter mudado para o raiz O usuário poderá concluir o teste sem erros, executando o seguinte comando:

su root

Testes é 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

A última etapa é corrida Execute o fantoche no 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.

Instalação de demonstração NTP

Certifique-se de que o arquivo ntp.conf agora existe:

ls -lrt /etc/ntp.conf

Verifique se o serviço NTP foi iniciado executando o seguinte comando:

systemctl status ntpd

Instalação de demonstração NTP

Perguntas Frequentes

O Puppet é escrito em Ruby. Ele usa sua própria Linguagem de Domínio Específico (DSL) declarativa, permitindo que os administradores descrevam o estado desejado do sistema em vez de criar scripts para cada etapa. A DSL do Puppet é inspirada no Ruby, mas você não precisa conhecer Ruby para escrever manifestos.

O Puppet utiliza um modelo de busca declarativo baseado em agentes e sua própria DSL, de forma que os nós busquem catálogos de um servidor mestre. Ansible O Puppet dispensa o uso de agentes e envia playbooks YAML via SSH. Ele é adequado para a aplicação de estados a longo prazo, enquanto o Ansible é mais simples para orquestração rápida e sob demanda.

Por padrão, o servidor Puppet (também chamado de master) escuta na porta TCP 8140. Os agentes Puppet se conectam a essa porta via HTTPS para enviar informações e baixar seus catálogos compilados. Certifique-se de que a porta 8140 esteja aberta no firewall entre os agentes e o master.

O servidor Puppet Master deve ser executado em Linux. Os agentes Puppet funcionam em diversas plataformas, incluindo Linux. Windows, Solarise Mac OS. Esse suporte a agentes multiplataforma permite que um único servidor Puppet gerencie uma frota mista de servidores e estações de trabalho a partir de um local central.

O Puppet Forge é o repositório público de módulos Puppet pré-compilados, compartilhados pela Puppet e pela comunidade. Em vez de escrever manifestos do zero, você pode baixar módulos que instalam e configuram softwares como... MySQL or JenkinsEm seguida, adapte-as ao seu ambiente.

Sim. O Puppet continua sendo uma ferramenta amplamente utilizada para gerenciamento de configuração e infraestrutura como código, agora mantida pela Perforce. O Puppet 8 é a versão principal atual e ainda oferece suporte tanto ao Puppet de código aberto quanto à versão comercial. Puppet Enterprise para gerenciar grandes parques de servidores.

Assistentes de IA podem gerar DSL do Puppet a partir de instruções em linguagem natural, explicar manifestos existentes e sinalizar erros de sintaxe ou lógica antes de você executar o comando `puppet parser validate`. Ferramentas como... ChatGPT Agilize a criação de conteúdo, mas sempre revise os recursos gerados para garantir que os caminhos estejam corretos e que a idempotência seja garantida.

Sim. Travas deslizantes portáteis Copiloto do GitHub O recurso de autocompletar preenche os manifestos do Puppet, as declarações de recursos e as definições de classe a partir de um breve comentário ou contexto de arquivo. RevVerifique se o resultado contém os tipos de recursos, nomes de atributos e dependências corretos, pois o código gerado pode fazer referência a módulos desatualizados ou valores padrão.

Resuma esta postagem com: