Экземпляры

Экземпляры являются выполняемыми виртуальными машинами в пределах облака OpenStack. Данный раздел обсуждает как работать с ними и принадлежащими им образами, с их сетевыми свойствами и как они представлены в базе данных.

 Запуск экземпляров

Чтобы запустить экземпляр вам необходимо выбрать образ, шаблон виртуального ресурса и имя. Имя не требует уникальности, однако ваша жизнь будет проще, если вы это сделаете, т.к. многие инструменты будут использовать имя на месте UUID пока имя является уникальным. Это может быть выполнено с инструментальной панели кнопкой Launch Instance (Запустить экземпляр) на странице Instances или выбрав действие Launch (Запуск), следующее за образом или моментальным снимком на странице Images & Snapshots.

Выполните это в командной строке:

$ nova boot --flavor <flavor> --image <image> <name>

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

Для удаления экземпляра в инструментальной панели выберите действие Terminate instance (Прекратить экземпляр) следующее за экземпляром на странице Instances. Из командной строки выполните следующее:

$ nova delete <instance-uuid>

Важно отметить, что выключение экземпляра не прекращает его в смысле OpenStack.

 Сбои при загрузке экземпляров

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

Простейшими причинами отказа в запуске узлов являются превышения квот или неспособность планировщика найти подходящий вычислительный узел для запуска экземпляра. В этих случаях ошибка очевидна при выполнении nova show отказавшем экземпляре:

