Developer Advocate
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 a essas ferramentas, pois ele oferece uma arquitetura que não requer a instalação de software especial nos nós, usando o SSH para executar as tarefas de automação e os arquivos YAML para definir detalhes de provisionamento.
Neste guia, discutiremos como instalar o Ansible em um servidor Ubuntu 20.04 e abordaremos algumas noções básicas de como usar este software. Para uma visão geral de alto nível do Ansible como ferramenta de gerenciamento de configuração, consulte An Introduction to Configuration Management with Ansible.
Para seguir este tutorial, você vai precisar do seguinte:
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 20.04. Certifique-se de que o nó de controle tenha:
ufw
e habilitará o acesso externo ao seu perfil de usuário non root, 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 Ubuntu 20.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 isto, siga o Passo 2 do tutorial How to Set Up SSH Keys on Ubuntu 20.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. Vamos usar os repositórios padrão do Ubuntu para isso.
Primeiro, atualize o índice de pacotes do seu sistema com:
- sudo apt update
Após atualizar, instale o software do Ansible com:
- sudo apt install ansible
Pressione Y
quando solicitado a confirmar a instalação.
Seu nó de controle do Ansible agora possui o software necessário para gerenciar hosts. Em seguida, vamos ver como configurar um arquivo de inventário, para que o Ansible possa se comunicar com seus nós gerenciados.
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 texto preferido em seu nó de controle do Ansible.
- sudo nano /etc/ansible/hosts
Nota: embora o Ansible normalmente crie um arquivo de inventário padrão em etc/ansible/hosts
, fique à vontade para criar arquivos de inventário em qualquer local que melhor se adequar às suas necessidades. Neste caso, você precisará fornecer o caminho para seu arquivo de inventário personalizado com o parâmetro -i
ao executar comandos do Ansible e playbooks. Usar 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 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
[all:vars]
ansible_python_interpreter=/usr/bin/python3
O subgrupo all:vars
define o parâmetro de host ansible_python_interpreter
que será válido para todos os hosts incluídos neste inventário. 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 você terminar, salve e feche o arquivo pressionando CTRL+X
, depois Y
e ENTER
para confirmar suas alterações.
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 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 é geralmente 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 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!