Включите исполнение JavaScript в браузере, чтобы запустить приложение.
13 ноя 2024

Что такое Ansible и как его использовать

Хотите упростить управление IT-инфраструктурой? 💡 Узнайте, что такое Ansible, как он работает и для чего нужен. Ознакомьтесь с подробным руководством с примерами использования и инструкцией по установке от Gitverse.

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

Ansible — что это и зачем он нужен

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

Ansible используется для многоуровневых развертываний и моделирует всю инфраструктуру в рамках одного развертывания вместо того, чтобы обрабатывать каждое из них по отдельности. В архитектуре Ansible нет агентов и для его использования не нужна пользовательская архитектура безопасности. Развертывание представляет собой простой язык, похожий на английский. Он используется в Ansible и называется YAML, что расшифровывается как «YAML Ain’t Markup Language».

Работать с Ansible очень просто. Инструмент отправляет небольшие программы, называемые «модулями Ansible», на ваши узлы для подключения. Он может развертываться и подключаться с помощью SSH-агента для запуска модулей, а затем удаляет его по завершении. Эти модули могут находиться в любом месте компьютера. Вам необходимо работать с любым текстовым редактором или терминальными программами, а также с системой контроля версий, чтобы управлять изменениями в содержимом. В Ansible встроено более 750 модулей.

Особенности Ansible

Безагентность. Инструмент не требует установки дополнительного ПО или agents на целевые системы, которыми вы хотите управлять. В нем применяется SSH (для систем Linux/Unix) или WinRM (для систем Windows) для удаленного взаимодействия.

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

Идемпотентность. Системы разработаны так, чтобы быть идемпотентными. Это означает, что их можно запускать несколько раз, не вызывая непреднамеренных изменений. Если желаемое состояние уже достигнуто, Ansible не будет вносить никаких изменений. Это помогает обеспечить стабильность всех систем.

Специальные команды. В дополнение к Playbooks, Ansible позволяет запускать команды непосредственно из командной строки. Это делает его полезным для быстрой работы над задачами или устранения неполадок.

Inventory Management. В Ansible есть файл инвентаризации для отметки списка хостов или систем, которыми он должен управлять. Файл инвентаризации бывает статическим или динамическим, что позволяет автоматизировать задачи на широком спектре хостов.

Декларативный язык. Ansible применяет декларативный язык для определения желаемого состояния системы или приложения. Вы указываете, как должна выглядеть система, а Ansible выясняет, как этого добиться.

Структура Ansible

Рассмотрим, что входит в архитектуру Ansible.

Модули

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

Плагины

Плагины — это фрагмент кода, который расширяет основные функциональные возможности Ansible. Существует множество полезных плагинов. Можно написать свой собственный.

Файл Hosts

В архитектуре Ansible хосты — это узловые системы, которые автоматизированы с помощью Ansible. Они работают вместе с Red Hat, Linux, Windows.

Информация об узлах —  Facts

Факты — это системные данные и свойства, относящиеся к конкретному хосту, к которому вы подключаетесь. Ими могут быть IP-адрес, информация о BIOS, информация о системном программном обеспечении и даже данные об аппаратном обеспечении. Доступные facts помогают администратору управлять хостом на основе его текущего состояния, а не выполнять действия напрямую.

Ansible Playbook

Playbook — это простые файлы, написанные на языке YAML. В Ansible они действуют как руководства, в которых рассказывается, как можно быстрее и проще выполнить задачу.

Роли

Роли работают в качестве переносимого модуля. Он служит методом группировки связанных задач и связанных переменных, файлов, обработчиков . Ansible Roles позволяют создавать пакеты контента для автоматизации.

Ansible Roles and Ansible Playbooks — это инструменты для организации и выполнения задач автоматизации, но у каждого из них свои цели. Решите ли вы создавать роли Ansible или записывать все свои задачи в Playbook, зависит от конкретного случая использования. Большинство разработчиков систем автоматизации и системных администраторов начинают создавать контент для автоматизации с отдельных сборников задач. Сборник задач — это список задач автоматизации. Задачи могут быть организованы в сборники — группы из 1 или более задач, привязанных к определенному хосту и выполняемых в определенном порядке.

Обработчики

Обработчики работают так же, как и любые обычные задачи. Разница между обработчиками и обычными задачами  в том, что обработчики запускаются только при «уведомлении» с помощью директивы notify. Обработчики обычно используются для запуска, перезапуска, перезагрузки и остановки служб на целевых узлах только при изменении состояния задачи, а не при отсутствии изменений. Это помогает достичь идемпотентности.

По умолчанию обработчики выполняются последними, независимо от их расположения в playbook. Вы можете определить и вызвать один или несколько обработчиков в playbook в зависимости от задач, которые нужно выполнить.

Теги

Теги — это метаданные, которые вы можете прикрепить к задачам в Ansible playbook. Они позволяют выборочно настраивать определенные задачи во время выполнения. Обычно запускается весь playbook от начала до конца. Но иногда важно запускать определенные задачи в playbook по требованию. Пример, где playbook определяет два тега: hello и goodbye.

