Глава 8. Что к чему

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

 Использование инструментальной панели OpenStack для администрирования

В качестве пользователя с правами администратора вы можете использовать инструментальную панель OpenStack для создания и управления проектами, образами и предпочтениями (шаблонами виртуального ресурса). Пользователи имеют возможность создавать образы и управлять ими в рамках определенных проектов, а также совместно использовать образы, зависящие от настройки службы образов. Обычно настройки политик позволяют пользователям с правами администратора только устанавливать квоты, а также создавать службы и управлять ими. Инструментальная панель предоставляет закладку Admin с System Panel и Identity Panel. Эти интерфейсы дают вам доступ к системной информации и ее использованию, а также к параметрам установки, которые могут устанавливать конечные пользователи. Обратитесь к Руководству пользователя с правми администратора OpenStack для подробной информации об использовании инструментальной панели пользователем с правами администратора.

 Инструменты командной строки

Для целей администрирования мы рекомендуем использовать сочетание инструментальных средств интерфейса командной строки OpenStack (CLI) и инструментальной панели OpenStack. Некоторые пользователи с опытом работы в других облачных технологиях могут воспользоваться совместимым API EC2, который использует несколько иные соглашения об именовании по сравнению с родным API. Мы выделим эти отличия.

Мы настоятельно рекомендуем вам установить клиентов командной строки из Python Package Index (PyPI) вместо их установки из пакетов Ubuntu или Fedora. Клиенты находятся в бурном развитии и очень вероятно, что в любой момент времени версия пакетов, распространяемая вашим производителем операционной системы устареет.

Для управления установкой из архива PyPI используется утилита "pip", а также во многих дистрибутивах Linux доступен пакет "python-pip". Каждый проект OpenStack имеет своего собственного клиента, поэтому в зависимости от работающих на вашем сайте служб установите необходимые вам или все из следующих пакетов:

 Инструменты командной строки для администрирования

Существует также ряд *-manage инструментов командной строки. Они устанавливаются вместе с соответствующими службами в контроллере облака и не требуют отдельной установки:

  • nova-manage

  • glance-manage

  • keystone-manage

  • cinder-manage

В отличие от инструментов, упомянутых выше, инструменты *-manage должны запускаться в контроллере облака, причем с правами root, поскольку они должны иметь доступ по чтению к файлам конфигурации, таким как /etc/nova/nova.conf и выполнять запросы непосредственно в базе данных, а не в качестве Unlike the CLI tools mentioned above, the *-manage tools must be run from the cloud controller, as root, because they need read access to the config files such as /etc/nova/nova.conf and to make queries directly against the database rather than against the OpenStack конечных точек API OpenStack.

[Предостережение]Предостережение

Наличие инструментов *-manage является наследуемой проблемой. А именно: миграция всей оставшейся в инструментах *-manage функциональности на обычные инструменты клиента в конечном счете является целью OpenStack. На сегодняшний день для выполнения некоторых операций по техническому обслуживанию, которые требуют некоторые инструменты *-manage code>, вам необходим SSH на узле контроллера облака.

 Получение учетных данных

Если вы хотите использовать инструменты командной строки для осуществления запросов к своему облаку OpenStack, вы должны иметь соответствующие полномочия. По сравнению с использованием клиентов командной строки, использование инструментальной панели является гораздо более простым способом получения авторизованных полномочий. В верхней правой навигационной строке выберите Project, затем Access & Security, потом API Access, чтобы открыть страницу настроек пользователя, где вы можете задать предпочитаемые язык и часовой пояс для представления инструментальной панели (dashboard). Данное действие высветит две кнопки, Download OpenStack RC File и Download EC2 Credentials, позволяющие вам сформировать файлы в вашей среде для заполнения значений переменных окружения, которые требуются инструментам командной строки, чтобы иметь сведения о том где находятся конечные точки служб и ваша информация об аутентификации. Пользователь, от имени которого вы осуществили вход, предписывает в инструментальной панели имя файла для файла openrc, например demo-openrc.sh. Когда вход осуществлен в качестве администратора, файл будет назван admin-openrc.sh.

