Вы находитесь на странице: 1из 12

05.05.

2021 Унифицируем управление системами при помощи Rundeck | Linuxoid

Унифицируем управление системами


при помощи Rundeck 0
31 МАРТА 2014 АВТОМАТИЗАЦИЯ АДМИНИСТРИРОВАНИЕ
Настройку большого количества серверов, упрощают системы управления
конфигурациями Chef, Puppet, CFEngine, позволяющие быстро привести сервер в
нужное состояние. Но задачи автоматизации часто выходят за возможности
инструментов. В сложных средах параметров и флажков к рецептам становится
больше, чем самих рецептов. И инструменты сами становятся источником
проблем. Использование Rundeck позволяет объединить и контролировать, все
что есть.

Возможности Rundeck
Rundeck представляет собой кросс-платформенный инструмент, позволяющий
автоматизировать в ЦОД любые команды, скрипты и процедуры. Созданные при помощи
командной строки или через веб-интерфейс задачи могут быть запущены по требованию или
по расписанию на любом количестве узлов, администратор получает полную информацию о
ходе и результате выполнения. Доступны и другие необходимые в распределенных средах
возможности: контроль доступа, создание цепочки событий (многошаговый сценарий),
планирование, история и аудит.
Проект не возник на новом месте. Его основой является ControlTier(controltier.org), от
которого Rundeck отделился в 2010 году. Со временем большинство разработчиков перешли
в новый проект, как более перспективный. В Rundeck был опробован и реализован так
называемый сценарий-ориентированный подход, создан интерфейс для фильтрации команд
и скриптов для наборов узлов и возможность использования внешних поставщиков данных.
В отличие от монолитного ControlTier Rundeck поддерживает возможность интеграции с
другими инструментами Puppet, Chef, Vagrant, Jenkins, Nexus, Git и Amazon EC2.
Практически все дополнительные функции подключаются в качестве плагинов,
представляющих собой файлы обеспечивающие поддержку одного или нескольких сервисов
(Service Provider). Реализовано несколько типов плагинов позволяющих: добавить шаг
рабочего процесса, описания нодов (Resource Model), механизм исполнения и копирования
файлов, предупреждения. Правда в настоящее время реализованы в основном плагины
дающие возможность получать информацию о нодах. Ссылки на некоторые плагины можно
найти перейдя по адресу rundeck.org/plugins.

https://www.tux.in.ua/articles/3530 1/12
05.05.2021 Унифицируем управление системами при помощи Rundeck | Linuxoid

По сути Rundeck является связующим звеном объединяющим все средства управления,


позволяющий администратору с одной точки управлять заданиями и отслеживать результат.
То есть информацию об узлах мы можем брать прямо с аккаунта Amazon EC2, а сервис
разворачивать при помощи shell или Chef, но запускать все это средствами Rundeck,
объединяя в единое задание с другими скриптами и командами. Сами задания
объединяются в проекты, а проекты в группы. Задания можно выполнять параллельно сразу
на всех узлах или последовательно. Предусмотрено оповещение о результате выполнения
работы посредством email или отправки POST запроса по определенному URL.
Кроме этого GUI и CLI также представлен Web API позволяющий взаимодействовать с
сервером Rundeck в программах и скриптах.

Rundeck представляет собой серверное приложение. Информация и история заданий


хранится в базе данных, выходные данные команд и задания сохраняются в виде XML-
файлов на диске.
Принцип работы прост. Администратор вводит команду и выбирает по фильтру узлы,
запуская задание (Node Execution). Каждый узел представлен как «Resource Model», каждый
имеет определенные признаки (параметр: значение), которые могут быть расширены.
Например, теги позволяют быстро отобрать группу нодов по некоторому критерию.
Развертывание Rundeck упрощает отсутствие необходимости установки на нодах
клиентского ПО (этим он отличается от ControlTier). Для управления удаленными системами
и передачи файлов по умолчанию используется SSH/SCP. Это очень удобно, так как даже для
того чтобы выполнить простую команду, не потребуется логиниться на каждом сервере. Но
довольно просто можно подключить любой другой механизм (среди плагинов доступен
WinRM) или использовать внешний скрипт.

