Arquitetando uma Infraestrutura IaC: Deploy de Nuvem Privada com OpenStack e Ansible

Das Máquinas Físicas ao Cloud: O Princípio do IaC

A jornada para uma nuvem privada eficiente começa muito antes do primeiro serviço ser lançado. Ela se inicia com a transformação de hardware estático em recursos programáveis, uma filosofia central da infraestrutura como Código (IaC). Neste guia, mergulhamos na arquitetura de uma plataforma privada utilizando o OpenStack como orquestrador de nuvem e o ansible como mecanismo de automação para provisionamento e configuração. A combinação destas duas tecnologias robustas permite criar uma infraestrutura escalável, resiliente e gerenciada através de playbooks declarativos, eliminando configurações manuais e inconsistentes. O resultado é um ambiente onde a criação de máquinas virtuais, redes complexas e storage distribuído torna-se um processo repetível e versionado.

A Sinfonia de Componentes: OpenStack e Ansible

O OpenStack é um conjunto de projetos de código aberto que controla pools de computação, armazenamento e recursos de rede em datacenters. Sua arquitetura modular permite alta customização, mas introduz complexidade na implantação. É aqui que o Ansible assume o protagonismo. Diferente de ferramentas de provisioning tradicionais, o Ansible não possui um agente, operando via SSH (ou WinRM) e utilizando YAML para definir tarefas através de Playbooks. Ao utilizar o Ansible para instalar o OpenStack, substituímos scripts de shell manuais e ferramentas de cluster complexas por playbooks idempotentes. Isso significa que podemos reexecutar os playbooks a qualquer momento para corrigir desvios de configuração, garantindo que o estado desejado do sistema seja sempre atingido.

Preparação do Ambiente e Arquitetura de Referência

Para uma implantação robusta, assume-se uma arquitetura baseada em um nó de controle e múltiplos nós de compute (hypervisors), além de um nó de storage dedicado. A escolha do sistema operacional é crítica; CentOS Stream ou Ubuntu LTS são os mais suportados pela comunidade. O requisito fundamental é a interoperabilidade via SSH: todos os nós (controle, compute, storage) devem ter acesso SSH sem senha de um nó de controle (onde o Ansible reside) utilizando uma chave pública. A rede deve ser segmentada: uma rede de gerenciamento (para tráfego de controle e SSH), uma rede de dados (tráfego east-west entre VMs) e uma rede de fornecimento (para acesso externo às VMs). O tempo sincronizado via NTP é obrigatório, pois componentes do OpenStack como Keystone (identidade) e Nova (compute) dependem de timestamps precisos para autenticação e logs.

Configuração da Camada de Rede e SSH

Antes de qualquer instalação, estabeleça a conectividade base. Configurar a resolução de nomes via arquivo /etc/hosts ou um servidor DNS interno é essencial para que os nós se encontrem pelos nomes de host definidos. A configuração do SSH exige atenção aos firewalls (iptables/firewalld): portas 22 (SSH) e 5666 (porta de coleta do Nagios se utilizado) devem estar abertas na rede de gerenciamento. Um exemplo de configuração de hosts no Ansible, conhecido como inventário estático, organiza os nós por grupos, facilitando a aplicação de roles específicos. A estrutura do inventário deve refletir a arquitetura, agrupando nós em [control], [compute] e [storage].

Provisionamento de Infraestrutura com Ansible

Com a rede pronta, inicia-se a etapa de pré-requisitos usando Ansible. Este passo envolve a instalação de pacotes fundamentais, configuração de repositórios e ajustes de kernel. Utilizaremos o Ansible Core com módulos nativos. O primeiro playbook (por exemplo, pre_reqs.yml) deve garantir a instalação de bibliotecas como python3-dev, libffi-dev e compiladores C/C++. Além disso, é crucial desativar serviços conflitantes como NetworkManager em favor do networkd ou scripts tradicionais, e ajustar os parâmetros do kernel, como o aumento do limite de arquivos abertos (file descriptors) via ulimit e a configuração dos parâmetros net.ipv4.ip_forward e net.bridge.bridge-nf-call-iptables.

Um exemplo prático de tarefa Ansible para configurar sysctl via módulo sysctl garantiria que o tráfego de rede entre VMs fosse roteado corretamente e que o sistema suportasse o alto número de sockets abertos pelo serviço Nova-Compute. A idempotência do Ansible garante que, se o valor já estiver correto, a tarefa será marcada como “ok” sem realizar alterações.

Orquestração da Instalação do OpenStack

Existem dois caminhos principais para instalar o OpenStack com Ansible: utilizando playbooks manuais ou através da coleção oficial de playbooks da OpenStack (como o projeto openstack-ansible ou implantações via Kolla-Ansible). Para este guia, focaremos na lógica de implantação via Ansible puro, descrevendo o fluxo de execução dos componentes críticos. O processo deve ser executado em uma sequência específica devido às dependências entre serviços.

Implantação do Controller Node (Nó de Controle)

