Перевод статьи подготовлен в преддверии старта курса "Инфраструктурная платформа на основе Kubernetes".


Предлагаю вам засучить рукава и погрузиться в задачи Ansible с использованием AWS EC2. Мы рассмотрим, как установить и удалить пакет с помощью Ansible.

Несколько месяцев назад мне довелось поработать с RnD задачами в VizuaMatix c использованием ansible. С тех пор я не использовал Ansible для чего-нибудь более-менее полезного, но сегодня через YouTube я получил предложение вернуться к ansible снова. После просмотра я подумал, что стоит опять закатать рукава и взяться за Ansible. Я решил выполнить несколько задач Ansible с помощью AWS EC2.

Для этого я использовал управляющий (master node, далее “мастер”) и подчиненный рабочий (worker node, далее “воркер”) узлы. Оба работают под управлением Ubuntu 18.04.4. Задача была очень простой. Установить медиаплеер VLC на наш рабочий узел, а затем удалить его.


Для начала у нам нужно установить Ansible на мастера и воркера(-ов). Для установки просто используйте:

sudo apt install ansible

Затем нам нужно поделиться публичным ключом нашего мастера с воркером. Мы создаем ssh-ключ из мастера и передаем его воркерам.

ssh-keygen -t rsa -N “” -f /home/ubuntu/.ssh/idrsa

Затем запустите cat и скопируйте содержимое cat .ssh/idrsa.pub

Перейдите в терминал воркера и vim ~/.ssh/authorized_keys вставьте содержимое вниз этого файла, сохраните и выйдите. Этот шаг объяснен здесь.

Проверьте подключение, из мастера попробуйте:

ssh -i ~/.ssh/id_rsa username@instance_ip

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

Затем давайте добавим наших воркеров в ansible. На мастере откройте файл  /etc/ansible/hosts и добавьте в него группу. Я назвал ее [workers]. Теперь, когда вы указываете workers в своем playbook, ansible знает, какие хосты использовать при запуске playbook.

[workers]

[workers]
node_ip_address

Сохранитесь, а затем мы попробуем проверить связь с нашими воркерами: ansible workers -m ping

Это должно вернуть результат, аналогичный следующему с SUCCESS и pong

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

Если вы получите что-то еще, вам следует перепроверить все свои настройки. До сих пор мы не меняли никаких настроек по умолчанию в AWS-EC2 или Ansible. Теперь мы готовы к установке VLC.


Установка пакета с помощью Playbook

Для работы с пакетами Ansible использует playbook. Он написан на yaml и имеет достаточно прямолинейную структуру. Вы можете узнать больше о playbooks из официального руководства ansible.

Это наш новый playbook для установки vlc: installvlc.yaml

---
  - name: installvlc      # имя playbook
    hosts: workers        # куда нужно устанавливать
    become: true          # запускать как sudo user
   tasks:
      - name: Install VLC Media Player
        apt:                            # управление пакетами
          name: vlc-bin
          state: latest                
# если вам нужна конкретная версия, вы можете указать это в state: 3.0.0

Если playbook успешно запустился, просто используйте

ansible-playbook installvlc.yaml

Если все работает правильно, вы увидите что-то вроде этого:

PLAY [installvlc] *********************************************************************************************************************
TASK [Gathering Facts] ****************************************************************************************************************
ok: []
TASK [Install VLC Media Player] *******************************************************************************************************
changed: []
PLAY RECAP ****************************************************************************************************************************
 : ok=2    changed=1    unreachable=0    failed=0

changed=1 здесь означает, что playbook внес изменения в воркера. Если мы снова запустим playbook, вы увидите changed=0. Это означает, что изменения состояния (state) не происходило.

Из воркера: когда вы введете vlc в терминале, он должен вернуть вам что-то вроде VLC media player 3.0.8 Vetinari (revision 3.0.8–0-gf350b6b5a7).

Удаление пакета с помощью Playbook

Чтобы удалить пакет, нам просто нужно использовать тот же синтаксис, что и в инструкции по установке, за исключением:

state: absent

Создайте новый playbook и убедитесь, что его state изменен. Также у задачи должно быть информативное имя, чтобы вы могли различать задачи. Запускайте этот playbook как ansible-playbook uninstallvlc.yaml

Заключение

Ansible - отличный инструмент для решения задач автоматизации. Нам не нужно самому идти и вносить изменения во все узлы, просто измените yaml файл и запустите playbook. Это базовые задачи, но ansible можно использовать для настройки маршрутизаторов, устройств IoT и многого другого.

Здесь я показывал, как установить и удалить пакет с помощью ansible. В следующих руководствах мы займемся вещами посложнее, такими как добавление патчей, изменение конфигураций и т. д.


Бесплатный Demo-урок по теме: "Повышаем надежность развертывания в Kubernetes"