Uma Introdução à Gerenciamento de Configurações com Ansible

Introdução

O gerenciamento de configuração é o processo de lidar com alterações em um sistema de forma a assegurar a integridade ao longo do tempo, geralmente envolvendo ferramentas e processos que facilitam a automação e a observabilidade. Embora esse conceito não tenha surgido na indústria de TI, o termo é amplamente utilizado para se referir ao gerenciamento de configuração de servidores.

No contexto de servidores, o gerenciamento de configuração também é comumente referido como Automação de TI ou Orquestração de Servidores. Ambos os termos enfatizam os aspectos práticos do gerenciamento de configuração e a capacidade de controlar vários sistemas a partir de um servidor central.

Este guia irá percorrer os benefícios de usar uma ferramenta de gerenciamento de configuração para automatizar a configuração de sua infraestrutura de servidores, e como uma ferramenta como Ansible pode ajudá-lo com isso.

Benefícios de Usar uma Ferramenta de Gerenciamento de Configuração

Existem várias ferramentas de gerenciamento de configuração disponíveis no mercado, com diferentes níveis de complexidade e estilos arquiteturais diversos. Embora cada uma destas ferramentas tenha suas próprias características e funcione de maneira ligeiramente diferente, todas elas fornecem a mesma função: garantir que o estado de um sistema corresponda ao estado descrito por um conjunto de scripts de provisionamento.

Muitos dos benefícios do gerenciamento de configuração para servidores vêm da capacidade de definir sua infraestrutura como código. Isso permite que você:

  • Utilize um sistema de controle de versão para acompanhar quaisquer mudanças em sua infraestrutura
  • Reutilize scripts de provisionamento para múltiplos ambientes de servidor, como desenvolvimento, teste e produção
  • Compartilhe scripts de provisionamento entre colegas para facilitar a colaboração em um ambiente de desenvolvimento padronizado
  • Agilize o processo de replicação de servidores, o que facilita a recuperação de erros críticos

Além disso, ferramentas de gerenciamento de configuração oferecem a você uma maneira de controlar de um a centenas de servidores a partir de um local central, o que pode melhorar significativamente a eficiência e a integridade de sua infraestrutura de servidores.

Visão Geral do Ansible

Ansible é uma ferramenta moderna de gerenciamento de configuração que facilita a tarefa de configurar e manter servidores remotos, com um design minimalista destinado a colocar os usuários em funcionamento rapidamente.

Os usuários escrevem scripts de provisionamento Ansible em YAML, um padrão de serialização de dados amigável ao usuário que não está ligado a nenhuma linguagem de programação específica. Isso permite que os usuários criem scripts de provisionamento sofisticados de forma mais intuitiva em comparação com ferramentas semelhantes na mesma categoria.

O Ansible não requer nenhum software especial a ser instalado nos nós que serão gerenciados com esta ferramenta. Uma máquina de controle é configurada com o software Ansible, que então se comunica com os nós via SSH padrão.

Como ferramenta de gerenciamento de configuração e framework de automação, o Ansible encapsula todas as funcionalidades comuns presentes em outras ferramentas da mesma categoria, mantendo ainda um forte foco na simplicidade e desempenho:

Comportamento Idempotente

O Ansible monitora o estado dos recursos em sistemas gerenciados para evitar a repetição de tarefas que já foram executadas. Se um pacote já estiver instalado, ele não tentará instalá-lo novamente. O objetivo é que, após cada execução de provisionamento, o sistema alcance (ou mantenha) o estado desejado, mesmo que seja executado várias vezes. Isso caracteriza o Ansible e outras ferramentas de gerenciamento de configuração como tendo um comportamento idempotente. Ao executar um playbook, você verá o status de cada tarefa sendo executada e se a tarefa realizou ou não uma mudança no sistema.

Suporte a Variáveis, Condicionais e Laços

Ao escrever scripts de automação com Ansible, você pode utilizar variáveis, condicionais e laços para tornar sua automação mais versátil e eficiente.

Fatos do Sistema

O Ansible coleta uma série de informações detalhadas sobre os nós gerenciados, como interfaces de rede e sistema operacional, e as disponibiliza como variáveis globais chamadas fatos do sistema. Os fatos podem ser utilizados em playbooks para tornar sua automação mais versátil e adaptável, comportando-se de maneira diferente dependendo do sistema que está sendo provisionado.

Sistema de Modelagem

O Ansible utiliza o sistema de modelagem Jinja2 em Python para permitir expressões dinâmicas e acesso a variáveis. Os modelos podem ser usados para facilitar a configuração de arquivos de configuração e serviços. Por exemplo, você pode usar um modelo para configurar um novo host virtual no Apache, reutilizando o mesmo modelo para múltiplas instalações de servidores.