Сформированный файл будет выглядеть примерно так:

#!/bin/bash

# With the addition of Keystone, to use an openstack cloud you should
# authenticate against keystone, which returns a **Token** and **Service
# Catalog**. The catalog contains the endpoint for all services the
# user/tenant has access to--including nova, glance, keystone, swift.
#
# *NOTE*: Using the 2.0 *auth api* does not mean that compute api is 2.0.
# We use the 1.1 *compute api*
export OS_AUTH_URL=http://203.0.113.10:5000/v2.0

# With the addition of Keystone we have standardized on the term **tenant**
# as the entity that owns the resources.
export OS_TENANT_ID=98333aba48e756fa8f629c83a818ad57
export OS_TENANT_NAME="test-project"

# In addition to the owning entity (tenant), openstack stores the entity
# performing the action as the **user**.
export OS_USERNAME=demo

# With Keystone you pass the keystone password.
echo "Please enter your OpenStack Password: "
read -s OS_PASSWORD_INPUT
export OS_PASSWORD=$OS_PASSWORD_INPUT

Перевод на русский язык:

#!/bin/bash
# При добавлении Keystone, для использования облака openstack вы должны
# осуществить аутентификацию в keystone, которая вернет **Token** и **Service
# Catalog**. Каталог содержит конечные точки для всех служб, к которым
# user/tenant имеет доступ - включая nova, glance, keystone, swift.
#
# *ПРИМЕЧАНИЕ*: Использование 2.0 *auth api* не означает, что используется compute api 2.0.
# Мы используем *compute api* 1.1
export OS_AUTH_URL=http://203.0.113.10:5000/v2.0

# При добавлении Keystone мы получаем стандартизацию понятия **tenant** (владелец)
# как лица (сущности), которому принадлежат ресурсы.
export OS_TENANT_ID=98333aba48e756fa8f629c83a818ad57
export OS_TENANT_NAME="test-project"

# В добавление к лицу- владельцу (tenant), openstack хранит сущности
# выполняющие действия в качестве **user**.
export OS_USERNAME=demo

# используя Keystone, вы передаете пароль keystone.
echo "Введите, пожалуйста, пароль OpenStack: "
read -s OS_PASSWORD_INPUT
export OS_PASSWORD=$OS_PASSWORD_INPUT
[Предостережение]Предостережение

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

Совместимые с EC2 полномочия могут быть загружены путем выбора Project, затем Access & Security, потом API Access для отображения кнопки Download EC2 Credentials Нажмите на нее для формирования файла ZIP с сертификатами сервера x509 и фрагментами сценария окружения. Создайте новый каталог в безопасном месте, отличном от местоположения user-openrc по-умолчанию, поскольку все эти данные представляют действующую информацию аутентификации, необходимую для доступа к вашей идентификации в облаке. Извлеките сюда все данные из архива. У вас должны быть cacert.pem, cert.pem, ec2rc.shи pk.pem. Файл ec2rc.sh выглядит примерно так:

#!/bin/bash