- hosts: localhost
  gather_facts: False
  tasks:

    - name: Hello tag example
      debug:
        msg: "Hello!"
      tags:
        - hello

    - name: No tag example
      debug:
        msg: "How are you?"

    - name: Goodbye tag example
      debug:
        msg: "Goodbye!"
      tags:
        - goodbye
py

Для чего используют Ansible

Управление конфигурацией. Детальная информация об аппаратном и программном обеспечении предприятия регистрируется и обновляется, что обеспечивает стабильность производительности продукта.

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

Безопасность. Соответствие политике безопасности может быть развернуто по всей инфраструктуре, если политика определена в Ansible.

Подготовка. Помогает автоматизировать процесс подготовки проекта и управлять им.

Работа с облаком. Программа позволяет создавать экземпляры для всех облачных провайдеров. Ansible содержит множество модулей и позволяет управлять большой облачной инфраструктурой в рамках общедоступного, частного и гибридного облака.

Преимущества Ansible

Плюсы:

  • мощный и гибкий — Ansible обладает мощными функциями, которые позволяют моделировать даже сложные ИТ-процессы. Подход batteries included approach позволяет управлять инфраструктурой, сетями, операционными системами и сервисами, которые вы уже используете. Сервис создан для управления всей средой приложения независимо от того, где оно развернуто;
  • простота настройки — пользовательский интерфейс Ansible прост и не требует сложных процессов или конфигураций. Он удобен в использовании, что облегчает его быстрое внедрение командами DevOps. Программа также содержит понятную документацию, которая значительно облегчает командам понимание процесса внедрения и автоматизацию;
  • без агентов — в сервисе нет агентов или дополнительных портов брандмауэра, которые нужно установить на клиентских системах или хостах для автоматизации. Не нужно отдельно настраивать инфраструктуру управления;
  • написан на Python — Ansible был написан на Python. Его конкуренты были созданы с использованием Ruby и других языков. Запуск продукта упростился, ведь библиотеки Python по умолчанию присутствуют в большинстве дистрибутивов Linux. Это также язык, который более распространен для задач администрирования и написания сценариев. При этом модули Ansible для расширения функциональности инструмента могут быть написаны на любом языке, при условии, что они возвращают данные в формате JSON.

Недостатки Ansible

Минусы:

  • плохая поддержка Windows — начиная с версии 1.7, Ansible поддерживает узлы как Unix/Linux, так и Windows. В последнем случае он использует встроенное удаленное взаимодействие powershell (в отличие от SSH). Ansible все еще находится на ранней стадии развития своих усилий по расширению поддержки Windows. В новых версиях предполагается более глубокая совместимость с Windows;
  • нет пользовательского интерфейса — Ansible был инструментом, работающим только в командной строке. Сначала пробовали создать пользовательский интерфейс с AWX: графический пользовательский интерфейс и конечную точку REST, чтобы упростить управление инфраструктурой. Со временем AWX превратился в Ansible Tower. Это веб-интерфейс для управления, который предоставляет возможности визуального управления и инструмент для работы в команде. Но Ansible Tower по-прежнему имеет минусы. Часто графический интерфейс пользователя не синхронизирован с командной строкой, что приводит к различным результатам запроса;
  • ограниченный параллелизм — инструмент допускает параллельное выполнение задач, но может не в полной мере использовать доступные ресурсы в больших инфраструктурах. Это ограничение может повлиять на производительность в сценариях, где важно быстрое выполнение.

Как начать работать с Ansible

Достаточно установить Ansible только на одном компьютере, на управляющем узле.

Требования к управляющему узлу:

  • установлен Python 2 (версия 2.7) или Python 3 (версии 3.5 и выше);
  • Windows не поддерживается в качестве управляющего узла, но вы можете настроить его в Windows 10 с помощью WSL;
  • для управляемых узлов также требуется установка Python.

Для скачивания и установки Ansible нужна команда:

sudo apt install ansible
py

Ansible можно настроить несколькими способами. Но самый простой —  с помощью менеджера пакетов Python PIP. Установка PIP:

# Debian/Ubuntu:
apt-get install python-pip

# RedHat/CentOS/Fedora:
yum install python-pip

# MacOSX (more info):
sudo easy_install pip
py

Примеры простых задач

Ansible предоставляет сервисный модуль, который позволяет запускать и останавливать службы на целевых узлах.

Давайте создадим файл start-service.yaml для запуска службы Apache на целевом узле.

nano start-service.yaml

- name: Start Apache Service
 hosts: node1
 become: true
 tasks:
   - name: Start Apache service
     service:
       name: apache2
       state: started
ansible-playbook start-service.yaml
py

Ansible shell также используется в playbooks для определения задач, которые должны выполняться на удаленных хостах.

- name: Shell module example
  hsots: webservers
  tasks:
  
  - name: Check system information
    shell:
    	"lsb_release -a"
    register: os_info
    
  - debug:
    	msg: "{{os_info.stdout_lines}}"
py