https://www.tux.in.ua/articles/3530 2/12
05.05.2021 Унифицируем управление системами при помощи Rundeck | Linuxoid

При создании проекта доступен вариант Stub позволяющий просто просмотреть команды,
вместо их выполнения. Это очень полезно когда требуется разобраться, что именно будет
сделано.
Поддерживается контроль доступа на основе политик, интеграция с LDAP и AD.
Написан Rundeck на Java, поддерживается установки на все популярные ОС — Linux,
Windows, Solaris и Mac OS X.

Ставим Rundeck
Для установки в Linux предлагается DEB пакет, RPM репозиторий и универсальный launcher.
Рекомендуется использовать возможности пакетных менеджеров дистрибутива, в этом
случае будут созданы все необходимые файлы. В Ubuntu и Debian процесс очень прост.

$ wget -c http://download.rundeck.org/deb/rundeck-1.5.3-1-GA.deb
$ sudo dpkg -i rundeck-1.5.3-1-GA.deb

Конфигурационные файлы сервиса находятся в каталоге /etc/rundeck, здесь можно


установить параметры среды и работы сервиса, настроить ACL (admin.aclpolicy), включить
SSL, указать настройки проекта по умолчанию (project.properties) и так далее. Их можно
пока не трогать, достаточно просто познакомится чтобы знать что, где лежит.
По умолчанию демон не запущен:

$ sudo service rundeckd start

Если для дистрибутива не собран пакет то, придется использовать launcher. После запуска
инсталятора необходимо будет ответить на пару вопросов.

# java -jar rundeck-launcher-1.5.3.jar

https://www.tux.in.ua/articles/3530 3/12
05.05.2021 Унифицируем управление системами при помощи Rundeck | Linuxoid

Подключаемся к веб-интерфейсу localhost:4440 (при необходимости порт можно изменить в


файле framework.properties параметр framework.server.url), по умолчанию создается две
учетные записи «admin» и «user» с паролям аналогичными логинам.
Интерфейс очень прост и несмотря на отсутствие локализации разобраться с ним друда не
составит. После регистрации мы видим три вкладки: Run (выполнение команд для нодов
отобранных при помощи фильтра), Jobs (просмотр, создание и запуск заданий) и History
(просмотр выполняемых и выполненных заданий).

Выпадающий список позволяет выбрать проект. Но проектов пока нет. При первом входе
пользователь будет сразу переброшен на страницу создания нового проекта. В самом
простом случае достаточно ввести имя, остальные периметры можно заполнить потом. Для
создания проекта в консоли используется утилита rd-project:

$ rd-project -a create -p examples

Project structure created: /var/rundeck/projects/examples

Только при использовании консоли есть небольшая проблема. Владельцами каталогов


проекта являются пользователь и группа rundeck. Под обычной учеткой у пользователя не
будет прав. В некоторых случаях достаточно себя добавить в эту группу, но помогает не
всегда. Если использовать ”sudo” владельцем каталога будет пользователь и группа root. В
этом случае нужно обязательно проверить и установить нужные права доступа иначе
правильная работа будет невозможна.

$ sudo chown -R rundeck:rundeck /var/rundeck/projects/examples

Основные настройки проекта содержатся в конфигурационном файле project.properties,


который находится в подкаталоге etc папки проекта. В нем настроек пока немного.

$ sudo cat /var/rundeck/projects/examples/etc/project.properties

https://www.tux.in.ua/articles/3530 4/12
05.05.2021 Унифицируем управление системами при помощи Rundeck | Linuxoid

#Project examples configuration, generated


project.name=examples
project.resources.file=/var/rundeck/projects/examples/etc/resources.xml

В документации расписано большое количество дополнительных параметров, позволяющих


переопределить установки по умолчанию, некоторая часть устанавливается при помощи
веб-интерфейса.
Нажимаем в браузере F5 и видим вновь созданный проект. Чтобы познакомиться с
интерфейсом, можем просмотреть процесс выполнения любой команды на локальной
системе. Вводим ее в поле Command, появляется секция «Now running» отображающая
процесс и позволяющая просмотреть подробную информацию (в консоли это можно
произвести введя rd-jobs). Ссылка рядом дает возможность убить задание.