NOVARC=$(readlink -f "${BASH_SOURCE:-${0}}" 2>/dev/null) ||\
NOVARC=$(python -c 'import os,sys; \
print os.path.abspath(os.path.realpath(sys.argv[1]))' "${BASH_SOURCE:-${0}}")
NOVA_KEY_DIR=${NOVARC%/*}
export EC2_ACCESS_KEY=df7f93ec47e84ef8a347bbb3d598449a
export EC2_SECRET_KEY=ead2fff9f8a344e489956deacd47e818
export EC2_URL=http://203.0.113.10:8773/services/Cloud
export EC2_USER_ID=42 # nova does not use user id, but bundling requires it
export EC2_PRIVATE_KEY=${NOVA_KEY_DIR}/pk.pem
export EC2_CERT=${NOVA_KEY_DIR}/cert.pem
export NOVA_CERT=${NOVA_KEY_DIR}/cacert.pem
export EUCALYPTUS_CERT=${NOVA_CERT} # euca-bundle-image seems to require this

alias ec2-bundle-image="ec2-bundle-image --cert $EC2_CERT --privatekey \
$EC2_PRIVATE_KEY --user 42 --ec2cert $NOVA_CERT"
alias ec2-upload-bundle="ec2-upload-bundle -a $EC2_ACCESS_KEY -s \
$EC2_SECRET_KEY --url $S3_URL --ec2cert $NOVA_CERT"

Чтобы поместить полномочия EC2 в ваше окружение, получите файл ec2rc.sh.

 Инспектирование вызовов API

Путем передачи флага --debug, могут быть сформированы инструменты командной строки для показа вызовов OpenStack API --debug: Например:

# nova --debug list

Данный пример демонстрирует HTTP запрос клиента и ответы конечной точки, что может быть полезным при создании инструментов, разрабатываемых для OpenStack API.

 Применение cURL для дополнительного инспектирования

В основе использования командной строки лежит OpenStack API, который является RESTful API, работающим поверх протокола HTTP. Могут возникнуть случаи, когда вы захотите взаимодействовать с API непосредственно или у вас возникнет такая необходимость из-за подозрения в наличии ошибки в инструментах CLI. Лучшим способом выполнить эту задачу будет использование комбинация cURL и другого инструмента, например, jq для разбора ответов JSON.

Первое, что вы должны сделать, это идентифицироваться в облаке с помощью ваших учетных данных, чтобы получить маркер аутентификации (token).

Ваши учетные данные представляют собой сочетание имени пользователя, пароля и владельца (tenant или проекта - project). Вы можете получить эти данные из openrc.sh, как это обсуждалось ранее. Маркер позволяет взаимодействовать с другими службами конечных точек без необходимости повторной аутентификации для каждого последующего запроса. Маркеры, как правило, доступны на 24 часа и, по истечению срока действия маркера, вы получаете предупреждение о неразрешенном ответе (401, Unauthorized) и вы можете запросить другой маркер.

  1. Просмотрите свой каталог служб OpenStack:

    $ curl -s -X POST http://203.0.113.10:35357/v2.0/tokens \
    -d '{"auth": {"passwordCredentials": {"username":"test-user", \
                                          "password":"test-password"},  \
                                          "tenantName":"test-project"}}' \
    -H "Content-type: application/json" | jq .
  2. Пролистайте ответ JSON, чтобы понять как выложен каталог.

    Для упрощения работы с последующими запросами сохраните маркер в переменной окружения:

    $ TOKEN=`curl -s -X POST http://203.0.113.10:35357/v2.0/tokens \
    -d '{"auth": {"passwordCredentials": {"username":"test-user",  \
                                          "password":"test-password"},  \
                                          "tenantName":"test-project"}}' \
    -H "Content-type: application/json" |  jq -r .access.token.id`

    Теперь вы можете к вашему маркеру в командной строке с помощью имени переменной $TOKEN.

  3. Выберите службу конечной точки из каталога служб, скажем, пусть это будет compute. Попробуйте выполнить запрос, например, выдать список экземпляров (серверов):

    $ curl -s \
    -H "X-Auth-Token: $TOKEN" \
    http://203.0.113.10:8774/v2/98333aba48e756fa8f629c83a818ad57/servers | jq .

Чтобы узнать как должны быть структурированы запросы, прочтите OpenStack API Reference. Для пережевывания ответов с помощью jq, ознакомьтесь с jq Manual.

Флаг-s flag используется в приводимых выше командах cURL для предотвращения показа индикатора исполнения. Если у вас возникли проблемы с исполнением команд cURL, вы захотите удалить его. Точно так же, для помощи в устранении трудностей с командами cURL вы можете включить флаг -v для показа вам подробного вывода. Существует еще много чрезвычайно полезных функций cURL, обратитесь к страницам руководства (man) для ознакомления со всеми опциями.

 Серверы и службы

Существует несколько способов составить вам для себя, как для администратора, представление о вашем облаке OpenStack просто используя доступные инструменты OpenStack. Данный раздел даст вам представление о том, как получить обзор вашего облака, его формы, размера и текущего состояния.

Во- первых, вы можете определить какие серверы входят в состав вашего облака OpenStack выполнив:

# nova-manage service list | sort

Результат выглядит следующим образом:

Binary           Host              Zone Status  State Updated_At
nova-cert        cloud.example.com nova enabled  :-)  2013-02-25 19:32:38
nova-compute     c01.example.com   nova enabled  :-)  2013-02-25 19:32:35
nova-compute     c02.example.com   nova enabled  :-)  2013-02-25 19:32:32
nova-compute     c03.example.com   nova enabled  :-)  2013-02-25 19:32:36
nova-compute     c04.example.com   nova enabled  :-)  2013-02-25 19:32:32
nova-compute     c05.example.com   nova enabled  :-)  2013-02-25 19:32:41
nova-conductor   cloud.example.com nova enabled  :-)  2013-02-25 19:32:40
nova-consoleauth cloud.example.com nova enabled  :-)  2013-02-25 19:32:36
nova-network     cloud.example.com nova enabled  :-)  2013-02-25 19:32:32
nova-scheduler   cloud.example.com nova enabled  :-)  2013-02-25 19:32:33

Вывод показывает, что существует пять вычислительных узлов и один контроллер облака. Вы видите смайлик подобный :-), который указывает, что услуги включены, работают и функционируют. Если служба не доступна, то :-) сменяется на XXX. Это признак того, что вы должны определить причину недоступности службы.

Если вы используете Cinder, выполните следующую команду, чтобы увидеть подобный листинг:

# cinder-manage host list | sort
host              zone
c01.example.com   nova
c02.example.com   nova
c03.example.com   nova
c04.example.com   nova
c05.example.com   nova
cloud.example.com nova

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

Вы также можете использовать Службу идентификации (keystone), чтобы увидеть, какие службы доступны в облаке, а также какие конечные точки настроены для этих служб.

Следующие команды нужны вам для того, чтобы у вас была оболочка, настроенная с соответствующими административными переменными:

$ keystone catalog
Service: image
+-------------+----------------------------------------+
|   Property  |                 Value                  |
+-------------+----------------------------------------+
|   adminURL  | http://cloud.internal.example.com:9292 |
| internalURL | http://cloud.example.com:9292          |
|  publicURL  | http://cloud.example.com:9292          |
|    region   |               RegionOne                |
+-------------+----------------------------------------+

Service: identity
+-------------+----------------------------------------------+
|   Property  |                   Value                      |
+-------------+----------------------------------------------+
|   adminURL  | http://cloud.internal.example.com:35357/v2.0 |
| internalURL | http://cloud.example.com:5000/v2.0           |
|  publicURL  | http://cloud.example.com:5000/v2.0           |
|    region   |                 RegionOne                    |
+-------------+----------------------------------------------+

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

Вы можете определить версию установленной вычислительной среды с помощью команды nova-manage:

# nova-manage version

 Диагностика ваших вычислительных узлов

Вы можете получить дополнительную информацию о запущенных виртуальных машинах: использование ими процессоров, памяти, дискового ввода/вывода или сетевого ввода/вывода, для каждого экземпляра в частности, с помощью выполнения команды nova diagnostics с ID сервера:

$ nova diagnostics <serverID>

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

+----------------+-----------------+
|    Property    |      Value      |
+----------------+-----------------+
| cpu0           | 4.3627          |
| memory         | 1171088064.0000 |
| memory_target  | 1171088064.0000 |
| vbd_xvda_read  | 0.0             |
| vbd_xvda_write | 0.0             |
| vif_0_rx       | 3223.6870       |
| vif_0_tx       | 0.0             |
| vif_1_rx       | 104.4955        |
| vif_1_tx       | 0.0             |
+----------------+-----------------+

Хотя команда должна работать с любым гипервизором, который управляется с помощью libvirt (например, KVM, QEMU или LXC), она была протестирована только с KVM. Пример вывода, при гипервизоре KVM:

+------------------+------------+
| Property         | Value      |
+------------------+------------+
| cpu0_time        | 2870000000 |
| memory           | 524288     |
| vda_errors       | -1         |
| vda_read         | 262144     |
| vda_read_req     | 112        |
| vda_write        | 5606400    |
| vda_write_req    | 376        |
| vnet0_rx         | 63343      |
| vnet0_rx_drop    | 0          |
| vnet0_rx_errors  | 0          |
| vnet0_rx_packets | 431        |
| vnet0_tx         | 4905       |
| vnet0_tx_drop    | 0          |
| vnet0_tx_errors  | 0          |
| vnet0_tx_packets | 45         |
+------------------+------------+

 Проверка сети

Для просмотра настроенных в вашем облаке сетей с фиксированными IP вы применить клиента командной строки nova для получения диапазонов IP:

$ nova network-list
+--------------------------------------+--------+--------------+
| ID                                   | Label  | Cidr         |
+--------------------------------------+--------+--------------+
| 3df67919-9600-4ea8-952e-2a7be6f70774 | test01 |  10.1.0.0/24 |
| 8283efb2-e53d-46e1-a6bd-bb2bdef9cb9a | test02 |  10.1.1.0/24 |
+--------------------------------------+--------+--------------+

Инструмент nova-manage может снабдить вас некоторыми дополнительными деталями:

# nova-manage network list
id IPv4        IPv6 start address DNS1 DNS2 VlanID project   uuid 
1  10.1.0.0/24 None 10.1.0.3      None None 300    2725bbd   beacb3f2
2  10.1.1.0/24 None 10.1.1.3      None None 301    none      d0b1a796

Этот вывод показывает, что настроены две сети, причем каждая сеть содержит 255 IP адресов (/24 подсети). Первая сеть была назначена определенному проекту, в то время как вторая сеть по-прежнему открыта для назначения. Вы можете можете назначить эту сеть вручную или автоматически при первом запуске проекта.

Чтобы выяснить, какие плавающие (floating) IP- адреса доступны в вашем облаке, выполните:

# nova-manage floating list
2725bb...59f43f 1.2.3.4 None            nova vlan20
None            1.2.3.5 48a415...b010ff nova vlan20

Здесь доступно два плавающих IP. Первый был выделен проекту, а второй остается не распределенным.

 Пользователи и проекты

Чтобы увидеть список проектов, которые были добавлены в облако, выполните:

$ keystone tenant-list
+-----+----------+---------+
| id  | name     | enabled |
+-----+----------+---------+
| ... | jtopjian | True    |
| ... | alvaro   | True    |
| ... | everett  | True    |
| ... | admin    | True    |
| ... | services | True    |
| ... | jonathan | True    |
| ... | lorin    | True    |
| ... | anne     | True    |
| ... | rhulsker | True    |
| ... | tom      | True    |
| ... | adam     | True    |
+-----+----------+---------+

Чтобы увидеть пользователей, выполните:

$ keystone user-list
+-----+----------+---------+------------------------------+
| id  | name     | enabled | email                        |
+-----+----------+---------+------------------------------+
| ... | everett  | True    | everett.towne@backspace.com  |
| ... | jonathan | True    | jon@sfcu.edu                 |
| ... | nova     | True    | nova@localhost               |
| ... | rhulsker | True    | ryan.hulkster@cyberalbert.ca |
| ... | lorin    | True    | lorinhoch@nsservices.com     |
| ... | alvaro   | True    | Alvaro.Perry@cyberalbert.ca  |
| ... | anne     | True    | anne.green@backspace.com     |
| ... | admin    | True    | root@localhost               |
| ... | cinder   | True    | cinder@localhost             |
| ... | glance   | True    | glance@localhost             |
| ... | jtopjian | True    | joe.topjian@cyberalbert.com  |
| ... | adam     | True    | adam@ossmanuals.net          |
| ... | tom      | True    | fafield@univm.edu.au         |
+-----+----------+---------+------------------------------+
[Замечание]Замечание

Иногда пользователь и группа имеют взаимно однозначное (один-к-одному) отображение. Это происходит для стандартных системных учетных записей, таких как cinder, glance, nova и swift, или когда только один пользователь является целой частью группы.

 Выполнение экземпляров

Чтобы посмотреть список запущенных экземпляров, выполните:

$ nova list --all-tenants
+-----+------------------+--------+-------------------------------------------+
| ID  | Name             | Status | Networks                                  |
+-----+------------------+--------+-------------------------------------------+
| ... | Windows          | ACTIVE | novanetwork_1=10.1.1.3, 199.116.232.39    |
| ... | cloud controller | ACTIVE | novanetwork_0=10.1.0.6; jtopjian=10.1.2.3 |
| ... | compute node 1   | ACTIVE | novanetwork_0=10.1.0.4; jtopjian=10.1.2.4 |
| ... | devbox           | ACTIVE | novanetwork_0=10.1.0.3                    |
| ... | devstack         | ACTIVE | novanetwork_0=10.1.0.5                    |
| ... | initial          | ACTIVE | nova_network=10.1.7.4, 10.1.8.4           |
| ... | lorin-head       | ACTIVE | nova_network=10.1.7.3, 10.1.8.3           |
+-----+------------------+--------+-------------------------------------------+

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

$ nova show <uuid>

Например:

# nova show 81db556b-8aa5-427d-a95c-2a9a6972f630
+-------------------------------------+-----------------------------------+
| Property                            | Value                             |
+-------------------------------------+-----------------------------------+
| OS-DCF:diskConfig                   | MANUAL                            |
| OS-EXT-SRV-ATTR:host                | c02.example.com                   |
| OS-EXT-SRV-ATTR:hypervisor_hostname | c02.example.com                   |
| OS-EXT-SRV-ATTR:instance_name       | instance-00000029                 |
| OS-EXT-STS:power_state              | 1                                 |
| OS-EXT-STS:task_state               | None                              |
| OS-EXT-STS:vm_state                 | active                            |
| accessIPv4                          |                                   |
| accessIPv6                          |                                   |
| config_drive                        |                                   |
| created                             | 2013-02-13T20:08:36Z              |
| flavor                              | m1.small (6)                      |
| hostId                              | ...                               |
| id                                  | ...                               |
| image                               | Ubuntu 12.04 cloudimg amd64 (...) |
| key_name                            | jtopjian-sandbox                  |
| metadata                            | {}                                |
| name                                | devstack                          |
| novanetwork_0 network               | 10.1.0.5                          |
| progress                            | 0                                 |
| security_groups                     | [{u'name': u'default'}]           |
| status                              | ACTIVE                            |
| tenant_id                           | ...                               |
| updated                             | 2013-02-13T20:08:59Z              |
| user_id                             | ...                               |
+-------------------------------------+-----------------------------------+

Эта выдача показывает, что экземпляр с именем devstack был создан из образа Ubuntu 12.04 с использованием предпочтений m1.small и размещается на вычислительном узле node c02.example.com.

 Резюме

Мы надеемся, что вам понравился наш краткий обзор вашей рабочей среды, в том числе того, как взаимодействовать с вашим облаком для получения полезной информации. Далее вы можете воспользоваться Admin User Guide как справочником для всех функций командной строки в вашем облаке.