Консольные клиенты

В данной статье описывается взаимодействие с OpenStack API с помощью консольных клиентов.

Создание пользователя

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

В меню «Виртуальное приватное облако» откройте подраздел Пользователи.

Откроется страница со списком пользователей. Нажмите кнопку Создать пользователя.

image

В открывшемся окне введите его имя и нажмите кнопку Создать.

image

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

image

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

image

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

image

RC-файл (он представляет собой скрипт, с помощью которого консольные клиенты могут авторизовываться в Identity API v3) доступен для скачивания по этой ссылке на вкладке Доступ после авторизации в проекте. Для каждого региона необходим отдельный RC-файл.

image

Установка ПО

Чтобы настроить систему для работы с проектом, потребуется установить дополнительное ПО. Данная инструкция по установке подходит для OC Ubuntu 16.04. Для других ОС команды могут отличаться, с инструкциями для ОС Debian 7.0 и CentOS 6.5 можно ознакомиться непосредственно в панели управления (вкладка Доступ).

Установите следующие пакеты:

apt update
apt install python-keystoneclient python-novaclient python-glanceclient python-neutronclient python-cinderclient python-heatclient python-openstackclient

После этого выполните команду:

$ source rc.sh

Программа запросит пароль. Введите повторно пароль пользователя, под учетной записью которого вошли во внешнюю панель.

Теперь можно приступать к работе.

Просмотр информации о доступных зонах

В регионе VPC может быть доступна одна или несколько зон.  Каждая зона представляет собой  набор серверов виртуализации и хранения данных, расположенных в отдельных стойках. Серверы в различных зонах можно объединять локальными сетями. Доступные в каждой зоне ресурсы определяются квотой зоны, управление которой осуществляется в панели управления проектами.

nova availability-zone-list

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

+-------+-----------+
| Name  | Status    |
+-------+-----------+
| ru-1a | available |
| ru-1b | available |
+-------+-----------+

Просмотр информации о сетях

Чтобы создавать виртуальные машины, нужна сеть. Просмотрите список доступных сетей, используя команду:

$ neutron net-list

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

+--------------------------------------+------------------+-----------------------------------------------------+
| id                                   | name             | subnets                                             |
+--------------------------------------+------------------+-----------------------------------------------------+
| 1c037362-487f-4103-a73b-6cba3f5532dc | nat              | b7be542a-2eef-465e-aacd-34a0c83e6afa 192.168.0.0/24 |
| ab2264dd-bde8-4a97-b0da-5fea63191019 | external-network | 102a9263-2d84-4335-acfb-6583ac8e70aa                |
|                                      |                  | aa9e4fc4-63b0-432e-bcbd-82a613310acb                |
| fce90252-7d99-4fc7-80ae-ef763d12938d | newnetwork       | 5a1a68f9-b885-47b7-9c7e-6f0e08145e3b 192.168.1.0/24 |
+--------------------------------------+------------------+-----------------------------------------------------+

Каждая сеть имеет уникальный идентификационный номер (графа ID), его нужно будет указать при создании нового сервера.

Активировать сетевую конфигурацию можно и через графический интерфейс (подробнее об этом см. здесь).

Подготовка к созданию нового сервера

Просмотрите список всех доступных образов операционных систем, используя команду:

$ glance image-list

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

Образы, поддерживаемые можно фильтровать по их свойствам, например:

glance image-list  --property-filter x_sel_image_owner=Selectel --property-filter x_sel_image_type=master --property-filter x_sel_image_os_arch=amd64

Итоговый список может выглядеть следующим образом:

+--------------------------------------+---------------------------------+
| ID                                   | Name                            |
+--------------------------------------+---------------------------------+
| f0000fbc-6ab3-418f-a9f7-81c845f36ad4 | CentOS 6 64-bit                 |
| d321a0fb-19e1-4557-a126-6ef4e6e87dba | CentOS 7 64-bit                 |
| 621c5f5c-a5de-49bf-b0d9-234b734a6d9b | CentOS 7.2 64-bit               |
| bc103d99-5ee1-454b-b799-ce8f1503760f | Debian 7 (Wheezy) 64-bit        |
| 866d2506-c89e-4315-a42a-9b0255be09df | Debian 8 (Jessie) 64-bit        |
| ba7b87b9-9984-42c5-a189-893244623ac6 | Debian 8.6 (Jessie) 64-bit      |
| fb83079f-ec73-4189-af3f-5d2696e3ea37 | Fedora 23 64-bit                |
| 193bed39-9e70-4c35-a0b3-022525ab005c | Fedora 24 64-bit                |
| 0acac5c1-8262-479d-9ad1-b2f1ad9b650f | OpenSUSE 13.1 64-bit            |
| 6cce49d5-b46b-41b5-b974-384202ab12ef | Ubuntu 12.04 LTS 64-bit         |
| dfbcee74-e4c5-4788-a156-4bbc6403ca17 | Ubuntu 14.04 LTS 64-bit         |
| a4ce7727-f15d-4898-82a8-d32f3242ba54 | Ubuntu 14.04.5 LTS 64-bit       |
| ce532860-acef-40cd-b3c7-699c22b4dfd6 | Ubuntu 16.04 LTS 64-bit         |
| 2e2b6825-0846-4f64-9513-733bb4a38b0b | Windows Server 2012 R2 Standard |
+--------------------------------------+---------------------------------+

 

