Из этого туториала Вы узнаете, как установить Ansible на сервер Ubuntu и подключить миньон-сервер к серверу управления Ansbile. Затем мы создадим сборник воспроизведения Ansible, который будет использоваться для установки некоторых базовых пакетов программного обеспечения на сервер миньонов. В руководстве также будет представлен обзор основных команд Ansible, которые пригодятся в будущем.

Почему Ansible?

Если вы когда-либо работали в dev-ops или тратили время на настройку серверов для запуска ваших приложений. Вы знаете, насколько громоздким может быть все это вручную. Вам не только нужно снова и снова устанавливать или настраивать одни и те же службы, вам также необходимо вручную отслеживать, что именно вы сделали и что осталось сделать. Ansible помогает решить эту проблему. Ansible устанавливается на сервере и используется в качестве станции управления, которая хранит и применяет «состояния» к серверам, которые вы выбираете для подключения к нему. Это позволяет вам эффективно настраивать серверы для выполнения ваших ставок без необходимости делать это вручную.

Предоставление серверов Linode Ubuntu

Чтобы проработать это руководство, сначала перейдите на linode.com и создайте 2 сервера, используя дистрибутив Ubuntu Linux. Один называется ansible-control, а другой - ansible-web. Обязательно установите пароль root и дайте им разогнаться.

Учебное пособие по Linode, показывающее шаги по запуску нового сервера Linode, можно найти здесь.

Https://www.linode.com/docs/getting-started/

Установка Ansible

После того, как серверы будут завершены, инициализируйте ssh на вашем сервере управления ansible.

Сначала подключитесь по ssh к вашему новому серверу управления ansible.

ssh root@<ip-address-of-ansible-control-server>

Теперь мы должны добавить доступный репозиторий ppa. После этого мы можем установить пакет Ansible на управляющий сервер.

sudo apt update
sudo apt install software-properties-common
sudo apt-add-repository --yes --update ppa:ansible/ansible
sudo apt install ansible

Подключение нашего первого миньона

После установки Ansible мы можем добавить IP-адрес нашего веб-сервера в файл / etc / ansible / hosts. Вы увидите много закомментированных строк. Это всего лишь пример, но поскольку это веб-сервер, мы можем поместить его в закомментированную группу [веб-серверы]. Чтобы воспользоваться функцией групп, мы также раскомментируем строку [веб-серверы].

# Ex 2: A collection of hosts belonging to the 'webservers' group
[webservers]
<ip-address-of-web-server>
## alpha.example.org
## beta.example.org
## 192.168.1.100
## 192.168.1.110

Создайте ключ ssh, чтобы позволить вашему серверу управления подключаться к миньонам.

ssh-keygen

Скопируйте ssh-ключ на миньон-сервер.

ssh-copy-id <ip-address-of-web-server>

Убедитесь, что Ansible может подключаться ко всем серверам миньонов (у нас только один).

ansible -m ping all

ИЛИ мы также можем настроить таргетинг на группу веб-серверов, добавив имя группы после команды ansible. Помните группу [веб-серверы] в файле хостов?

ansible webservers -m ping

Вы должны увидеть такой ответ.

<ip-address-of-web-server> | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    }, 
    "changed": false, 
    "ping": "pong"
}

Если вы видите этот ответ, наш управляющий сервер успешно смог подключиться к серверу миньонов через ssh. У нас подключен пустой миньон, и мы готовы к работе.

Создание нашей первой пьесы

Playbook - это файл YAML, который содержит ряд структур YAML, называемых «воспроизведениями». Пьесы - это именованная родительская структура, которая содержит ряд определений «задач». Задача - это отдельная команда или директива, отправляемая на сервер миньонов. Игра - это набор задач, которые организованы под одним названием. Playbook - это набор пьес в одном названном файле.

У игр и плейбуков также есть атрибуты, которые дают вам возможность указать, какие хосты в вашем инвентаре хотели бы, чтобы задачи выполнялись.

В папке / etc / ansible создайте файл с именем playbook.yml.

touch /etc/ansible/playbook.yml

Теперь давайте откроем файл и добавим несколько «пьес».

vi /etc/ansible/playbook.yml