Suporte para Extensões e Módulos

O Ansible vem com centenas de módulos integrados para facilitar a escrita de automação para tarefas comuns de administração de sistemas, como instalar pacotes com apt e sincronizar arquivos com rsync, e também para lidar com softwares populares como sistemas de banco de dados (como MySQL, PostgreSQL, MongoDB, entre outros) e ferramentas de gerenciamento de dependências (como composer do PHP, gem do Ruby, npm do Node, entre outros). Além disso, existem várias maneiras de estender o Ansible: plugins e módulos são boas opções quando você precisa de uma funcionalidade personalizada que não está presente por padrão.

Você também pode encontrar módulos e plugins de terceiros no portal Ansible Galaxy.

Familiarização com Conceitos do Ansible

Agora vamos analisar a terminologia e os conceitos do Ansible para ajudá-lo a se familiarizar com esses termos à medida que surgem ao longo desta série.

Nó de Controle

Um nó de controle é um sistema onde o Ansible está instalado e configurado para se conectar aos seus servidores. Você pode ter múltiplos nós de controle, e qualquer sistema capaz de rodar o Ansible pode ser configurado como um nó de controle, incluindo computadores pessoais ou laptops que executam um sistema operacional baseado em Linux ou Unix. Atualmente, o Ansible não pode ser instalado em hosts Windows, mas você pode contornar essa limitação configurando uma máquina virtual que roda Linux e executando o Ansible a partir daí.

Nós Gerenciados

Os sistemas que você controla usando o Ansible são chamados de nós gerenciados. O Ansible requer que os nós gerenciados sejam acessíveis via SSH e tenham o Python 2 (versão 2.6 ou superior) ou Python 3 (versão 3.5 ou superior) instalado.

O Ansible suporta uma variedade de sistemas operacionais, incluindo servidores Windows como nós gerenciados.

Inventário

Um arquivo de inventário contém uma lista dos hosts que você gerenciará usando Ansible. Embora o Ansible geralmente crie um arquivo de inventário padrão ao ser instalado, você pode usar inventários por projeto para ter uma melhor separação de sua infraestrutura e evitar a execução de comandos ou playbooks no servidor errado por engano. Inventários estáticos são geralmente criados como arquivos .ini, mas você também pode usar inventários gerados dinamicamente escritos em qualquer linguagem de programação capaz de retornar JSON.

Tarefas

No Ansible, uma tarefa é uma unidade individual de trabalho a ser executada em um nó gerenciado. Cada ação a ser realizada é definida como uma tarefa. As tarefas podem ser executadas como uma ação pontual via comandos ad-hoc, ou incluídas em um playbook como parte de um script de automação.

Playbook

Um playbook contém uma lista ordenada de tarefas e algumas outras diretivas para indicar quais hosts são o alvo dessa automação, se deve ou não usar um sistema de escalonamento de privilégios para executar essas tarefas e seções opcionais para definir variáveis ou incluir arquivos. O Ansible executa tarefas sequencialmente e uma execução completa de um playbook é chamada de jogo. Playbooks são escritos no formato YAML.

Manipuladores

Manipuladores são usados para realizar ações em um serviço, como reiniciar ou parar um serviço que está ativamente em execução no sistema do nó gerenciado. Os manipuladores são tipicamente acionados por tarefas e sua execução ocorre no final de uma peça, após todas as tarefas serem concluídas. Dessa forma, se mais de uma tarefa acionar um reinício de um serviço, por exemplo, o serviço será reiniciado apenas uma vez e após todas as tarefas serem executadas. Embora o comportamento padrão do manipulador seja mais eficiente e, em geral, uma prática melhor, também é possível forçar a execução imediata do manipulador se isso for exigido por uma tarefa.

Funções

Uma função é um conjunto de playbooks e arquivos relacionados organizados em uma estrutura predefinida que é conhecida pelo Ansible. As funções facilitam a reutilização e a reaproveitamento de playbooks em pacotes compartilháveis de automação granular para objetivos específicos, como instalar um servidor web, instalar um ambiente PHP ou configurar um servidor MySQL.

Conclusão

O Ansible é uma ferramenta de automação de TI minimalista que tem uma curva de aprendizado suave, em parte devido ao seu uso do YAML para seus scripts de provisionamento. Possui um grande número de módulos integrados que podem ser usados para abstrair tarefas como instalação de pacotes e trabalho com templates. Seus requisitos de infraestrutura simplificados e sintaxe acessível podem ser uma boa opção para aqueles que estão começando com gerenciamento de configuração.

Na próxima parte desta série, veremos como instalar e começar a usar o Ansible em um servidor Ubuntu 20.04.

Source:
https://www.digitalocean.com/community/conceptual_articles/an-introduction-to-configuration-management-with-ansible