Выбрав нужный образ, скопируйте его ID — он понадобится при создании сервера.

Теперь создайте требуемую конфигурацию сервера (в терминологии OpenStaсk они обозначаются термином flavor):

$ nova --is-public False flavor-create <имя конфигурации> auto <объём памяти> <ёмкость жёсткого диска> <количество ядер>

Размер жёсткого диска в этой команде следует указать равным нулю. В нашей реализации в качестве корневого (системного) диска к машине присоединяется том Cinder. Такое решение было выбрано по причине гибкости: в отличие от локальных дисков (в терминологии Amazon они называются instance store), тома Cinder можно отключать и присоединять к другим машинам.

Ключ auto в этой команде означает, что ID конфигурации сервера будет сгенерирован автоматически:

+------------------------------------+------+---------+----+---------+----+-----+-----------+---------+
|ID                                  |Name  |Memory,MB|Disk|Ephemeral|Swap|VCPUs|RXTX_Factor|Is_Public|
+------------------------------------+------+---------+----+---------+----+-----+-----------+---------+
|fc275dcc-f51a-48c3-b0c3-c3fdd300dd65|myflvr| 1024    | 0  | 0       |    | 2   | 1.0       | True    |
+------------------------------------+------+---------+----+---------+----+-----+-----------+---------+

ID нужно скопировать — он также понадобится при создании сервера.

Затем создайте SSH-ключ:

$ nova keypair-add <имя ключа>  <имя файла>
$ chmod 600 <имя файла>

Эта команда выведет в файл приватный ключ, с помощью которого можно будет подключаться к виртуальным машинам по SSH (команда соединения в этом случае будет выглядеть так: ssh -i <имя файла> <IP-адрес сервера>).

Если у вас уже есть пара «приватный ключ-публичный ключ», можно указать публичный ключ в качестве аргумента:

$ nova keypair-add <имя ключа> pub-key <путь к публичному ключу> 

Например:

$ nova keypair-add myKey --pub-key /home/user/.ssh/id_rsa.pub

SSH-ключи можно также добавлять из панели управления (вкладка Доступ в свойствах проекта).

Выбрав образ и конфигурацию, перейдите к созданию диска для сервера.

Просмотрите список доступных типов дисков:

cinder type-list

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

+--------------------------------------+-----------------+-------------+-----------+
|                  ID                  |       Name      | Description | Is_Public |
+--------------------------------------+-----------------+-------------+-----------+
| 00a8c3b9-715e-438b-845c-89fbc1e9e62b |    fast.ru-1b   |      -      |    True   |
| 27c66842-2b9f-4d71-a957-383ca5ee19c4 |    fast.ru-1a   |      -      |    True   |
| 2c9a6741-5901-40ff-ba67-4a7e70ad7563 | universal.ru-1a |      -      |    True   |
| 48f5caf9-9bc9-49ed-bdf5-0b29c544b0b0 | universal.ru-1b |      -      |    True   |
| 9c535a8c-cce1-4780-95bf-76c68b99c52f |       iso       |      -      |    True   |
| c7f1cda0-ebcb-4711-8f50-e13e6e4fc9eb |   basic.ru-1b   |      -      |    True   |
| ea11f5ad-baeb-461e-9769-47facee5dbcd |   basic.ru-1a   |      -      |    True   |
+--------------------------------------+-----------------+-------------+-----------+

Для дисков серверов следует использовать типы fast, basic и universal в нужной зоне. Создать диск можно с помощью команды:

$ cinder create --image-id <id образа> --display_name <имя диска> --volume-type <тип диска>.<имя зоны> <размер, ГБ> --availability-zone <имя зоны>

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