https://www.tux.in.ua/articles/3530 5/12
05.05.2021 Унифицируем управление системами при помощи Rundeck | Linuxoid

По окончании видим статус подсвеченный цветом, что упрощает восприятие (если все
нормально — Success, зеленым) и результат выполнения, его можно просмотреть в
нескольких представлениях и сохранить в виде txt-файла. Чуть ниже видим окно History в
котором выводится информация по всем заданиям выполненным в проекте.
Ссылка «Save As Job» позволяет сразу сохранить команду (ad-hoc command) для
последующего быстрого вызова или создать новую задачу. Просто заполняем предложенные
поля или устанавливаем, где нужно чекере: указываем имя, группу, выбираем проект,
вводим описание, отсылку оповещения о результате, периодичность выполнения и уровень
журналирования (Log level).
Чтобы добавить дополнительные команды и скрипты выбраем ссылку «Add step». Часть
параметров понятна и без описания, другие требуют объяснения:

Флажок «Multiple Executions?» разрешает одновременное выполнение задания.


Параметр «Workflow: Strategy:» определяет порядок выполнения — последовательно
(Node-oriented) или параллельно (Step-oriented).
«Workflow: Keepgoing:» — установлена в «No», т.е. в случае ошибки на любом из
этапов, выполнение прерывается, переопределить можно изменив на «Yes».
Если флажок «Dispatch to Nodes» снят команда или задание выполняется только на
локальной системе. После его установки открывается поле позволяющее задать другие
системы и установить Include/Exclude фильтры (тег, ОС, версия ОС, архитектура и другие),
в том числе поддерживаются и регулярные выражения. Фильтры можно сохранять для
дальнейшего использования (ссылка «save this filter…»).

По нажатию Options активируется безопасный вывод (позволяет скрыть пароли), можем


указать дополнительные параметры, которые задаются локально (в JSON формате — Имя:
значение) или подгружаются с удаленного узла.

https://www.tux.in.ua/articles/3530 6/12
05.05.2021 Унифицируем управление системами при помощи Rundeck | Linuxoid

Подключаем ноды
Каждый проект содержит как минимум один файл описания
ресурсов resources.xml (Resource Model), но при необходимости можно использовать
несколько файлов рассортировав по каталогам или URL. Каждое описание позволяет
однозначно определять ноды. Минимально требуется указать только имя узла под которым
оно будет показано в интерфейсе и его сетевое имя или IP, опционально задаются и другие
параметры — теги, ОС, архитектура и др. В resources.xml уже будет описание локальной
системы:

$ sudo cat /var/rundeck/projects/examples/etc/resources.xml

https://www.tux.in.ua/articles/3530 7/12
05.05.2021 Унифицируем управление системами при помощи Rundeck | Linuxoid

Если учетная запись входит в групу «Admin» справа вверху появится надпись «Admin» и
значок гаечного ключа. Выбрав этот пункт можно просмотреть состав групп, добавить
плагины, изменить и экспортировать настройки проекта.
По умолчанию предлагается получать список ресурсов с удаленного узла, URL которого
прописывается в «Resource Model Source URL». Чтобы задать файл ресурсов, каталог
содержащий файлы с описаниями, скрипт и URL выбираем «Resource Model Sources». Очень
удобно, что проект может поддерживать сразу несколько источников. Например часть нодов
выбирается из статического файла, а часть генерируется CGI скриптом.

Утилиты командной строки Rundeck

Rundeck включает ряд инструментов командной строки, позволяющих выполнять


и отслеживать задания, взаимодействовать с диспетчером очереди. Их можно
использовать как альтернативу GUI и в своих скриптах.
— dispatch — выполнение команд и сценариев.
— rd-queue — запрос и соатновка заданий в очереди.
— rd-jobs — просмотр заданий и загрузка в файл.
— run — выполнение сохраненного задания.
— rd-project – создание нового проекта
— rd-setup — перенастройка Rundeck

Файл ресурсов самый простой способ, он может быть в формате XML или YAML. Для
небольших проектов достаточно прописать нужное количество нодов добавив новую секцию
«node name» в resources.xml. При помощи дополнительных параметров: username, password,

