Rundeck с Ansible - выполнить локально или отправить узлам? - PullRequest
0 голосов
/ 23 февраля 2020

Ищите любые соображения о том, как запустить Ansible playbook из Rundeck, где есть около 100 узлов, и у меня Ansible настроен на использование 100 вилок. Кажется, что есть два основных варианта, оба из которых имеют некоторые преимущества:

  1. Выполнить локально. Используйте либо шаг узла Ansible playbook , либо рабочий процесс шаг. Целевые узлы, используя опцию --limit Ansible. Создает аккуратный журнал Ansible со всеми узлами, сгруппированными под каждым шагом.
  2. Отправка по узлам. Используйте шаг узла Ansible playbook . Это позволяет легко фильтровать целевые узлы с помощью тегов Rundeck. Просмотр выполнения в Rundeck должен быть аккуратным, поскольку журналы могут быть сгруппированы по узлам, но журналы Ansible будут немного беспорядочными с перекрывающимися выполнениями.

Есть ли что-то еще, что стоит рассмотреть, например как разница в производительности? Какая-нибудь лучшая практика / более распространенная реализация?

спасибо, Крис

Ответы [ 2 ]

1 голос
/ 27 февраля 2020

Мы используем смесь из ...

  • "Выполнить локально" (т.е. запускать книги с помощью модуля команд / сценариев) и
  • "Dispatch to Nodes " (то есть каждый раз, когда мы используем ansible -plugin для Rundeck) .

Я нашел вывод и организацию ansible -plugin отличными однако есть некоторые ограничения, с которыми мы столкнулись, и они были возвращены к параметру «Выполнять локально»:

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

  2. В любом месте выполнения порядок имеет значение. Например, у нас есть несколько книг, в которых нам нужно выполнить первое задание на группе хостов, прежде чем второе задание начнется на другой группе хостов. Подобно вышеупомянутой проблеме, это невозможно (насколько я знаю) при использовании плагина ansible.

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

Надеюсь, это поможет!

1 голос
/ 23 февраля 2020

Сначала я положу это на стол, я не эксперт по rundeck.

Однако из контекста звучит так, будто вы пытаетесь отправить игру на узел?

Давайте рассмотрим пример


Учитывая приведенный ниже inventory файл ...

[all]
[all:children]
web
db

[web]
web01
web02
web03
[db]
db01
db02

И ниже deploy.yml

- hosts: all
  forks: 5
  roles:
    - common
- hosts: web
  roles: 
    - web
- hosts: db
  roles: 
    - db

Я могу настроить свою инфраструктуру в декларативном поместье, на протяжении всего моего deploy.yml - нет других логи c, необходимых для понимания, где и где развертываются.


Пока это возможно , что в какой-то момент мой forks будет ограничен количеством доступных потоков, дополнительные логи c не требуются для развертывания всего стека.

Попытка разбить это Playbook для параллелизма и независимого выполнения во многих узлах, возможно, ошибочно. Вы должны поставить logi c для того, что где работает, и ограничения на то, кто что выполняет, чтобы реально увидеть эффективность. Эти накладные расходы просто не стоят. Сохраняйте свои логики c в ansible и следуйте методу KISS:).

PS - проверьте AWX. Имеет некоторые преимущества с группами выполнения узлов.

...