+-------------------+--------------------------------------+
|      Property     |                Value                 |
+-------------------+--------------------------------------+
|    attachments    |                  []                  |
| availability_zone |                ru-1a                 |
|      bootable     |                false                 |
|     created_at    |      2014-10-23T11:10:15.000000      |
|    description    |                 None                 |
|     encrypted     |                False                 |
|         id        | 76586803-9cfd-4f75-931d-0a4dee98e496 |
|      metadata     |                  {}                  |
|        name       |                mydisk                |
|        size       |                  5                   |
|    snapshot_id    |                 None                 |
|    source_volid   |                 None                 |
|       status      |               creating               |
|      user_id      |   6f862e43d4a84f359928948fb658d695   |
|    volume_type    |               fast.ru-1a            |
+-------------------+--------------------------------------+

Для того, чтобы использовать диск в качестве системного диска сервера, необходимо сделать его загрузочным:

cinder set-bootable <ID диска> true

Теперь можно создать сервер:

nova boot <имя сервера>  --key-name <имя ключа> --availability-zone <имя зоны> --flavor <id конфигурации> --nic net-id=<id сети> --block-device source=volume,id=<ID диска>,dest=volume,bootindex=0

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

$ nova boot --availability-zone <имя зоны> --flavor <id конфигурации> --nic net-id=<id сети>  --block-device id=<id образа>,source=image,dest=volume,size=<размер диска>,device=vda,bootindex=0

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

Чтобы получить доступ к машине из консоли, достаточно будет ввести логин и нажать Enter. Вход по SSH будет возможен только с помощью ключа.

Создание сервера на базе образов Windows

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

neutron net-list --name license_windows_2012_standard

Например:

+--------------------------------------+-------------------------------+-------------------------------------------------------+
| id                                   | name                          | subnets                                               |
+--------------------------------------+-------------------------------+-------------------------------------------------------+
| 5d8f8144-e275-4c7e-9275-6f835d8ab2d8 | license_windows_2012_standard | d142a857-1203-4227-a175-b8fab7df3fb7 172.16.100.44/30 |
|                                      |                               | 4031dc7d-15a5-4351-880c-013c36469a55 172.16.90.240/30 |
+--------------------------------------+-------------------------------+-------------------------------------------------------+

При создании сервера необходимо указать эту сеть в качестве первого интерфейса. Также можно задать пароль с помощью ключа --meta:

nova boot <имя сервера> --key-name <имя ключа> --availability-zone <имя зоны> --flavor <id конфигурации> --nic net-id=<id сети лицензирования> --nic net-id=<id сети> --block-device source=volume,id=<ID диска>,dest=volume,bootindex=0 --meta admin_pass=<ваш пароль>

Операции с дисками

Просмотреть список доступных дисков можно с помощью команды:

cinder list

Чтобы подключить диск к серверу, скопируйте из этой таблицы параметр ID и выполните команду:

$ nova volume-attach <имя сервера> <id диска>

Назначение плавающего IP-адреса

Назначаем ранее созданный в панели управления проектом плавающий адрес серверу:

$ nova floating-ip-associate <имя сервера> <адрес>

Управление питанием и перезагрузка

Существует два способа перезагрузки сервера: программная и аппаратная (через отключение питания) перезагрузка.

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

$ nova reboot <имя сервера>

Для аппаратной:

$ nova reboot --hard <имя сервера>

Управление питанием осуществляется при помощи команд start и stop:

#включить указанный сервер
$ nova start <имя сервера>

#выключить указанный сервер
$ nova stop <имя сервера>

Операции с сетевыми портами

Создаем новую сеть:

$ neutron net-create <имя сети>

По выполнении команды на консоль будет выведена таблица с информацией о сети:

+----------------+--------------------------------------+
| Field          | Value                                |
+----------------+--------------------------------------+
| admin_state_up | True                                 |
| id             | add73ca5-6120-43bd-bb56-d1d8d71d21ac |
| name           | localnet                             |
| shared         | False                                |
| status         | ACTIVE                               |
| subnets        |                                      |
| tenant_id      | d15391cc95474b1ab6bd81fb2a73bc5c     |
+----------------+--------------------------------------+

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

$ neutron subnet-create --name 192.168.1.0/24  192.168.1.0/24 <id сети>

<ID сети> берём из вывода предыдущей команды.

Затем создаем в сети порт:

$ neutron port-create <имя сети>

и подключаем к нему сервер:

$ nova interface-attach --port-id <id порта> <имя сервера>