https://www.tux.in.ua/articles/3530 8/12
05.05.2021 Унифицируем управление системами при помощи Rundeck | Linuxoid

port указываются учетная запись и порт для соединения с узлом, если отличаются от
установок по умолчанию.
Плагины позволяют расширить эти возможности подключая Resource Model прописанные в
файлах Chef, Puppet, Amazon EC2 и других. Например, плагин Amazon EC2
(github.com/gschueler/rundeck-ec2-nodes-plugin) подключается очень просто:

$ sudo apt-get install gradle


$ wget -c https://github.com/gschueler/rundeck-ec2-nodes-plugin/archive/maste
$ unzip master.zip
$ cd rundeck-ec2-nodes-plugin-master
$ ./gradlew
$ cp rundeck-ec2-nodes-plugin-1.3.jar $RDECK_BASE/libext

Теперь при выборе «Add Source» появится новый тип «AWS EC2 Resources«. Плагин
поддерживает большое количество дополнительных опций, например автоматическую
расстановку тэгов.
В данный момент мы подключили все узлы, и можем выполнять на них команды и скрипты,
через веб-интерфейс или в командной строке.
Получаем список всех текущих ресурсов проекта и выполняем команду по фильтру os-
family:

$ sudo dispatch -p examples -v


$ sudo dispatch -I os-family=unix -- uptime

Используем Chef
Основная мощь Rundeck проявляется совместном использовании с другими средствами
автоматизации вроде Chef, или Puppet. Принцип взаимодействия ни чем не отличается от
обычной работы. При создании задания указываем скрипт в котором расписаны все шаги
или прописываем их отдельно при помощи «Add step». Например, у нас есть готовый
cookbooks, и два файла (solo.rb,node.json) необходимые для работы chef-solo, которые
загружены на веб-сервер. Необходимо установить Chef и выполнить. Прописываем в проект
несколько новых шагов:

echo "deb http://apt.opscode.com/ precise-0.10 main" | sudo tee /etc/apt/sour


apt-get update
apt-get -y --force-yes install opscode-keyring chef git
chef-solo -c http://example.com/solo.rb -j http://example.com/node.json -r htt

По окончанию задания администратор будет осведомлен о результате.


Как минимум два плагина позволяют легко управлять Win машинами при помощи WinRM:
Rundeck WinRM Plugin (github.com/dtolabs/rundeck-winrm-plugin) и Knife-windows
(github.com/opscode/knife-windows). Второй использует утилиту knife из Chef. Ставим:

https://www.tux.in.ua/articles/3530 9/12
05.05.2021 Унифицируем управление системами при помощи Rundeck | Linuxoid

$ sudo gem install knife-windows

Прописываем в проект информацию о Windows сервере:

$ nano resources.xml

На Win2008 сервере настраиваем возможность удаленного подключения:

C:\Users\Administrator> winrm quickconfig -q

https://www.tux.in.ua/articles/3530 10/12
05.05.2021 Унифицируем управление системами при помощи Rundeck | Linuxoid

Проверяем из консоли:

$ winrs -u:administrator -p: p@ssw0rd -r:http://win2008 dir


$ knife winrm -m win2008 -P 'p@ssw0rd' -p 80 -x Administrator dir

Если получаем ответ, можем подключать к проекту, изменив программу выполнения


(NodeExecutor) используемую по умолчанию:

$ nano project.properties

service.NodeExecutor.default.provider=script-exec
plugin.script-exec.default.command=knife winrm -m ${node.hostname} -P '${node

Теперь можно отдавать команды удаленной Windows системе.


На сайте проекта даны ссылки не на все плагины. Поискав в интернет можно найти много
полезного. Например, скрипт для удобного бэкапа Rundeck – github.com/ersiko/rundeck-
backup. Единственное, что при выборе плагина, следует проверять с какой версией Rundeck
он будет работать. Некоторые плагины давно не поддерживаются и не работают с
последними релизами Rundeck.

Вывод

https://www.tux.in.ua/articles/3530 11/12
05.05.2021 Унифицируем управление системами при помощи Rundeck | Linuxoid

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

https://www.tux.in.ua/articles/3530 12/12