ProCloud Yandex
11.09.2023
читать 5 минут

Система управления конфигурацией Ansible

/upload/iblock/6f3/bv0a4zd8nqhj80ped5h7srz9q5grgrkc/sales_stats_%281%29.jpg

Сегодня мы рассмотрим Ansible, софт для удаленного управления конфигурацией сервера. Также обсудим его сильные стороны и ответим на вопрос: Стоит ли его использовать?

Что такое Ansible?

Ansible представляет собой ПО с открытым исходным кодом, которое предназначено для управления конфигурацией. Данный софт был создан в 2012 году Майклом Де Хааном. Фактически Ansible принимает на себя все задачи по приведению удаленных машин в желаемое состояние. Таким образом пользователю потребуется лишь указать, способ работы. Для этого используются сценарии. На практике упомянутое ПО позволяет просто и быстро переконфигурировать систему.

Почему Ansible?

Существует очень много аналогов Ansible, например, Chef, Salt и Puppet. Однако он выделяется на их фоне следующими преимуществами:

  • Функционирует сразу в двух режимах (push и pull), а не в одном;
  • Понятный язык написания сценариев;
  • Не требует установки дополнительного софта на контролируемые узлы, так как все задачи выполняются с помощью SSH;
  • Освоить ПО и начать работу с Ansible можно за очень короткое время;
  • Позволяет последовательно обновлять состояния узлов;
  • Имеет подробную и актуальную документацию;
  • Реализована на базе Python, что упрощает написание дополнительных модулей.

Установка

Для установки Ansible потребуется Python версии 2.6 или же выше. Когда речь касается требований к узлам, то на них должен стоять Python 2.4. Также в список рекомендованных модулей для Python входит jinja2, paramiko и PyYAML. Чтобы установить Ansible на Ubuntu нужно использовать добавить репозиторий и установить пакет. Это выглядит следующим образом:

sudo add-apt-repository -y ppa:rquillo/ansible
sudo apt-get update
sudo apt-get install ansible -y

Группы серверов

Чтобы передать Ansible список групп серверов для управления потребуется использовать один из двух методов:

  • Текстовый файл, который мы опишем ниже;
  • Сторонним скриптом, который возвращает необходимую для нас группу серверов. Готовые скрипты есть для многих известных облачных провайдеров и приложений можно найти в интернете.

Файл hosts

По умолчанию файл hosts расположен тут – /etc/ansible/hosts. Однако его расположение можно поменять с помощью параметра окружения $ANSIBLE_HOSTS. Документ может иметь такой вид:

[group_name1]
one.node.com
two.node.com
three.node.com

[group_name2]
rs1.node.com ansible_ssh_port=5555 ansible_ssh_host=192.168.1.24
rs2.node.com
ns[01:24].node.com

Также в файл hosts можно прописать имена пользователей, номера портов для подключения через SSH и прочее. Если ваш рабочий процесс осуществляется с сложными и крупными конфигурациями, то подобные характеристики рекомендуется переносить в отдельные документы и каталоги.

Переменные

Мы уже обсуждали раньше, что вносить много информации в файл hosts не рационально, так что создатели Ansible решили эту проблему и предложили хранить файлы с определенным типом переменных в разных директориях:

  • для ролей: “role_name/vars/task_name.yml”;
  • для групп: “group_vars/group_name”;
  • для хостов: “hosts_vars/host_name

Модули Ansible

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

  • Взаимодействие с утилитами;
  • Контроль пакетов;
  • Сетевая инфраструктура;
  • Виртуализация и облачный софт;
  • Файлы;
  • Базы данных;
  • Система;
  • Мониторинг.

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

Благодаря Ansible открывается возможность одновременного выполнения одного процесса на сразу нескольких хостах одновременно. В качестве примера мы отправим запрос ping на группу серверов:

$ ansible dnsservers -m ping
dns1.node.com | success >> {
    "changed": false,
    "ping": "pong"
}

dns2.node.com | success >> {
    "changed": false,
    "ping": "pong"
}

А теперь создадим логический том под названием “volume” в группе “group”:

$ ansible dnsservers -m lvol -a "vg=group lv=volume size=1024 state=present"
dns1.node.com | success >> {
    "changed": true,
    "msg": ""
}

dns2.node.com | success >> {
    "changed": false,
    "msg": ""
}

Cценарии (playbooks)

Для создания собственного сценария в данной утилите вам понадобятся знания YAML. Он выделяется простотой в сравнении с JSON и XML. В открытом доступе можно найти сценарии практически под любые задачи.

Для запуска сценария используйте команду ansible-playbook по следующему правилу:

ansible-playbook <file_name.yml> ... [дополнительные аргументы]

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

---
- hosts: webservers

Основные элементы базового сценария включают:

  • hosts — определяет узлы или группы узлов, к которым применяются задачи;
  • tasks — описывает желаемое состояние узла. Вместо узлов можно использовать роли.

Шаблонизация

За шаблонизацию в Ansbile отвечает Jinja2. Ниже примеры легких шаблонов:

# IPv4-адрес для просмотра powerdns
local-address={{ ansible_default_ipv4.address }}

# IPv6-адрес для просмотра powerdns
local-ipv6={{ ansible_default_ipv6.address }}

Контроль выполнения

Достаточно важный элемент. Давайте представим, что при работе со сценарием вам потребовалось мониторить переменные или состояния и относительно результата выполнять или пропускать действия. В таком случае нам потребуется оператор “when”:

tasks:
      # сохраняем файл шаблона и результат задачи в переменную last_result
    - template: src=/templates/foo.j2 dest=/etc/foo.conf
      register: last_result
      # проверяем переменную last_result.changed, true - выполняем, иначе - пропускаем
    - command: echo 'the file has changed'
      when: last_result.changed

Делегирование задачи другому хосту

Есть моменты, когда задачу, предназначенную для одного узла, нужно выполнить от имени другого. К примеру, при обновлении сервера может понадобиться приостановить его мониторинг, который настроен на другом сервере. В таких ситуациях пригодится директива delegate_to. Рассмотрим пример:

- name: disable nagios alerts for this host webserver service
  nagios: action=disable_alerts host={{inventory_hostname}} services=dnsserver
  delegate_to: mon_host.node.com

В результате сообщения для dnsserver будут отключены.

Роли

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

Ansible AWX

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

Заключение

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

Новости
13 сентября 202413.09.2024
читать 2 минутычитать 2 мин
Дайджест обновлений продуктов
18 апреля 202418.04.2024
читать 2 минутычитать 2 мин
Дайджест обновлений продуктов Q1
5 апреля 202405.04.2024
читать 1 минутучитать 1 мин
ProCloud CPO Диана Беда в рейтинге ИТ-лидеров от Global CIO
Создать учетную
запись ProCloud
arrow
arrow hover
 
Имя, Фамилия*
Номер телефона
Электронный адрес*
Ваше сообщение*
Файл
Файл
Файл
Файл
Файл
Файл
Файл
Файл
Файл
Файл
Тип формы
ID тикета Zendesk
Продукт
IP
 

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

Нажимая «Отправить заявку» вы даете свое согласие на обработку своих персональных данных

Что еще советуем почитать:

Имитация сбоев: Как Хаос-Инжиниринг Повышает Надежность IT-Систем
Технологии
3 сентября 202403.09.2024
Имитация сбоев: Как Хаос-Инжиниринг Повышает Надежность IT-Систем

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

читать 12 минут
Какое облако подойдет для стартапа: выбор по ключевым параметрам
Технологии
13 августа 202413.08.2024
Какое облако подойдет для стартапа: выбор по ключевым параметрам

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

читать 12 минут
Управление и настройка ВМ на базе OPNsense
Технологии
15 июня 202415.06.2024
Управление и настройка ВМ на базе OPNsense

Узнайте, как управлять и настраивать роутер через консоль, SSH и веб-интерфейс. Наше пошаговое руководство охватывает настройку интерфейсов, назначение IP-адресов, смену паролей и сброс настроек с подробными инструкциями и полезными скриншотами.

читать 20 минут