Одна из целей облачных вычислений ― предоставить пользователям облака богатый выбор рабочих ресурсов; другая ― сохранить управляемый объем нагрузки по решению задач поддержки для групп разработчиков образов и программного обеспечения. Может показаться, что это взаимоисключающие цели, но настоящий цикл статей демонстрирует, как можно эффективно использовать ресурсы пакетов ПО и образов и управлять ими, делая достижимыми обе эти цели.
В этой статье:
- приводится обзор концепций управления пакетами ПО и образами;
- объясняется ресурсная модель;
- приводится сравнение этой модели с другими платформами управления пакетами ПО;
- обсуждаются примеры практического применения;
- исследуются имеющиеся инструменты.
Концепции иллюстрируются на примере приложения калькулятора электроэнергии. Мы покажем, как создать простое решение с весьма небольшим количеством кода на языке Python, и дадим инструкции по созданию пакета RPM. Вы узнаете, как установить этот пакет ПО на виртуальную машину в облаке. В последующих статьях этого цикла будут более подробно рассматриваться отдельные инструменты, API и способы применения с использованием того же примера приложения.
Эта статья предназначена для пользователей и планировщиков облачных систем, желающих узнать, как эффективно управлять облачными ресурсами на постоянной основе. Никаких знаний программирования не требуется. Хотя здесь и приведены некоторые очень короткие сценарии, по ним даются все необходимые объяснения. В примерах используется Linux®, но их легко адаптировать для Windows®.
Предварительные замечания
В контексте IBM SmartCloud Enterprise пакет ПО — это совокупность файлов программного обеспечения, конфигурации и метаданных, которые можно установить на экземпляр виртуальной машины.
В SmartCloud Enterprise пакеты ПО можно создавать и администрировать с помощью инструмента IBM Image Construction and Composition Tool (ICCT), REST-API SmartCloud Enterprise и сторонних инструментов.
Программное обеспечение образов виртуальных машин обычно бывает предустановлено и настроено разработчиком образов. Проблема такого подхода «сублимированного продукта» заключается в том, что трудно найти образ с нужным набором программного обеспечения, а это может привести к подходу «сделай сам», когда выбирают готовые образы виртуальной машины и рассматривают их как основу для установки собственного ПО. Это способствует размножению образов виртуальных машин, что в ИТ-кругах принято называть их расползанием (sprawl).
Другая проблема заключается в том, что образы виртуальных машин, предназначенные для использования в конкретных случаях, как правило, плохо подходят для других сценариев. SmartCloud Enterprise наводит мост между подходом «сублимированных продуктов» и подходом «сделай сам», используя параметры виртуальной машины, сценарии активации и пакеты ПО для создания шаблонов образов.
Другим, более портативным решением служит автономный инструмент IBM Image Construction and Composition Tool (ICCT), который позволяет добавлять ПО к виртуальным машинам. В настоящее время ICCT поставляется с IBM Workload Deployer 3.1, IBM SmartCloud Provisioning 1.2 и IBM SmartCloud Enterprise. ICCT хранит образы в виде пакетов Open Virtual Format Archive (OVA), которые можно устанавливать с помощью IBM Workload Deployer 3.1, IBM SmartCloud Enterprise и продуктов VMware.
Образы виртуальных машин могут содержать:
- операционные системы;
- промежуточное ПО;
- приложения;
- конфигурации пользователя.
По мере добавления к образу новых возможностей он становится менее универсальным; чем менее универсален отдельный образ, тем вероятнее, что потребуются другие. Однако чем меньше функций добавляется в образ, тем он менее полезен пользователям облака.
Принятие решений о том, что именно включать в образ и как сделать его шаблоном ― две основополагающие задачи в искусстве разработки образов.
Модель ресурсов SmartCloud Enterprise
На рисунке 1 показана упрощенная логическая модель ресурсов.
Описание ресурсов, атрибуты и отношения приведены в таблице 1.
Системы управления пакетами программного обеспечения
Управление пакетами ПО ― важный аспект управления вычислительными системами, в том числе облачными. Управление пакетами специфично для контекста облака, потому что происходит взаимодействие с экземплярами виртуальной машины, которые создаются динамически. Это открывает возможности для добавления дополнительного программного обеспечения «на лету» и вселяет в пользователя уверенность, что система будет «просто работать».
Системы управления пакетами облачного ПО имеют схожие концепции и могут содержать в себе системы управления пакетами, поставляемые с операционными системами и некоторыми платформами разработки ПО.
В этом разделе описываются системы управления пакетами программного обеспечения для Linux и их применение к облачным системам. Приводится пример создания программного модуля на языке Python, его привязки в качестве RPM и внедрения в виртуальную машину на основе облака на время подготовки.
Управление пакетами RPM и YUM
Red Hat Package Manager (RPM) разработан компанией Red Hat в 90-е годы и входит в состав Linux Standard Base. Он перенесен и на другие операционные системы, такие как IBM AIX ®:
- это помогает поддерживать согласованность между пакетами;
- может использоваться для получения сведений об установленных пакетах;
- проверяет пакеты на подлинность с помощью криптографической подписи;
- обновляет уже установленные пакеты;
- позволяет получать пакеты из Интернета.
Для RPM существует несколько интерфейсов, в том числе Yellow Dog Updater Modified (YUM), up2date, Zypper и Smart Package Manager. RPM используется главным образом для Red Hat Enterprise Linux, CentOS и Fedora. Для систем на базе Debian, в том числе SUSE и Ubuntu, используются системы управления пакетами для Debian.
YUM разработан в Дюкском университете в качестве интерфейса управления системами Red Hat Linux для RPM. YUM обеспечивает RPM дополнительными функциями автоматического обновления и управления зависимостями и работает с центральными репозиториями пакетов ПО. RPM «понимает» зависимости, но не разрешает их. Это задача, решение которой значительно облегчает YUM.
Пакет устанавливается командой rpm с параметром -i:
# rpm -i <package-name>
Если существуют обязательные зависимости, то команда rpm завершится с ошибкой. Для установки, удаления или обновления пакетов нужно иметь полномочия root.
Для установки пакета с помощью YUM используется команда yum с опцией install. Например, вот команда для установки dos2unix:
# yum install dos2unix
Если существуют зависимости, YUM установит их автоматически.
Управление пакетами для Debian
В Debian-системах, в том числе Ubuntu и SUSE, используется система управления пакетами Advanced Packaging Tool (APT). Как и в случае RPM и YUM, данные пакетов хранятся в центральной базе данных.
Пакет можно установить командой apt-get install. Вот команда для установки пакета dos2unix:
# apt-get install dos2unix
apt-get находит информацию о пакете в удаленном репозитории, определяет зависимости, загружает пакет и устанавливает его.
Модули Python
У Python есть встроенные возможности для распространения и установки модулей. С точки зрения установки и использования программного обеспечения Python эти возможности легко используются путем загрузки модуля, его распаковки и выполнения команды setup. Python – это удобный язык для демонстрации процесса распространения и управления ПО. Для понимания этой статьи о Python не нужно знать ничего сверх того, что объясняется в этом разделе.
Прежде чем приступить, приведем некоторые основные термины, используемые при работе с Python (см. таблицу 2).
Команда для установки модуля Python:
# python setup.py install
Это обычно делается при полномочиях root, и модуль устанавливается в каталог {INSTALL_ROOT}//site-packages, например, /usr/lib/python2.6/site-packages. Иначе, его можно установить на правах обычного пользователя в домашний каталог с помощью следующей команды:
$ python setup.py install --user
Python содержит инструментарий Distutils, который помогает разработчикам модулей распространять свое ПО и делает возможными эти команды.
Пример кода: модуль дистрибутива Python
Теперь мы создадим модуль Python, сценарий установки и установим его, чтобы проверить. Пакет ecalc представляет собой калькулятор электроэнергии и содержит один модуль energy_calculator с классом EnergyCalculator. В этом простом примере код просто выводит некоторые образцы данных; однако те же идеи легко применить к более сложному сценарию, где требуется высоко организованная система управления пакетами ПО.
Код класса EnergyCalculator:
# energy_calculator.py
"""
energy_calculator module for computing energy usage
"""
class EnergyCalculator:
"""EnergyCalculator class"""
def __init__(self):
self._base = 200
def energy_used(self):
return self._base
Код его вызова из клиента калькулятора электроэнергии:
#!/usr/bin/python
# energy_client.py
""" EnergyCalculator client """
from energy_calculator import EnergyCalculator
ec = EnergyCalculator()
print("You used {0} kJ today".format(ec.energy_used()))
При вызове пример выводит:
$ ./energy_client.py
You used 200 kJ today
Сначала создадим сценарий установки:
# setup.py
# Setup script for libenery
from distutils.core import setup
setup(name='libenergy',
version='0.1',
py_modules=['energy_calculator'],
)
Затем создадим модуль дистрибутива:
$ python setup.py sdist
Команда setup script в приведенном выше примере создает пакет дистрибутива исходного кода. Создается каталог dist со сжатым файлом libenergy-0.1.tar.gz, который можно использовать для установки пакета. Он не включает в себя клиентский сценарий energy_client.py. Сценарий предупреждает об отсутствии информации об авторе, URL и файла README. Кроме того, создается манифест в файле MANIFEST, который включен в файл TAR. Чтобы скопировать файл libenergy-0.1.tar.gz в целевую машину, используйте команду защищенного копирования:
$ scp -i ${key} libenergy-0.1.tar.gz idcuser@${vm}:libenergy-0.1.tar.gz
Эта команда предполагает, что вы работаете на машине Linux. В Windows все аналогично, но требуется команда scp. Она входит в OpenSSH. При этом используется ключ SSH ${key} для копирования файла в виртуальную машину с именем узла или IP-адресом ${vm} типа idcuser. Во избежание многократного ввода значений определите соответствующие переменные окружения. Затем можно развернуть и установить пакет удаленно, выполнив из каталога dist следующую команду:
$ ssh -i ${key} idcuser@${vm} 'gunzip libenergy-0.1.tar.gz;
tar -xvf libenergy-0.1.tar; cd libenergy-0.1; sudo python setup.py install'
Этот сценарий SSH выполняется удаленно, распаковывая пакет и устанавливая его как root командой sudo. Удаленные команды заключены в апострофы и разделены точкой с запятой.
Теперь, когда модуль energy_calculator установлен на целевом компьютере, для его вызова можно использовать клиентскую программу с помощью следующего сценария:
$ scp -i ${key} energy_client.py idcuser@${vm}:energy_client.py
$ ssh -i ${key} idcuser@${vm} './energy_client.py'
You used 200 kJ today
Эти команды сначала копируют, а затем выполняют клиентский сценарий. Выполните их из каталога, содержащего клиентский сценарий.
Итак, вот что мы имеем на данный момент:
- мы написали пример модуля Python и клиентский сценарий для его исполнения;
- создали установочный пакет для модуля;
- удаленно установили модуль на виртуальной машине с помощью SSH;
- удаленно вызвали модуль на виртуальной машине с помощью клиентского сценария.
Неплохо, особенно с учетом того, что до сих пор мы писали и использовали «свое собственное» программное обеспечение. Однако это простой пример; здесь становятся очевидными несколько недостатков.
- Потребитель должен знать, как устанавливать модули Python. Хотелось бы иметь возможность использовать один и тот же метод для установки пакетов, написанных на разных языках.
- Искать его и при необходимости редактировать не удобно никому, кроме программистов, знающих Python.
- В нем нет описания предпосылок, таких как необходимый тип и уровень операционной системы и Python.
- Во избежание проблемы расползания образов хотелось бы устанавливать пакет с консоли облака и внедрять его в виртуальные машины. По крайней мере, иметь другие варианты, помимо написания сложных на вид bash-сценариев, таких как в приведенном примере.
Оптимально было бы иметь возможность вводить модуль калькулятора электроэнергии в виртуальную машину автоматически во время инициализации или когда его нужно обновить.
Установка модуля Python с помощью RPM
В Python есть некоторые дополнительные инструменты, помогающие создавать установочные пакеты для Red Hat Package Management(RPM), Windows и других форматов, исключая упомянутые выше недостатки 1, 2 и 3. Эти форматы удобнее использовать при написании сценариев активации и запуска.
В этом разделе показано, как написать сценарий активации для проверки того, что калькулятор электроэнергии уже установлен. Если он не установлен, то его можно установить командой rpm.
Создание пакета RPM:
$ python setup.py bdist_rpm
Эта команда создает пакет RPM libenergy-0.1-1.noarch.rpm в каталоге dist. Скопируйте его в целевую виртуальную машину командой scp:
$ scp -i ${key} libenergy-0.1-1.noarch.rpm idcuser@${vm}:/tmp/libenergy-0.1-1.noarch.rpm
Установите модуль калькулятора электроэнергии:
$ sudo rpm -i /tmp/libenergy-0.1-1.noarch.rpm
Команда rpm проверяет, установлен ли он, и не переустанавливает пакет, если он уже работает.
Убедитесь, что модуль установлен, запустив клиент калькулятора электроэнергии energy_client.py, как показано выше. Этот файл RPM и следующая команда будут использоваться для ввода модуля калькулятора электроэнергии в виртуальные машины при их инициализации в облаке.
Клонирование образа с помощью Web-портала SmartCloud
Ручной процесс создания пакетов ПО не так прост, как процесс с использованием инструментов типа ICCT, но он нагляднее для демонстрации и лучше поддается автоматизации с использованием API SmartCloud Enterprise. По этим причинам мы начнем с него.
Одним из первых необходимых шагов является создание образа, на который у вас будут права. Это необходимо для редактирования метаданных и добавления файлов, вводимых в виртуальные машины, которые будут инициализированы на основе образа. Существует два способа сделать это.
- Запустите экземпляр виртуальной машины и выполните нужные настройки, включая установку программного обеспечения.
- Клонируйте существующий образ.
Здесь описано клонирование образа, потому что это наиболее удобный подход для автоматизации и создания инструментов управления образами.
Чтобы клонировать образ, выполните следующие действия.
- Нажмите кнопку Add Image на странице Control Panel | Images. Откроется окно Base images (см. рисунок 2).
- Нажмите кнопку Next. Открывается шаг 2 мастера (см. рисунок 3).
- Введите имя и описание клонируемого образа. Проверьте данные на шаге 3 мастера и нажмите кнопку Next.
- Согласитесь с условиями на шаге 4 и нажмите кнопку Submit. Процесс клонирования займет несколько минут, затем появятся панель управления и каталог ресурсов.
Содержимое ресурсов образа в каталоге ресурсов выглядит как на рисунке 4.
Среди этих файлов есть файл parameters.xml, который описывает входные параметры и файлы, моделирующие топологию образа. Наиболее интересные для нас файлы находятся в папке activation_scripts, как показано на рисунке 5.
Введение сценариев установки в ВМ во время инициализации
Содержание клонированного образа из предыдущих разделов в каталоге ресурсов выглядит, как показано на рисунке 6.
Среди этих файлов есть файл parameters.xml, который описывает входные параметры и файлы, моделирующие топологию образа. Наиболее интересные для нас файлы находятся в папке activation_scripts, как показано на рисунке 7.
Ключом к введению файлов в виртуальную машину во время инициализации служит файл scripts.txt. Вот файл scripts.txt из клонированного образа RHEL 6:
cloud-startup3.txt=/etc/init.d/cloud-startup3.sh
activate.txt=/etc/cloud/activate.sh
Он приводит к тому, что файл cloud-startup3.txt вводится в ВМ как /etc/init.d/cloud-startup3.sh, а файл activate.txt ― как /etc/cloud/activate.sh.
Чтобы внедрить в виртуальную машину свой собственный файл, выполните следующие действия.
- Загрузите файлы из папки activation_scripts, помещая их в папку с таким же именем.
- Добавьте в эту папку файл libenergy-0.1-1.noarch.rpm.
- Создайте сценарий libenergy-activate.sh:
/usr/bin/logger 'installing libenergy-0.1' rpm -i /tmp/libenergy-0.1-1.noarch.rpm 2> /tmp/energy.log /usr/bin/logger < /tmp/energy.log
- Будьте осторожны с разделителями строк в стиле UNIX или запустите утилиту dos2unix. Нужно скопировать этот сценарий в виртуальную машину и выполнять его при запуске. Для этого добавьте его в папку activation_scripts. Измените файл scripts.txt, как показано ниже:
cloud-startup3.txt=/etc/init.d/cloud-startup3.sh activate.txt=/etc/cloud/activate.sh libenergy-0.1-1.noarch.rpm=/tmp/libenergy-0.1-1.noarch.rpm libenergy-activate.sh=/home/idcuser/libenergy-activate.sh
- Вызовите сценарий из сценария запуска в облаке cloud-startup3.sh. Отредактируйте cloud-startup3.sh и добавьте строки, выделенные жирным шрифтом:
start) echo "== Cloud Starting" if [ ! -e /etc/cloud/idcuser_pw_randomized ]; then echo "Randomizing idcuser password" echo idcuser:'< /dev/urandom tr -dc _A-Z-a-z-0-9 |head -c16' | /usr/sbin/chpasswd touch /etc/cloud/idcuser_pw_randomized fi /sbin/restorecon -R -v /home/idcuser/.ssh <b>chmod +x /home/idcuser/libenergy-activate.sh /home/idcuser/libenergy-activate.sh ;;</b>
- Сожмите папку и вызовите результирующий файл activation_scripts. Отредактируйте ресурс образа для клонированного образа и загрузите файл ZIP. Он распаковывается в процессе загрузки.
Чтобы проверить клонированный и измененный образ, инициализируйте виртуальную машину на основе клонированного образа; убедитесь, что модуль установлен, запустив клиент калькулятора электроэнергии energy_client.py:
$ scp -i ${key} energy_client.py idcuser@${vm}:energy_client.py
$ ssh -i ${key} idcuser@${vm} './energy_client.py'
You used 200 kJ today
Если вы не видите результат You used 200 kJ today, проверьте файл журнала событий /var/log/messages на наличие сообщения об ошибке.
Теперь вы знаете, как ввести модуль программного обеспечения в виртуальную машину, не устанавливая его на работающую ВМ. Вы только запустили виртуальную машину для проверки результата. Это важный шаг к автоматизации управления образами в облаке и основа нескольких инструментов, которые помогают управлять образами виртуальных машин.
В следующих разделах показано, как использовать некоторые из этих инструментов и как эффективнее автоматизировать процесс с помощью API. Заметим также, что мы не создали независимый ресурс пакета программного обеспечения в облаке; мы просто объединили файл установки RPM и сценарий установки с метаданными виртуального образа в репозитории ресурсов. Теперь поговорим о ресурсах пакета ПО на основе облака.
Создание компонуемых пакетов ПО
Чтобы создать компонуемый пакет ПО, загрузим и отредактируем один из шаблонов из каталога SmartCloud Asset Catalog. Найдите в левой колонке Asset Catalog поисковую ссылку Composable Software Bundles (рисунок 8). Просмотрите результаты поиска.
Существует много различных пакетов, доступных для использования в качестве шаблонов. Нажмите кнопку Asset Manager Clone, чтобы клонировать и изменить пакет. Это поможет вам создать ресурсы, которые можно использовать в своих собственных средствах автоматизации для применения в образах виртуальных машин, но они будут видны только вам. Чтобы создавать пакеты ПО для более широкого применения, их нужно регистрировать с помощью ICCT или другого инструмента.
Использование ICCT для управления пакетами ПО
ICCT включен в каталог образов IBM SmartCloud Enterprise, который позволяет запускать их в облаке. Чтобы воспользоваться им, войдите в панель управления SmartCloud Enterprise.
- Выберите Instance и нажмите кнопку Add Instance.
- Выберите центр обработки данных, затем выберите образ ICCT из каталога и инициализируйте новый экземпляр с помощью мастера инициализации.
- Введите имя пользователя ICCT и пароль. После инициализации экземпляра виртуальной машины для входа можно использовать ссылку на странице Getting Started.
- Войдя в ICCT, нажмите на ссылку Build and Manage Software Bundles.
- На левой панели есть пакет Enablement Bundle for SmartCloud Enterprise. Если вы планируете использовать ICCT или API пакетов ПО SmartCloud Enterprise, его нужно расширить, создав свои собственные пакеты.
Ресурсы
Оригинал статьи: Create solutions on IBM SmartCloud Enterprise: Best practices and tools.
Дополнительная информация о технологиях, упоминаемых в этой статье:
документация по Python;
изучаем Linux, 101: управление пакетами RPM и YUM;
RPM Package Manager в онлайне;
онлайн-руководство по RPM для Fedora (Red Hat);
изучаем Linux, 101: управление пакетами Debian:
создание системы для построения образов специальных виртуальных машин в облаке (инструмент ICCT).
Дополнительная информация по решению задач в IBM SmartCloud Enterprise:
загрузка и передача файлов из экземпляра Windows;
установка Web-сервера IIS на Windows 2008 R2;
создание экземпляра IBM Cloud из командной строки Linux;
создание экземпляра IBM Cloud из командной строки Windows;
расширение корпоративной сети с помощью IBM Cloud;
приложения высокой готовности в облаке IBM;
динамическая параметризация образов облака для создания специальных экземпляров;
Windows-ориентированные подходы к подготовке IBM Cloud;
развертывание программных продуктов с использованием службы быстрого развертывания;
интеграция политики аутентификации с помощью прокси-сервера;
настройка менеджера логических томов Linux;
развертывание сложной топологии с помощью специальной утилиты;
подготовка и настройка экземпляра, охватывающего публичную и частные VLAN;
безопасный доступ к IBM Cloud для Android-устройств;
восстановление данных в IBM SmartCloud Enterprise;
безопасные экземпляры виртуальной машины в облаке.
Об авторах
Создание серии решений
Этот цикл статей посвящен использованию пакетов ПО, управлению образами и другим инструментам IBM SmartCloud Enterprise для решения практических задач управления корпоративными ИТ; различные функции и инструменты, доступные в облаке, демонстрируются на простом примере приложения калькулятора электроэнергии.
В следующих статьях мы рассмотрим следующие темы:
- обзор средств управления пакетами ПО и образами в IBM SmartCloud Enterprise;
- импорт образов в IBM SmartCloud Enterprise;
- управление пакетами ПО в IBM SmartCloud Enterprise с помощью ICCT;
- управление пакетами ПО с помощью API IBM SmartCloud Enterprise;
- управление пакетами ПО в IBM SmartCloud Enterprise с помощью CohesiveFT;
- организация служб предприятия с помощью IBM Workload Deployer в составе IBM SmartCloud Enterprise;
- обзор примеров использования средств управления пакетами ПО образами;
- копирование образов из IBM SmartCloud Enterprise;
- создание служб предприятия на базе IBM SmartCloud Enterprise.
Источник: IBM developerWorks
Автор: ibm