One place for hosting & domains

      Como instalar e configurar o Ansible no Ubuntu 18.04


      Introdução

      Sistemas de gerenciamento de configuração são projetados para facilitar o controle de um grande número de servidores aos 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 sistemas de gerenciamento de configuração populares disponíveis para sistemas Linux, como o Chef and Puppet, eles acabam sendo mais complexos do que aquilo que os usuários querem ou precisam. O Ansible é uma boa alternativa diante de tantas opções. Isso porque ele é muito mais barato para se começar.

      Neste guia, falamos sobre como instalar o Ansible em um servidor Ubuntu 18.04 e sobre alguns dos princípios básicos do software.

      Como o Ansible funciona?

      O Ansible configura máquinas de clientes a partir de um computador que tenha componentes do Ansible instalados e configurados.

      Ele se comunica por canais SSH normais para recuperar informações de máquinas remotas,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.

      Pré-requisitos

      Para seguir este tutorial, você precisará de:

      • Dois ou mais servidores Ubuntu 18.04. Um deles será usado como servidor Ansible, e o outro como hosts do Ansible. Cada um deles precisará ter um usuário sem root com privilégios sudo e um firewall básico configurado. É possível configurar esses detalhes com o nosso Guia de configuração inicial de servidor para Ubuntu 18.04. Os exemplos neste guia especificam três hosts do Ansible, mas os comandos e configurações aqui presentes podem ser usados para qualquer número de clientes.

      • Chaves SSH geradas para o usuário sem root no seu servidor do Ansible. Para fazer isso, siga o passo 1 do nosso guia Como configurar chaves SSH no Ubuntu 18.04. Para os fins deste tutorial, é possível salvar o par de chaves no local padrão (~/.ssh/id_rsa) e não é necessário protegê-lo com senha.

      Passo 1 — Como instalar o Ansible

      Para começar a usar o Ansible como gerenciador de vários servidores, é necessário instalar o software do Ansible em pelo menos uma máquina.

      Para obter a versão mais recente do Ansible para Ubuntu, adicione o PPA (personal package archive) do projeto no seu sistema. No entanto, antes de fazer isso, verifique se você tem o pacote software-properties-common instalado. Esse software facilita o gerenciamento deste e de outros repositórios de software independentes.

      • sudo apt update
      • sudo apt install software-properties-common

      Em seguida, adicione o PPA do Ansible com o comando a seguir:

      • sudo apt-add-repository ppa:ansible/ansible

      Pressione ENTER para aceitar.

      A seguir, atualize o índice de pacotes do sistema. Desse modo, você garante que todos os pacotes estejam disponíveis no PPA.

      Após atualizar, instale o software do Ansible.

      Seu servidor Ansible agora possui o software necessário para gerenciar hosts.

      Passo 2 — Como configurar o acesso SSH aos hosts do Ansible

      Como já mencionado, o Ansible se comunica principalmente com os computadores dos clientes por SSH. Ainda que ele possa processar uma autenticação SSH baseada em senhas, usar chaves SSH torna tudo mais simples.

      No seu servidor Ansible, use o comando cat para imprimir o conteúdo do arquivo de chave pública SSH do usuário no terminal de saída.

      Copie o resultado da saída, abra um novo terminal e conecte-se a um dos seus hosts do Ansible usando SSH.

      • ssh sammy@ansible_host_ip

      Altere o usuário para o root da máquina do cliente.

      Como usuário root, abra authorized_keys na pasta ~/.ssh:

      • nano ~/.ssh/authorized_keys

      Agora no arquivo, cole a chave SSH do cliente do seu servidor Ansible. Em seguida, salve o arquivo e feche o editor (pressione CTRL + X, Y e ENTER). Execute o comando exit para retornar como usuário sem root do host.

      Uma vez que o Ansible usa um interpretador de Python localizado em /usr/bin/python para executar seus respectivos módulos, será necessário instalar o Python 2 no host para que o Ansible consiga se comunicar com ele. Execute os comandos a seguir para atualizar o índice de pacotes do host e instalar o pacote python.

      • sudo apt update
      • sudo apt install python

      Em seguida, execute novamente o comando exit para encerrar a conexão com o cliente:

      Repita o processo para cada servidor que você deseja controlar com seu servidor Ansible. A seguir, vamos configurar um servidor Ansible que se conecte a esses hosts usando o arquivo de hosts do Ansible.

      Passo 3 — Como configurar os hosts do Ansible

      O Ansible controla todos os servidores conhecidos por meio de um arquivo de hosts. Precisamos primeiro configurar o arquivo antes de começar a comunicação com outros computadores.

      Abra o arquivo com privilégios sudo, desta forma:

      • sudo nano /etc/ansible/hosts

      Agora no arquivo, haverá configurações de exemplo comentadas (com um #antes de cada linha). Os exemplos não funcionarão no nosso caso porque os hosts listados aqui são inventados. No entanto, manteremos os exemplos no arquivo para nos ajudar na configuração, caso queiramos implementar cenários mais complexos posteriormente.

      O arquivo hosts é bastante flexível, uma vez que pode ser configurado de várias maneiras. Porém, a sintaxe que usaremos será assim:

      [group_name]
      alias ansible_host=your_server_ip
      

      Nota: Com o lançamento do Ansible 2.0, a variável de configuraçãoansible_host foi substituída pela variável original ansible_ssh_host. Se você estiver usando uma versão mais antiga do Ansible, será necessário usar a variável mais antiga e mais longa.

      Neste exemplo, group_nameé uma tag organizacional que permite que você se refira a qualquer servidor listado abaixo dela com uma palavra, enquanto que aliasé apenas o nome para o qual se referir, no caso de um servidor específico.

      Desse modo, no cenário criado, imaginamos ter três servidores controláveis com o Ansible. A partir daqui, tais servidores estarão acessíveis do Ansible. Para acessá-los, basta digitar:

      Você não precisará entrar uma senha se tiver configurado tudo corretamente. Para efeitos de demonstração, suponhamos que os endereços IP de nossos hosts sejam 203.0.113.1, 203.0.113.2 e 203.0.113. Vamos configurá-los de modo que possamos nos referir a eles individualmente como host1, host2 e host3, ou como um grupo com o nome dos servidores.

      Este é o bloco que devemos adicionar no nosso arquivo de hosts para fazer isso:

      /etc/ansible/hosts

      [servers]
      host1 ansible_host=203.0.113.1
      host2 ansible_host=203.0.113.2
      host3 ansible_host=203.0.113.3
      

      Os hosts podem estar em vários grupos e os grupos podem configurar parâmetros para todos os membros deles. Agora, vamos fazer um teste.

      Com a configuração atual, caso tentemos nos conectar a qualquer um desses hosts com o Ansible, o comando para isso falhará (supondo que você não esteja usando um usuário root). Isso acontece porque sua chave SSH está incorporada no usuário root nos sistemas remotos e o Ansible tentará se conectar com o usuário atual por padrão. Uma tentativa de conexão gerará este erro:

      Output

      host1 | UNREACHABLE! => { "changed": false, "msg": "Failed to connect to the host via ssh.", "unreachable": true }

      No servidor Ansible, estamos usando um usuário chamado sammy. O Ansible tentará se conectar a cada host com ssh sammy@server. Isso não funcionará se o usuário sammy não estiver também em um sistema remoto.

      Podemos criar um arquivos que informe a todos os servidores no grupo “servers” para se conectarem ao usuário root.

      Para isso, criaremos uma pasta na estrutura de configuração do Ansible chamada group_vars. Dentro dessa pasta, criamos arquivos formatados em YAML para cada grupo que queremos configurar.

      • sudo mkdir /etc/ansible/group_vars
      • sudo nano /etc/ansible/group_vars/servers

      Arquivos YAML devem começar com “—”. Não esqueça de começá-los assim.

      /etc/ansible/group_vars/servers

      ---
      ansible_user: root
      

      Nota: Similar à variável ansible_host, ansible_user substituiu ansible_ssh_user no lançamento da versão 2.0. Se você estiver usando uma versão mais antiga do que o Ansible 2.0, certifique-se de usar a variável mais antiga e mais longa.

      Salve e feche o arquivo quando você terminar.

      Se você quiser especificar os detalhes de configuração para cada servidor, independentemente da associação de grupo, insira esses detalhes em um arquivo em /etc/ansible/group_vars/all. Hosts individuais podem ser configurados a partir de arquivos com o nome de seu respectivo alias dentro de uma pasta em /etc/ansible/host_vars.

      Passo 4 — Como usar comandos simples do Ansible

      Agora que temos nossos hosts prontos e informações de configuração suficientes para que nos conectemos a nossos hosts, podemos tentar usar nosso primeiro comando.

      Faça um teste de ping em todos os servidores que você configurou. Digite:

      Ping output

      host1 | SUCCESS => {
          "changed": false,
          "ping": "pong"
      }
      
      host3 | SUCCESS => {
          "changed": false,
          "ping": "pong"
      }
      
      host2 | SUCCESS => {
          "changed": false,
          "ping": "pong"
      }
      

      Trata-se de um teste básico para verificar se o Ansible possui uma conexão com todos os hosts dele.

      A parte do comando que diz all quer dizer todos os hosts. Podemos também especificar um grupo facilmente:

      Ou então especificar um host individual:

      Podemos especificar vários hosts separando-os com dois-pontos:

      • ansible -m ping host1:host2

      A parte do comando que diz -m ping é uma instrução para que o Ansible use o módulo “ping”. Basicamente, são esses os comandos que você pode executar nos seus hosts remotos. O módulo ping funciona de maneira similar ao utilitário de ping padrão do Linux. A diferença é que, diferente deste, aquele verifica a conectividade do Ansible.

      O módulo ping não recebe nenhum argumento, mas podemos usar outro comando para ver como isso funciona. Passamos argumentos para um script digitando -a.

      O módulo “shell” permite que enviemos um comando de terminal para o host remoto e que recuperemos os resultados. Por exemplo, para conferir o uso de memória da nossa máquina host1, podemos usar:

      • ansible -m shell -a 'free -m' host1

      Shell output

      host1 | SUCCESS | rc=0 >>
                   total       used       free     shared    buffers     cached
      Mem:          3954        227       3726          0         14         93
      -/+ buffers/cache:        119       3834
      Swap:            0          0          0
      

      Com isso, seu servidor Ansible está configurado. Com ele, você poderá se comunicar e controlar seus hosts com sucesso.

      Conclusão

      Neste tutorial, configuramos o Ansible e vimos como ele pode se comunicar com cada host. Usamos também o comando ansible para executar tarefas simples de modo remoto.

      Embora isso seja útil, não cobrimos os recursos mais poderosos neste artigo: os Playbooks. Os Playbooks do Ansible são maneiras simples e poderosas de se gerenciar a configuração de servidores e implantações de várias máquinas. Para uma introdução sobre os Playbooks, confira esteguia. Além disso, recomendamos que você confira a documentação oficial do Ansible. Desse modo, você saberá mais sobre a ferramenta.



      Source link