Доступно в редакциях: CE, SE+, EE
Стадия жизненного цикла модуля: Experimental
У модуля есть требования для установки
Модуль ansible позволяет выполнять Ansible-плейбуки на виртуальных машинах Deckhouse Virtualization Platform, а также на хостах, которые заданы адресом и не являются ресурсами кластера.
Для описания задания используется кастомный ресурс AnsibleRun. Плейбук выполняется во временном поде, который создаёт модуль, а результат выполнения сохраняется в статусе этого же ресурса. Отдельный управляющий узел с установленным Ansible и файл инвентаря при этом не требуются.
Основные возможности
Модуль предоставляет следующие возможности:
- Настройка виртуальной машины сразу после её создания. Плейбук выполняется, как только машина начинает отвечать по SSH, поэтому настройки не требуется закладывать в образ.
- Выполнение одного плейбука на группе машин, выбранных по лейблам. Состав группы платформа определяет в момент запуска задания, поэтому список машин не требуется поддерживать вручную.
- Поддержание конфигурации в заданном состоянии по расписанию, как это делает ресурс CronJob. Регулярное выполнение плейбука возвращает машины к состоянию, которое в нём описано.
- Выполнение плейбука из ресурса ConfigMap или из Git-репозитория, вместе с ролями и зависимостями Galaxy. Проект с ролями выполняется без изменений, а версия плейбука фиксируется ссылкой на коммит.
- Настройка хостов, которые не являются ресурсами кластера, например физического сервера, сетевого устройства или машины, чей адрес известен только её владельцу. Такие хосты перечисляются адресами в манифесте задания, и эта возможность доступна только в коммерческих редакциях.
- Выполнение перечисленных сценариев в изолированной сети, например в выделенной сети управления или в инфраструктурной сети заказчика. Задание получает интерфейс в указанной сети, и эта возможность также доступна только в коммерческих редакциях.
Как работает модуль
Выполнение задания состоит из следующих шагов:
- В неймспейсе создаются Secret с учётными данными SSH и ресурс AnsibleRun, в котором указано, какие машины настраивать, как к ним подключаться и какой плейбук выполнять.
- Контроллер модуля определяет цели задания, получает их адреса и формирует файл инвентаря Ansible. Группы и переменные хостов контроллер берёт из аннотаций виртуальных машин и из полей задания.
- Контроллер создаёт временный под с утилитой
ansible-playbookи, если в задании указана дополнительная сеть, выдаёт этому поду интерфейс в такой сети. - Результат выполнения записывается в статус ресурса 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 |
Дополнительные материалы
Подробная информация о работе с модулем приведена в следующих разделах:
- Руководство пользователя описывает все поля задания, формат результата и порядок диагностики.
- Примеры содержат готовые сценарии, от первой проверки связи до заданий по расписанию и в изолированной сети.