$ nova show test-instance
+------------------------+-----------------------------------------------------\
| Property               | Value                                               /
+------------------------+-----------------------------------------------------\
| OS-DCF:diskConfig      | MANUAL                                              /
| OS-EXT-STS:power_state | 0                                                   \
| OS-EXT-STS:task_state  | None                                                /
| OS-EXT-STS:vm_state    | error                                               \
| accessIPv4             |                                                     /
| accessIPv6             |                                                     \
| config_drive           |                                                     /
| created                | 2013-03-01T19:28:24Z                                \
| fault                  | {u'message': u'NoValidHost', u'code': 500, u'created/
| flavor                 | xxl.super (11)                                      \
| hostId                 |                                                     /
| id                     | 940f3b2f-bd74-45ad-bee7-eb0a7318aa84                \
| image                  | quantal-test (65b4f432-7375-42b6-a9b8-7f654a1e676e) /
| key_name               | None                                                \
| metadata               | {}                                                  /
| name                   | test-instance                                       \
| security_groups        | [{u'name': u'default'}]                             /
| status                 | ERROR                                               \
| tenant_id              | 98333a1a28e746fa8c629c83a818ad57                    /
| updated                | 2013-03-01T19:28:26Z                                \
| user_id                | a1ef823458d24a68955fec6f3d390019                    /
+------------------------+-----------------------------------------------------\
            

В данном случае, просмотр fault (отказавшего) сообщения показывает NoValidHost (отсутствует допустимый хост), указывая на то, что планировщик не был в состоянии удовлетворить требования экземпляра.

Если nova show не достаточно объясняет отказ, осуществите поиск строк, содержащих UUID экземпляра в nova-compute.log на планировавшемся для запуска вычислительном узле или nova-scheduler.log на вашем хосте планировщика тоже является хорошим местом для начала поиска проблем более низкого уровня.

Использование nova show пользователем с правами администратора покажет, вычислительный узел запланированного экземпляра как hostId. Однако, если сбой запуска экземпляра произошел во время планирования данное поле будет пустым.

 Использование характерных для экземпляров данных

Существует два основных типа присущих экземплярам данных: метаданные и данные пользователей.

 Метаданные экземпляра

Для вычислительной среды метаданные экземпляра представляет собой набор связанных с экземпляром пар ключ/ значение. Вычислительная среда читает и пишет в эти пары ключ/ значение в любое время в течение времени жизни экземпляра, причем как из самого экземпляра, так и извне всякий раз, когда конечный пользователь применяет для этого интерфейс Compute API. Однако, у вас нет возможности запросить связанные с экземпляром пары ключ/ значение через службу метаданных по аналогии со службой метаданных Amazon EC2.

В качестве примера метаданных экземпляра: пользователи могут формировать и регистрировать ключи SSH используя команду nova:

$ nova keypair-add mykey > mykey.pem

Она создает ключ с именем mykey, который вы можете связать с экземплярами. Файл mykey.pem является частным ключом, который должен быть сохранен в безопасном месте, поскольку он делает возможным доступ с правами root к экземпляру, с которым связан ключ mykey.

Для регистрации существующего общедоступного ключа в OpenStack используйте команду:

$ nova keypair-add --pub-key mykey.pub mykey
[Замечание]Замечание

Вы должны иметь соответствующий частный ключ, чтобы получить доступ к связанным с этим ключом экземплярам..

Для связывания ключа с экземпляром про загрузке, например, добавьте в командую строку --key_name mykey. Например:

$ nova boot --image ubuntu-cloudimage --flavor 2 --key_name mykey myimage

При загрузке сервера вы можете добавить метаданные, так что вы сможете легко определить их среди других запущенных экземпляров. Используйте параметр --meta с парой key-value, где вы можете использовать строковое выражение и для ключа, и для значения. Например, можно добавить описание сервера, а также его автора:

$ nova boot --image=test-image --flavor=1 \
  --meta description='Small test image' smallimage

При просмотре информации о сервере, вы сможете увидеть metadata, находящееся в строке метаданных:

$ nova show smallimage
+------------------------+-----------------------------------------+
|     Property           |                   Value                 |
+------------------------+-----------------------------------------+
|   OS-DCF:diskConfig    |               MANUAL                    |
| OS-EXT-STS:power_state |                 1                       |
| OS-EXT-STS:task_state  |                None                     |
|  OS-EXT-STS:vm_state   |               active                    |
|    accessIPv4          |                                         |
|    accessIPv6          |                                         |
|      config_drive      |                                         |
|     created            |            2012-05-16T20:48:23Z         |
|      flavor            |              m1.small                   |
|      hostId            |             de0...487                   |
|        id              |             8ec...f915                  |
|      image             |             natty-image                 |
|     key_name           |                                         |
|     metadata           | {u'description': u'Small test image'}   |
|       name             |             smallimage                  |
|    private network     |            172.16.101.11                |
|     progress           |                 0                       |
|     public network     |             10.4.113.11                 |
|      status            |               ACTIVE                    |
|    tenant_id           |             e83...482                   |
|     updated            |            2012-05-16T20:48:35Z         |
|     user_id            |          de3...0a9                      |
+------------------------+-----------------------------------------+

 Пользовательские данные экземпляра

Пользовательские данные (user-data) являются специальным ключом в службе метаданных, хранящей файл, который могут использовать в рамках гостевого экземпляра имеющие соответствующую компетенцию приложения облака. Например, cloudinit является пакетом с открытым кодом из Ubuntu, однако доступным во многих дистрибутивах, который обрабатывает начальную инициализацию экземпляра облака, что позволяет использовать такие пользовательские данные.

Эти пользовательские данные могут быть помещены в файл в вашей локальной системе и затем переданы в создаваемый экземпляр с помощью флага --user-data <user-data-file>. Например:

$ nova boot --image ubuntu-cloudimage --flavor 1 --user-data mydata.file

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

 Инъекция файлов

Произвольные локальные файлы также могут быть размещены в файловой системе экземпляра в момент создания с помощью параметра --file <dst-path=src-path>. Вы можете сохранять до пяти файлов.

Например, если у вас есть специальный файл authorized_keys с именем special_authorized_keysfile, который вы хотите поместить в экземпляр вместо использования обычной инъекции с ключем SSH. В этом случае вы можете использовать следующую команду:

$ nova boot --image ubuntu-cloudimage --flavor 1  \
  --file /root/.ssh/authorized_keys=special_authorized_keysfile