Наша первая игра будет очень простой и будет сделана для установки 3 базовых пакетов в качестве примера. Мы будем устанавливать vim, dnsutils и git.

Вставьте следующий YAML в файл playbook.yml.

---
  - name: install basic packages 
    hosts: webservers
    tasks:
      - name: "Installing Vim"
        apt: pkg=vim
      - name: "Installing DNS Utils"
        apt: pkg=dnsutils
      - name: "Installing Git"
        apt: pkg=git

Как видите, в верхней части файла есть три дефиса. Это означает, что следующий текст находится в формате YAML.

После этого первый атрибут YAML - это имя нашего play. Мы можем называть это как угодно, но мы хотим, чтобы имя описывало общую цель всех сгруппированных задач, которые вложены в них.

Во-вторых, у нас есть атрибут hosts. Это сообщает Ansbile, в какой группе из нашего инвентаря выполнять следующие задачи. Если мы заменим веб-серверы на все, он будет работать на всех серверах в нашем инвентаре.

В-третьих, у нас есть атрибут tasks, который является родительским для всех задач, которые мы хотим запустить для этой конкретной игры.

Как видите, у каждой задачи в разделе задачи есть два обязательных атрибута. Одно из них - это название задачи, которое мы можем назвать как угодно. Вторая часть задачи сообщает Ansible, какой модуль мы вызываем. В зависимости от модуля, который мы хотим использовать, вместе с именем модуля будет предоставляться различная необходимая информация.

В этом случае мы используем модуль apt.

Список всех доступных модулей, отсортированный по категориям, находится здесь.

Https://docs.ansible.com/ansible/latest/modules/modules_by_category.html

Чтобы использовать модуль apt. Требуются два атрибута.

- name: "Installing Git"
        apt: 
          pkg: git

Атрибут верхнего имени - это выбранное вами имя для задачи. второй атрибут apt - это имя модуля. Далее следуют обязательные и необязательные атрибуты для данного модуля.

Чтобы применить эту пьесу.

ansible-playbook playbook.yml

Это применит сценарий ко всем хостам в группе [веб-серверы] в инвентаре. Вам будет предоставлен отчет, показывающий состояние каждого хоста и запущенные задачи.

PLAY [install basics] **********************************************************
TASK [Gathering Facts] *********************************************************
ok: <ip-address-of-web-server>
TASK [Installing Vim] **********************************************************
changed: <ip-address-of-web-server>
TASK [Installing DNS Utils] ****************************************************
changed: <ip-address-of-web-server>
TASK [Installing Git] **********************************************************
changed: <ip-address-of-web-server>
PLAY RECAP ********************************************************************
<ip-address-of-web-server>             : ok=1    changed=3    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

Как видно из ИСПОЛЬЗОВАНИЯ в нижней части выходных данных, на сервере миньонов было внесено 3 изменения. Был получен 1 OK результат, когда сервер управления Ansible собирал исходные данные от миньона перед применением нашей playbook.

Замечательная особенность Ansible заключается в том, что он не будет пытаться повторно запустить задачи, которые уже были успешно выполнены. Если мы снова запустим сценарий, вы увидите это в действии.

PLAY [install basics] **********************************************************
TASK [Gathering Facts] *********************************************************
ok: <ip-address-of-web-server>
TASK [Installing Vim] **********************************************************
changed: <ip-address-of-web-server>
TASK [Installing DNS Utils] ****************************************************
changed: <ip-address-of-web-server>
TASK [Installing Git] **********************************************************
changed: <ip-address-of-web-server>
PLAY RECAP ********************************************************************
<ip-address-of-web-server>             : ok=4    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

Как вы можете видеть внизу, 4 задачи выполнены со статусом ОК, и ни один сервер не изменился.

Теперь вы узнали, как подключить сервер к вашему серверу управления Ansible и установить пакеты с помощью модуля apt. В следующем руководстве мы будем использовать роли Ansible, чтобы лучше организовать наш сервер управления.

Ссылки:

Https://www.ansible.com/overview/how-ansible-works

Https://www.linode.com/docs/getting-started/

Https://docs.ansible.com/ansible/latest/modules/modules_by_category.html