- PVSM.RU - https://www.pvsm.ru -
Одна из целей облачных вычислений ― предоставить пользователям облака богатый выбор рабочих ресурсов; другая ― сохранить управляемый объем нагрузки по решению задач поддержки для групп разработчиков образов и программного обеспечения. Может показаться, что это взаимоисключающие цели, но настоящий цикл статей демонстрирует, как можно эффективно использовать ресурсы пакетов ПО и образов и управлять ими, делая достижимыми обе эти цели.
В этой статье:
Концепции иллюстрируются на примере приложения калькулятора электроэнергии. Мы покажем, как создать простое решение с весьма небольшим количеством кода на языке 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.
Образы виртуальных машин могут содержать:
По мере добавления к образу новых возможностей он становится менее универсальным; чем менее универсален отдельный образ, тем вероятнее, что потребуются другие. Однако чем меньше функций добавляется в образ, тем он менее полезен пользователям облака.
Принятие решений о том, что именно включать в образ и как сделать его шаблоном ― две основополагающие задачи в искусстве разработки образов.
На рисунке 1 показана упрощенная логическая модель ресурсов.
Описание ресурсов, атрибуты и отношения приведены в таблице 1.
Управление пакетами ПО ― важный аспект управления вычислительными системами, в том числе облачными. Управление пакетами специфично для контекста облака, потому что происходит взаимодействие с экземплярами виртуальной машины, которые создаются динамически. Это открывает возможности для добавления дополнительного программного обеспечения «на лету» и вселяет в пользователя уверенность, что система будет «просто работать».
Системы управления пакетами облачного ПО имеют схожие концепции и могут содержать в себе системы управления пакетами, поставляемые с операционными системами и некоторыми платформами разработки ПО.
В этом разделе описываются системы управления пакетами программного обеспечения для Linux и их применение к облачным системам. Приводится пример создания программного модуля на языке Python, его привязки в качестве RPM и внедрения в виртуальную машину на основе облака на время подготовки.
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-системах, в том числе Ubuntu и SUSE, используется система управления пакетами Advanced Packaging Tool (APT). Как и в случае RPM и YUM, данные пакетов хранятся в центральной базе данных.
Пакет можно установить командой apt-get install. Вот команда для установки пакета dos2unix:
# apt-get install dos2unix
apt-get находит информацию о пакете в удаленном репозитории, определяет зависимости, загружает пакет и устанавливает его.
У 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, сценарий установки и установим его, чтобы проверить. Пакет 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 есть некоторые дополнительные инструменты, помогающие создавать установочные пакеты для 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 и следующая команда будут использоваться для ввода модуля калькулятора электроэнергии в виртуальные машины при их инициализации в облаке.
Ручной процесс создания пакетов ПО не так прост, как процесс с использованием инструментов типа ICCT, но он нагляднее для демонстрации и лучше поддается автоматизации с использованием API SmartCloud Enterprise. По этим причинам мы начнем с него.
Одним из первых необходимых шагов является создание образа, на который у вас будут права. Это необходимо для редактирования метаданных и добавления файлов, вводимых в виртуальные машины, которые будут инициализированы на основе образа. Существует два способа сделать это.
Здесь описано клонирование образа, потому что это наиболее удобный подход для автоматизации и создания инструментов управления образами.
Чтобы клонировать образ, выполните следующие действия.
Содержимое ресурсов образа в каталоге ресурсов выглядит как на рисунке 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.
Чтобы внедрить в виртуальную машину свой собственный файл, выполните следующие действия.
/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
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
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>
Чтобы проверить клонированный и измененный образ, инициализируйте виртуальную машину на основе клонированного образа; убедитесь, что модуль установлен, запустив клиент калькулятора электроэнергии 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 включен в каталог образов IBM SmartCloud Enterprise, который позволяет запускать их в облаке. Чтобы воспользоваться им, войдите в панель управления SmartCloud Enterprise.
Оригинал статьи: Create solutions on IBM SmartCloud Enterprise: Best practices and tools [1].
Дополнительная информация о технологиях, упоминаемых в этой статье:
документация по Python [2];
изучаем Linux, 101: управление пакетами RPM и YUM [3];
RPM Package Manager в онлайне [4];
онлайн-руководство по RPM для Fedora (Red Hat) [5];
изучаем Linux, 101: управление пакетами Debian [6]:
создание системы для построения образов специальных виртуальных машин в облаке (инструмент ICCT) [7].
Дополнительная информация по решению задач в IBM SmartCloud Enterprise:
загрузка и передача файлов из экземпляра Windows [8];
установка Web-сервера IIS на Windows 2008 R2 [9];
создание экземпляра IBM Cloud из командной строки Linux [10];
создание экземпляра IBM Cloud из командной строки Windows [11];
расширение корпоративной сети с помощью IBM Cloud [12];
приложения высокой готовности в облаке IBM [13];
динамическая параметризация образов облака для создания специальных экземпляров [14];
Windows-ориентированные подходы к подготовке IBM Cloud [15];
развертывание программных продуктов с использованием службы быстрого развертывания [16];
интеграция политики аутентификации с помощью прокси-сервера [17];
настройка менеджера логических томов Linux [18];
развертывание сложной топологии с помощью специальной утилиты [19];
подготовка и настройка экземпляра, охватывающего публичную и частные VLAN [20];
безопасный доступ к IBM Cloud для Android-устройств [21];
восстановление данных в IBM SmartCloud Enterprise [22];
безопасные экземпляры виртуальной машины в облаке [23].
Этот цикл статей посвящен использованию пакетов ПО, управлению образами и другим инструментам IBM SmartCloud Enterprise для решения практических задач управления корпоративными ИТ; различные функции и инструменты, доступные в облаке, демонстрируются на простом примере приложения калькулятора электроэнергии.
В следующих статьях мы рассмотрим следующие темы:
Источник: IBM developerWorks [24]
Автор: ibm
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/ibm/16109
Ссылки в тексте:
[1] Create solutions on IBM SmartCloud Enterprise: Best practices and tools: http://www.ibm.com/developerworks/cloud/library/cl-smartcloudsolution1/index.html?S_TACT=105AGX99&S_CMP=CP
[2] документация по Python: http://python.org/doc/
[3] изучаем Linux, 101: управление пакетами RPM и YUM: http://www.ibm.com/developerworks/linux/library/l-lpic1-v3-102-5/?S_TACT=105AGX99&S_CMP=CP
[4] RPM Package Manager в онлайне: http://rpm.org/
[5] онлайн-руководство по RPM для Fedora (Red Hat): http://docs.fedoraproject.org/en-US/Fedora_Draft_Documentation/0.1/html/RPM_Guide/
[6] изучаем Linux, 101: управление пакетами Debian: http://www.ibm.com/developerworks/linux/library/l-lpic1-v3-102-4/
[7] создание системы для построения образов специальных виртуальных машин в облаке (инструмент ICCT): http://www.ibm.com/developerworks/cloud/library/cl-buildcloudimageICCT/
[8] загрузка и передача файлов из экземпляра Windows: http://www.ibm.com/developerworks/cloud/library/cl-newwindows/?S_TACT=105AGX99&S_CMP=CP
[9] установка Web-сервера IIS на Windows 2008 R2: http://www.ibm.com/developerworks/cloud/library/cl-iiswindows/?S_TACT=105AGX99&S_CMP=CP
[10] создание экземпляра IBM Cloud из командной строки Linux: http://www.ibm.com/developerworks/cloud/library/cl-commandlinelx/?S_TACT=105AGX99&S_CMP=CP
[11] создание экземпляра IBM Cloud из командной строки Windows: http://www.ibm.com/developerworks/cloud/library/cl-commandlinewin/?S_TACT=105AGX99&S_CMP=CP
[12] расширение корпоративной сети с помощью IBM Cloud: http://www.ibm.com/developerworks/cloud/library/cl-extendnetworkcloud/?S_TACT=105AGX99&S_CMP=CP
[13] приложения высокой готовности в облаке IBM: http://www.ibm.com/developerworks/cloud/library/cl-highavailabilitycloud/?S_TACT=105AGX99&S_CMP=CP
[14] динамическая параметризация образов облака для создания специальных экземпляров: http://www.ibm.com/developerworks/cloud/library/cl-parameterizecloudimages/?S_TACT=105AGX99&S_CMP=CP
[15] Windows-ориентированные подходы к подготовке IBM Cloud: http://www.ibm.com/developerworks/cloud/library/cl-provisiontpm/?S_TACT=105AGX99&S_CMP=CP
[16] развертывание программных продуктов с использованием службы быстрого развертывания: http://www.ibm.com/developerworks/cloud/library/cl-rdsassetoncloud/
[17] интеграция политики аутентификации с помощью прокси-сервера: http://www.ibm.com/developerworks/cloud/library/cl-cloudtip-authproxy/?S_TACT=105AGX99&S_CMP=CP
[18] настройка менеджера логических томов Linux: http://www.ibm.com/developerworks/cloud/library/cl-cloudtip-lvmconfig/?S_TACT=105AGX99&S_CMP=CP
[19] развертывание сложной топологии с помощью специальной утилиты: http://www.ibm.com/developerworks/cloud/library/cl-clouddeployutility/?S_TACT=105AGX99&S_CMP=CP
[20] подготовка и настройка экземпляра, охватывающего публичную и частные VLAN: http://www.ibm.com/developerworks/cloud/library/cl-spanvlan/?S_TACT=105AGX99&S_CMP=CP
[21] безопасный доступ к IBM Cloud для Android-устройств: http://www.ibm.com/developerworks/cloud/library/cl-securemobileaccess/?S_TACT=105AGX99&S_CMP=CP
[22] восстановление данных в IBM SmartCloud Enterprise: http://www.ibm.com/developerworks/cloud/library/cl-datarecovery/?S_TACT=105AGX99&S_CMP=CP
[23] безопасные экземпляры виртуальной машины в облаке: http://www.ibm.com/developerworks/cloud/library/cl-cloudvmsecurityrisks/?S_TACT=105AGX99&S_CMP=CP
[24] IBM developerWorks: http://www.ibm.com/developerworks/ru/library/cl-smartcloudsolution1/
Нажмите здесь для печати.