Доступно в редакциях:  CE, SE+, EE

Стадия жизненного цикла модуля: Experimental
У модуля есть требования для установки

Модуль ansible позволяет выполнять Ansible-плейбуки на виртуальных машинах Deckhouse Virtualization Platform, а также на хостах, которые заданы адресом и не являются ресурсами кластера.

Для описания задания используется кастомный ресурс AnsibleRun. Плейбук выполняется во временном поде, который создаёт модуль, а результат выполнения сохраняется в статусе этого же ресурса. Отдельный управляющий узел с установленным Ansible и файл инвентаря при этом не требуются.

Основные возможности

Модуль предоставляет следующие возможности:

  • Настройка виртуальной машины сразу после её создания. Плейбук выполняется, как только машина начинает отвечать по SSH, поэтому настройки не требуется закладывать в образ.
  • Выполнение одного плейбука на группе машин, выбранных по лейблам. Состав группы платформа определяет в момент запуска задания, поэтому список машин не требуется поддерживать вручную.
  • Поддержание конфигурации в заданном состоянии по расписанию, как это делает ресурс CronJob. Регулярное выполнение плейбука возвращает машины к состоянию, которое в нём описано.
  • Выполнение плейбука из ресурса ConfigMap или из Git-репозитория, вместе с ролями и зависимостями Galaxy. Проект с ролями выполняется без изменений, а версия плейбука фиксируется ссылкой на коммит.
  • Настройка хостов, которые не являются ресурсами кластера, например физического сервера, сетевого устройства или машины, чей адрес известен только её владельцу. Такие хосты перечисляются адресами в манифесте задания, и эта возможность доступна только в коммерческих редакциях.
  • Выполнение перечисленных сценариев в изолированной сети, например в выделенной сети управления или в инфраструктурной сети заказчика. Задание получает интерфейс в указанной сети, и эта возможность также доступна только в коммерческих редакциях.

Как работает модуль

Выполнение задания состоит из следующих шагов:

  1. В неймспейсе создаются Secret с учётными данными SSH и ресурс AnsibleRun, в котором указано, какие машины настраивать, как к ним подключаться и какой плейбук выполнять.
  2. Контроллер модуля определяет цели задания, получает их адреса и формирует файл инвентаря Ansible. Группы и переменные хостов контроллер берёт из аннотаций виртуальных машин и из полей задания.
  3. Контроллер создаёт временный под с утилитой ansible-playbook и, если в задании указана дополнительная сеть, выдаёт этому поду интерфейс в такой сети.
  4. Результат выполнения записывается в статус ресурса AnsibleRun. Статус содержит число выполненных задач по каждому хосту, список пропущенных машин и задачи, завершившиеся с ошибкой. Под успешного задания удаляется, а под задания, завершившегося с ошибкой, сохраняется вместе с логами.

Системные требования и рекомендации

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

  • В кластере развёрнута Deckhouse Kubernetes Platform версии 1.68 или новее. В более ранних версиях платформы модуль не поддерживается.
  • Включён модуль virtualization, если целями задания являются виртуальные машины. Для выполнения задания в дополнительной сети требуется также модуль sdn с пулом адресов у этой сети.
  • Целевая машина отвечает по SSH и имеет адрес, известный платформе. Таким адресом является либо status.ipAddress виртуальной машины, либо адрес из дополнительной сети, у которой настроен пул адресов. Именно по этому адресу задание подключается к машине.

Адреса, настроенные вручную внутри гостевой ОС или полученные от внешнего DHCP-сервера, платформе не видны. Машины с такими адресами настраиваются как хосты, заданные адресом.

Доступность в редакциях

Модуль доступен во всех редакциях платформы, однако часть его возможностей работает только в коммерческих редакциях. В Community Edition задание работает с виртуальными машинами платформы и выполняется в основной сети кластера.

Возможность CE Коммерческие редакции
Виртуальные машины платформы, основная сеть Да Да
Хосты, заданные адресом (spec.target.type: Hosts) Нет Да
Дополнительные сети sdn (spec.connection.network.type: Network, ClusterNetwork) Нет Да
Источники плейбука, расписания, параметры раннера, инвентарь Да Да

В Community Edition манифест с недоступной возможностью отклоняется при создании. Задание, созданное до перехода кластера на эту редакцию, завершается фазой Error с причиной EditionNotSupported.

Ограничения

При планировании работы с модулем учитывайте следующие ограничения:

  • Задание выполняется однократно, и его спецификация после создания не изменяется. Чтобы выполнить плейбук ещё раз или с другими параметрами, создайте новый ресурс AnsibleRun, а для регулярного выполнения используйте ресурс AnsibleRunSchedule.
  • Одно задание работает с целями одного вида и выполняется в одной сети. Если требуется настроить и виртуальные машины, и хосты, заданные адресом, либо машины из разных сетей, разделите работу на несколько заданий.
  • Единственным поддерживаемым транспортом является SSH, поэтому на целевой машине должен быть запущен SSH-сервер. Учётные данные модуль читает из Secret в том же неймспейсе, где создано задание, поэтому один Secret нельзя использовать для заданий из разных неймспейсов.
  • Модуль находится в стадии Experimental. Это означает, что API модуля может измениться в следующих релизах, поэтому перед обновлением платформы рекомендуется проверить работу заданий в тестовом окружении.

Числовые пределы одного задания приведены в таблице ниже.

Ограничение Значение
Встроенный плейбук 64 КБ
Хосты, заданные адресом 1000 на задание; 64 переменные и 32 группы на хост
Теги По 64 записи в spec.playbook.tags и spec.playbook.skipTags
Переменные 64 записи в spec.playbook.vars; 8 файлов в spec.playbook.varsFiles
status.failures До 20 ошибок задач, остальные ошибки остаются в логах пода
Дополнительные сети Только IPv4

Дополнительные материалы

Подробная информация о работе с модулем приведена в следующих разделах:

  • Руководство пользователя описывает все поля задания, формат результата и порядок диагностики.
  • Примеры содержат готовые сценарии, от первой проверки связи до заданий по расписанию и в изолированной сети.