Os 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. Isso permite que você controle sistemas diferentes de forma automática a partir de um local central.
Embora existam muitas ferramentas de gerenciamento de configuração populares disponíveis para sistemas Linux, como o Chef e o Puppet, essas são muitas vezes mais complexas do que aquilo que as pessoas desejam ou necessitam. O Ansible é uma ótima alternativa, pois ele oferece uma arquitetura simples que não exige que qualquer software especial esteja instalado em nós, e usa o SSH para executar as tarefas de automação e os arquivos YAML para definir detalhes de fornecimento.
Neste guia, falaremos sobre como instalar o Ansible em um servidor Ubuntu 18.04 e sobre alguns dos princípios básicos de como usar este software.
O Ansible funciona configurando máquinas de clientes, referidas como hosts do Ansible, de um computador que tenha os componentes do Ansible instalados e configurados, que é então chamado nó controlador do Ansible.
Ele se comunica por canais SSH normais para recuperar informações de sistemas remotos,executa comandos e copia arquivos. Por isso, o sistema Ansible não exige que nenhum software adicional seja instalado nos computadores do cliente.
É por isso que o Ansible simplifica a administração de servidores. Qualquer servidor que tenha uma porta SSH aberta pode ser gerenciado pela configuração do Ansible, independentemente do estágio do ciclo de vida. Isso quer dizer que qualquer computador que seja gerenciado por SSH também pode ser gerenciado pelo Ansible.
O Ansible usa uma abordagem modular, o que torna fácil a extensão do uso de funcionalidades do sistema principal para processar cenários específicos. Os módulos podem ser escritos em qualquer linguagem e se comunicam em JSON padrão.
Os arquivos de configuração são, em geral, escritos no formato de serialização de dados YAML devido à facilidade de uso e similaridade com outras linguagens de marcação conhecidas. O Ansible interage com hosts tanto por ferramentas de linha de comando como por scripts de configuração, conhecidos como Playbooks.
Para seguir este tutorial, você precisará de:
Um nó de controle do Ansible: um nó de controle do Ansible é a máquina que usaremos para nos conectar e controlar os hosts do Ansible através do SSH. Seu nó de controle do Ansible pode estar tanto na sua máquina local como em um servidor dedicado que esteja executando o Ansible, embora este guia suponha que seu nó de controle seja um sistema Ubuntu 18.04. Certifique-se de que o nó de controle tenha:
ufw
e habilitará o acesso externo ao seu perfil de usuário não raiz, e ambos irão ajudar a manter o servidor remoto seguro.Um ou mais hosts do Ansible: um host do Ansible é qualquer máquina que seu nó de controle do Ansible esteja configurado para automatizar. Este guia supõe que seus hosts do Ansible sejam servidores remotos do Ubuntu 18.04. Certifique-se de que cada host do Ansible tenha:
authorized_keys
de um usuário do sistema. Este usuário pode ser tanto o root como um usuário regular com privilégios sudo. Para configurar isso, siga o Passo 2 de Como configurar as chaves SSH no Ubuntu 18.04.Para começar a usar o Ansible como um meio de gerenciar a infraestrutura do seu servidor, será necessário instalar o software Ansible na máquina que servirá como o nó de controle do Ansible.
Do seu nó de controle, execute o seguinte comando para incluir o PPA (arquivo de pacotes pessoais) oficial do projeto na lista de fontes do seu sistema:
- sudo apt-add-repository ppa:ansible/ansible
Pressione ENTER
quando solicitado para aceitar a adição do PPA.
A seguir, atualize o índice de pacotes do sistema. Desse modo, você garante que todos os pacotes estejam disponíveis no PPA recentemente incluído.
- sudo apt update
Após atualizar, instale o software do Ansible com:
- sudo apt install ansible
Seu nó de controle do Ansible agora possui o software necessário para gerenciar hosts. A seguir, veremos como adicionar hosts ao arquivo de inventário do nó de controle para que ele possa controlá-los.
O arquivo de inventário contém informações sobre os hosts que você irá gerenciar com o Ansible. Você pode incluir qualquer lugar, de um a centenas de servidores no seu arquivo de inventário. Além disso, hosts podem ser organizados em grupos e subgrupos. O arquivo de inventário também é usado muitas vezes para definir variáveis que serão válidas apenas para hosts ou grupos específicos, de forma a serem utilizadas dentro de playbooks e templates. Algumas variáveis também podem afetar a maneira como um playbook é executado, como a variável ansible_python_interpreter
que veremos a seguir.
Para editar o conteúdo do seu inventário padrão do Ansible, abra o arquivo /etc/ansible/hosts
usando seu editor de linha de comando preferido na sua máquina local ou em um nó de controle do Ansible.
- sudo nano /etc/ansible/hosts
Nota: algumas instalações do Ansible não criarão um arquivo de inventário padrão. Se o arquivo não existir no seu sistema, você pode criar um novo arquivo em /etc/ansible/hosts
ou fornecer um caminho personalizado para o inventário usando o parâmetro -i
ao executar comandos e playbooks.
O arquivo de inventário padrão fornecido pela instalação do Ansible contém alguns exemplos que você pode usar como referências para configurar o seu inventário. O exemplo a seguir define um grupo chamado [servers]
que contém três servidores diferentes, cada um identificado por um pseudônimo personalizado: server1, server2 e server3. Certifique-se de substituir os IP destacados pelos endereços IP dos 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
[servers:vars]
ansible_python_interpreter=/usr/bin/python3
O subgrupo server:vars
define o parâmetro host ansible_python_interpreter
que será válido para todos os hosts incluídos no grupo servers
. Este parâmetro garante que o servidor remoto utilize o executável do Python 3 /usr/bin/python3
ao invés 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
para confirmar as alterações e então ENTER
.
Sempre que quiser verificar seu inventário, você pode executar:
- ansible-inventory --list -y
Você verá um resultado similar a este, mas contendo sua própria infraestrutura de servidor como definida no 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 configurou seu arquivo de inventário, você tem tudo o que precisa para testar a conexão com seus hosts do Ansible.
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 através do SSH.
Para este guia, usaremos a conta root do Ubuntu, pois ela é tipicamente a única conta disponível por padrão em servidores recém-criados. Se seus hosts do Ansible já tiverem um usuário regular sudo criado, incentivamos o uso dessa conta como alternativa.
Você pode usar o argumento -u
para especificar o usuário remoto do sistema. Caso não seja fornecido, o Ansible tentará se conectar como seu usuário do sistema atual no nó de controle.
A partir 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
interno do Ansible para executar um teste de conexão em todos os nós do seu inventário padrão, conectando como root. O módulo ping
irá testar:
Você deve obter um resultado similar a este:
Outputserver1 | SUCCESS => {
"changed": false,
"ping": "pong"
}
server2 | SUCCESS => {
"changed": false,
"ping": "pong"
}
server3 | SUCCESS => {
"changed": false,
"ping": "pong"
}
Se essa é a primeira vez que está se conectando a esses servidores através do SSH, será solicitado que você confirme a autenticidade dos hosts aos quais está se conectando pelo Ansible. Quando solicitado, digite yes
e, em seguida, aperte ENTER
para confirmar.
Assim que receber uma resposta "pong"
de um host, isso significa que você está pronto para executar comandos do Ansible e playbooks naquele servidor.
Nota: Se for incapaz de obter uma resposta bem sucedida dos seus servidores, confira nosso Guia de dicas do Ansible para maiores informações sobre como executar comandos do Ansible com opções de conexão diferentes.
Após confirmar que seu nó de controle do Ansible consegue se comunicar com seus hosts, você pode começar a executar comandos ad hoc e playbooks nos seus servidores.
Qualquer comando que você normalmente executaria em um servidor remoto através do SSH pode ser executado com o Ansible nos servidores especificados no seu arquivo de inventário. Como exemplo, você pode verificar o uso de 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 que você queira.
Também é possível executar módulos do Ansible através de comandos ad hoc, de forma similar ao que fizemos antes com o módulo ping
para testar a conexão. Por exemplo, é assim que podemos usar o módulo apt
para instalar a versão mais recente do vim
em todos os servidores no seu inventário:
- ansible all -m apt -a "name=vim state=latest" -u root
Também é possível direcionar a hosts específicos, além de grupos e subgrupos, ao executar comandos do Ansible. Por exemplo, é assim que poderia ser verificado o uptime
de cada host no grupo servers
:
- ansible servers -a "uptime" -u root
Podemos especificar vários hosts separando-os com dois-pontos:
- ansible server1:server2 -m ping -u root
Para maiores informações sobre como usar o Ansible, incluindo como executar playbooks para automatizar a configuração do servidor, veja nosso Guia de referência do Ansible.
Neste guia, você instalou o Ansible e configurou um arquivo de inventário para executar comandos ad hoc de um nó de controle do Ansible.
Assim que garantir que você consegue conectar-se e controlar sua infraestrutura a partir de uma máquina de controle central do Ansible, você pode executar qualquer comando ou playbook que queira nesses hosts. Para servidores novos, o playbook Configuração inicial do servidor da comunidade é um bom ponto de partida. Você também pode aprender a escrever seus próprios playbooks com nosso guia Gerenciamento de configuração 101: escrevendo playbooks do Ansible.
Para maiores informações sobre como usar o Ansible, confira nosso Guia de dicas do Ansible.
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!
Sign up for Infrastructure as a Newsletter.
Working on improving health and education, reducing inequality, and spurring economic growth? We'd like to help.
Get paid to write technical tutorials and select a tech-focused charity to receive a matching donation.