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.

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

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.

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 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.

Paradigmas Declarativos

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.

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

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 do Agente Puppet Master
Comunicação do Agente Puppet Master

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.…

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

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.

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ó.

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.

Comunicação entre o Mestre e o Agente
O agente aplica a 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

  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 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.

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, 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:

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

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

Tipos de recursos personalizados do Puppet

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

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

Tipos de recursos personalizados do Puppet

É 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

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:

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

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.

Instalação de demonstração NTP

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

Instalação de demonstração NTP