O nó de controle hospeda os serviços de Gerenciamento (Control Plane): MariaDB (ou Galera para HA), RabbitMQ (broker de mensagens), Keystone (autenticação), Glance (imagens), Nova-API, Neutron-API, entre outros. O playbook de instalação deve começar pela base de dados. Utilizando o módulo community.mysql.mysql_user e community.mysql.mysql_db, criamos os bancos e usuários necessários para cada serviço do OpenStack. Em seguida, o RabbitMQ é configurado para criar usuários e vhosts, garantindo a comunicação assíncrona entre componentes. A instalação do serviço de identidade (Keystone) é o próximo passo crítico. Aqui, o Ansible automatiza a geração de chaves de criptografia Fernet e a configuração do arquivo keystone.conf, apontando para o banco de dados e o serviço de memcached. A criação dos endpoints de serviço (API URLs) no catálogo de serviço também é automatizada via módulo openstack.cloud.identity_endpoint da coleção OpenStack.

Implantação dos Nós de Compute (Hypervisors)

Os nós de compute são responsáveis pela execução das instâncias virtuais. A automação via Ansible aqui foca na instalação do pacote nova-compute e do driver de hypervisor (geralmente KVM/QEMU). O módulo apt ou yum instala os pacotes, enquanto templates Jinja2 preenchem os arquivos de configuração (como nova.conf) com variáveis dinâmicas (IPs do controle, credenciais do banco de dados). Uma etapa vital é a verificação da capacidade de hardware. Ansible facts (coletados via setup) são usados para verificar se a extensão VT-x/AMD-v está habilitada na BIOS e se o KVM está carregado no kernel, falhando a tarefa caso contrário.

Configuração de Redes e Storage (Neutron e Ceph)

Um ambiente OpenStack sem uma rede flexível é limitado. O serviço Neutron gerencia redes, subnets, portas e roteamento. A instalação via Ansible deve configurar o agente L2 (ML2) com o driver OVS (Open vSwitch) ou OVN. O playbook precisa garantir a criação da bridge de overlay (geralmente br-tun) e a configuração dos agentes L3 e DHCP. A automação permite a definição de redes de sobreponto (VXLAN/GRE) e a integração com a rede externa, permitindo que as VMs acessem a internet. Para o storage, a adoção de Ceph como backend para Glance (imagens), Nova (volumes efêmeros) e Cinder (volumes persistentes) oferece alta disponibilidade. A instalação do Ceph via Ansible (usando o rolo oficial Ceph Ansible) envolve a criação do cluster, a distribuição de chaves de autenticação (monitors, OSDs) e a ativação de pools de storage.

Integração e Vida Útil das Instâncias

Com a infraestrutura levantada, o Ansible pode gerenciar o ciclo de vida das VMs. Utilizando a coleção openstack.cloud, podemos criar imagens (Glance), redes (Neutron) e lançar instâncias (Nova) de forma declarativa. Um playbook de exemplo poderia provisionar uma rede interna, criar um router para conectar à rede externa, e subir uma instância Ubuntu baseada em uma imagem local. O uso de cloud-init integrado permite injetar chaves SSH e scripts de usuário na inicialização da VM, garantindo acesso seguro e configuração inicial automática.

Automatização Pós-Instalação e Gerenciamento de Segredos

Após a implantação inicial, o gerenciamento contínuo é vital. O Ansible excela na aplicação de configurações de segurança e atualizações. Playbooks de hardening podem ser executados para aplicar configurações de SELinux/AppArmor, ajustar os limites de segurança no arquivo keystone.conf (como password_length), e garantir que apenas TLS 1.2/1.3 seja utilizado nos endpoints API. Para gerenciamento de segredos, o Ansible Vault é indispensável. Ele permite criptografar arquivos de variáveis contendo senhas de banco de dados, tokens de serviço e chaves de API, garantindo que apenas usuários autorizados possam descriptografá-los durante a execução do playbook, protegendo credenciais sensíveis em repositórios de código.

Monitoramento e Manutenção do Ambiente

Uma nuvem privada demanda observabilidade. O Ansible pode ser usado para instalar e configurar stacks de monitoramento como Prometheus e Grafana, ou a solução integrada do OpenStack, o Ceilometer (embora em desuso, sendo substituído pelo projeto Gnocchi). O playbook de monitoramento deve garantir a instalação do agente no cada nó (compute e control) e a configuração dos exporters (node_exporter, ceph_exporter). A automação da manutenção rotineira, como a rotação de logs do Rsyslog ou a limpeza de imagens obsoletas no Glance usando o comando openstack image delete via módulo Ansible, completa o ciclo de vida operacional.

Conclusão: Padrões, Extensibilidade e Custo-Benefício

Construir uma nuvem privada com OpenStack e Ansible é uma tarefa complexa que recompensa a disciplina técnica. A adoção do Ansible transforma uma implantação monolítica em um processo modular e testável. Ao versionar os playbooks no Git, a equipe de infraestrutura cria um registro auditável de todas as alterações na plataforma, facilitando o rollback em caso de falhas. Além disso, a arquitetura desacoplada permite a extensibilidade: adicionar novos nós de compute torna-se uma questão de adicionar um host ao inventário e rodar um playbook. Embora o custo de aprendizado seja alto, o retorno em termos de independência de fornecedor e flexibilidade operacional justifica a investida para organizações que buscam escapar das amarras da nuvem pública e ter controle total sobre seus dados e recursos computacionais.