Introdução
Sistemas de gerenciamento de configuração são projetados para otimizar o processo de controle de grandes números de servidores, para administradores e equipes de operações. Eles permitem controlar muitos sistemas diferentes de forma automatizada a partir de um único local centralizado.
Embora existam muitas ferramentas populares de gerenciamento de configuração disponíveis para sistemas Linux, como Chef e Puppet, essas são frequentemente mais complexas do que muitas pessoas desejam ou precisam. Ansible é uma ótima alternativa a essas opções, pois oferece uma arquitetura que não requer software especial para ser instalado nos nós, usando SSH para executar as tarefas de automação e arquivos YAML para definir detalhes de provisionamento.
Neste guia, discutiremos como instalar o Ansible em um servidor Ubuntu 20.04 e revisaremos alguns conceitos básicos de como usar este software. Para uma visão mais geral do Ansible como ferramenta de gerenciamento de configuração, consulte Uma Introdução ao Gerenciamento de Configuração com Ansible.
Pré-requisitos
Para seguir este tutorial, você precisará:
-
Um Nó de Controle Ansible: O nó de controle Ansible é a máquina que usaremos para conectar e controlar os hosts Ansible por SSH. Seu nó de controle Ansible pode ser sua máquina local ou um servidor dedicado à execução do Ansible, embora este guia assuma que seu nó de controle é um sistema Ubuntu 20.04. Certifique-se de que o nó de controle tenha:
- Um usuário não root com privilégios sudo. Para configurar isso, você pode seguir as Etapas 2 e 3 do nosso Guia de Configuração Inicial do Servidor para o Ubuntu 20.04. No entanto, observe que se estiver usando um servidor remoto como seu nó de Controle Ansible, você deve seguir cada etapa deste guia. Isso configurará um firewall no servidor com
ufw
e habilitará o acesso externo ao perfil do seu usuário não root, o que ajudará a manter o servidor remoto seguro. - Um par de chaves SSH associado a este usuário. Para configurar isso, você pode seguir a Etapa 1 do nosso guia sobre Como Configurar Chaves SSH no Ubuntu 20.04.
- Um usuário não root com privilégios sudo. Para configurar isso, você pode seguir as Etapas 2 e 3 do nosso Guia de Configuração Inicial do Servidor para o Ubuntu 20.04. No entanto, observe que se estiver usando um servidor remoto como seu nó de Controle Ansible, você deve seguir cada etapa deste guia. Isso configurará um firewall no servidor com
-
Um ou mais Hosts Ansible: Um host Ansible é qualquer máquina que seu nó de controle do Ansible esteja configurado para automatizar. Este guia presume que seus hosts Ansible são servidores Ubuntu 20.04 remotos. Certifique-se de que cada host Ansible tenha:
- A chave pública SSH do nó de controle do Ansible adicionada às
authorized_keys
de um usuário do sistema. Este usuário pode ser tanto root quanto um usuário regular com privilégios sudo. Para configurar isso, você pode seguir o Passo 2 de Como Configurar Chaves SSH no Ubuntu 20.04.
- A chave pública SSH do nó de controle do Ansible adicionada às
Etapa 1 — Instalando o Ansible
Para começar a usar o Ansible como meio de gerenciar sua infraestrutura de servidores, você precisa instalar o software Ansible na máquina que servirá como o nó de controle do Ansible.
A partir do seu nó de controle, execute o seguinte comando para incluir o PPA (arquivo pessoal de pacotes) oficial do projeto na lista de fontes do seu sistema:
- sudo apt-add-repository ppa:ansible/ansible
Pressione ENTER
quando for solicitado para aceitar a adição do PPA.
Em seguida, atualize o índice de pacotes do seu sistema para que ele reconheça os pacotes disponíveis no PPA recém-incluído:
- sudo apt update
Após esta atualização, você pode instalar o software Ansible com:
- sudo apt install ansible
Seu nó de controle do Ansible agora possui todo o software necessário para administrar seus hosts. A seguir, vamos explicar como adicionar seus hosts ao arquivo de inventário do nó de controle, para que ele possa controlá-los.
Etapa 2 — Configurando o Arquivo de Inventário
O arquivo de inventário contém informações sobre os hosts que você gerenciará com o Ansible. Você pode incluir de um a várias centenas de servidores no arquivo de inventário, e os hosts podem ser organizados em grupos e subgrupos. O arquivo de inventário também é frequentemente usado para definir variáveis que serão válidas apenas para hosts ou grupos específicos, a fim de serem usadas em playbooks e modelos. Algumas variáveis também podem afetar a forma como um playbook é executado, como a variável ansible_python_interpreter
que veremos em um momento.
Para editar o conteúdo do seu inventário padrão do Ansible, abra o arquivo /etc/ansible/hosts
usando o editor de texto de sua escolha, em seu nó de controle do Ansible:
- sudo nano /etc/ansible/hosts
Observação: Embora o Ansible geralmente crie um arquivo de inventário padrão em etc/ansible/hosts
, você está livre para criar arquivos de inventário em qualquer local que melhor atenda às suas necessidades. Nesse caso, você precisará fornecer o caminho para o seu arquivo de inventário personalizado com o parâmetro -i
ao executar comandos e playbooks do Ansible. O uso de arquivos de inventário por projeto é uma boa prática para minimizar o risco de executar um playbook no grupo errado de servidores.
O arquivo de inventário padrão fornecido pela instalação do Ansible contém vários exemplos que você pode usar como referência para configurar seu inventário. O exemplo a seguir define um grupo chamado [servers]
com três servidores diferentes nele, cada um identificado por um alias personalizado: server1, server2 e server3. Certifique-se de substituir os IPs destacados pelos endereços IP dos seus hosts do Ansible.
[servers]
server1 ansible_host=203.0.113.111
server2 ansible_host=203.0.113.112
server3 ansible_host=203.0.113.113
[all:vars]
ansible_python_interpreter=/usr/bin/python3
O subgrupo all:vars
define o parâmetro do host ansible_python_interpreter
que será válido para todos os hosts incluídos neste inventário. Esse parâmetro garante que o servidor remoto utilize o executável Python 3 /usr/bin/python3
em vez do /usr/bin/python
(Python 2.7), que não está presente em versões recentes do Ubuntu.
Quando terminar, salve e feche o arquivo pressionando CTRL+X
, em seguida Y
e ENTER
para confirmar as alterações.
Sempre que quiser verificar seu inventário, pode executar:
- ansible-inventory --list -y
Você verá uma saída semelhante a esta, mas contendo sua própria infraestrutura de servidor conforme definido em seu arquivo de inventário:
Outputall:
children:
servers:
hosts:
server1:
ansible_host: 203.0.113.111
ansible_python_interpreter: /usr/bin/python3
server2:
ansible_host: 203.0.113.112
ansible_python_interpreter: /usr/bin/python3
server3:
ansible_host: 203.0.113.113
ansible_python_interpreter: /usr/bin/python3
ungrouped: {}
Agora que você configurou seu arquivo de inventário, tem tudo o que precisa para testar a conexão com seus hosts Ansible.
Passo 3 — Testando a Conexão
Após configurar o arquivo de inventário para incluir seus servidores, é hora de verificar se o Ansible é capaz de se conectar a esses servidores e executar comandos via SSH.
Para este guia, estaremos usando a conta root do Ubuntu, pois essa é geralmente a única conta disponível por padrão em servidores recém-criados. Se seus hosts Ansible já tiverem um usuário sudo regular criado, é recomendável usar essa conta em vez disso.
Você pode usar o argumento -u
para especificar o usuário do sistema remoto. Quando não fornecido, o Ansible tentará se conectar como seu usuário de sistema atual no nó de controle.
Da sua máquina local ou nó de controle do Ansible, execute:
- ansible all -m ping -u root
Este comando usará o módulo ping
incorporado do Ansible para executar um teste de conectividade em todos os nós do seu inventário padrão, conectando como root. O módulo ping
testará:
- se os hosts são acessíveis;
- se você tem credenciais SSH válidas;
- se os hosts são capazes de executar módulos Ansible usando Python.
Você deve obter uma saída semelhante a esta:
Outputserver1 | SUCCESS => {
"changed": false,
"ping": "pong"
}
server2 | SUCCESS => {
"changed": false,
"ping": "pong"
}
server3 | SUCCESS => {
"changed": false,
"ping": "pong"
}
Se esta for a primeira vez que você está se conectando a esses servidores via SSH, será solicitado a confirmar a autenticidade dos hosts aos quais está se conectando via Ansible. Quando solicitado, digite yes
e depois pressione ENTER
para confirmar.
Depois de receber uma resposta "pong"
de um host, significa que você está pronto para executar comandos e playbooks do Ansible nesse servidor.
Nota: Se você não conseguir obter uma resposta bem-sucedida dos seus servidores, consulte nosso Guia de Cheat Sheet do Ansible para obter mais informações sobre como executar comandos do Ansible com diferentes opções de conexão.
Passo 4 — Executando Comandos Ad-Hoc (Opcional)
Após confirmar que o seu nó de controle do Ansible consegue comunicar com seus hosts, você pode começar a executar comandos ad-hoc e playbooks em seus servidores.
Qualquer comando que você normalmente executaria em um servidor remoto via SSH pode ser executado com o Ansible nos servidores especificados no seu arquivo de inventário. Como exemplo, você pode verificar o uso do disco em todos os servidores com:
- ansible all -a "df -h" -u root
Output
server1 | CHANGED | rc=0 >>
Filesystem Size Used Avail Use% Mounted on
udev 3.9G 0 3.9G 0% /dev
tmpfs 798M 624K 798M 1% /run
/dev/vda1 155G 2.3G 153G 2% /
tmpfs 3.9G 0 3.9G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
/dev/vda15 105M 3.6M 101M 4% /boot/efi
tmpfs 798M 0 798M 0% /run/user/0
server2 | CHANGED | rc=0 >>
Filesystem Size Used Avail Use% Mounted on
udev 2.0G 0 2.0G 0% /dev
tmpfs 395M 608K 394M 1% /run
/dev/vda1 78G 2.2G 76G 3% /
tmpfs 2.0G 0 2.0G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup
/dev/vda15 105M 3.6M 101M 4% /boot/efi
tmpfs 395M 0 395M 0% /run/user/0
...
O comando destacado df -h
pode ser substituído por qualquer comando de sua escolha.
Você também pode executar módulos Ansible através de comandos ad-hoc, da mesma forma que fizemos antes com o módulo ping
para testar a conexão. Por exemplo, veja como podemos usar o módulo apt
para instalar a última versão do vim
em todos os servidores do seu inventário:
- ansible all -m apt -a "name=vim state=latest" -u root
Você também pode direcionar hosts individuais, assim como grupos e subgrupos, ao executar comandos Ansible. Por exemplo, assim é como você verifica o uptime
de cada host no grupo servers
:
- ansible servers -a "uptime" -u root
Podemos especificar vários hosts separando-os por dois-pontos:
- ansible server1:server2 -m ping -u root
Para obter mais informações sobre como usar o Ansible, incluindo como executar playbooks para automatizar a configuração do servidor, você pode verificar o nosso Guia de Referência do Ansible.
Conclusão
Neste guia, você instalou o Ansible e configurou um arquivo de inventário para executar comandos ad-hoc a partir de um Nó de Controle do Ansible.
Depois de confirmar que é capaz de se conectar e controlar sua infraestrutura a partir de uma máquina controladora do Ansible central, você pode executar qualquer comando ou playbook desejado nesses hosts.
Para mais informações sobre como usar o Ansible, confira o nosso Guia de Referência Rápida do Ansible.