База знаний

Список статей
Наверх

Работа с OpenStack API с помощью консольных клиентов

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

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

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

  1. В панели управления в разделе Виртуальное приватное облако перейдите в подраздел Пользователи.
  2. Нажмите кнопку Новый пользователь.
  3. В открывшемся окне введите логин (можно оставить автоматически сгенерированное имя) и нажмите кнопку Сохранить. Пароль для входа в панель будет также сгенерирован автоматически, его можно изменить самостоятельно или сгенерировать новый.
  4. В меню блока с информацией о новом пользователе укажите проект и нажмите кнопку Добавить в проект.

Пользователь будет отображаться в панели управления этим проектом.

Установка ПО

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

Примечание: для каждого дистрибутива предназначен свой набор.

Ubuntu/Debian

apt update 
apt -y install curl python-pip python-dev python3-dev git libxml2-dev libxslt1-dev python-openssl python3-openssl python-pyasn1 libffi-dev libssl-dev build-essential
pip install -UI pbr setuptools pytz 
pip install -UI git+https://github.com/openstack/python-openstackclient

CentOS

yum -y install epel-release
yum -y install python-pip gcc libffi-devel python-devel libxslt-devel openssl-devel git libffi-devel
pip install -UI pbr setuptools pytz
pip install -UI git+https://github.com/openstack/python-openstackclient

Fedora

yum -y install python-pip gcc libffi-devel python-devel libxslt-devel openssl-devel git libffi-devel
pip install -UI pbr setuptools pytz
pip install -UI git+https://github.com/openstack/python-openstackclient

Подключение к OpenStack API

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

После авторизации в проекте укажите пользователя и регион на вкладке Доступ и скачайте RC-файл.

Примечание: для каждого региона необходим отдельный RC-файл.

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

source rc.sh

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

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

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

openstack availability zone list --compute

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

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

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

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

openstack network 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), его нужно будет указать при создании нового сервера.

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

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

openstack image list

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

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

openstack image list \
--property x_sel_image_owner=Selectel \
--property x_sel_image_os_dist=windows

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

+--------------------------------------+---------------------------------+
| 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):

openstack flavor create \
 --private \
 --vcpus <количество ядер> \
 --ram <объём памяти, Мб> \
 --disk <ёмкость жёсткого диска, Гб> \
 <имя конфигурации>

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

Будет сгенерирован ID конфигурации сервера:

+----------------------------+--------------------------------------+
| Field                      | Value                                |
+----------------------------+--------------------------------------+
| OS-FLV-DISABLED:disabled   | False                                |
| OS-FLV-EXT-DATA:ephemeral  | 0                                    |
| availability_zones         | [u'ru-1a']                           |
| disk                       | 0                                    |
| extra_specs                | {}                                   |
| id                         | 7e652f6c-a326-4e23-8b01-017194cc3024 |
| name                       | myflvr                               |
| os-flavor-access:is_public | False                                |
| properties                 |                                      |
| ram                        | 1                                    |
| rxtx_factor                | 1.0                                  |
| swap                       |                                      |
| vcpus                      | 1                                    |
+----------------------------+--------------------------------------+

ID нужно скопировать --- он также понадобится при создании сервера. Затем создайте SSH-ключ:

openstack keypair create <имя ключа> --private-key <имя файла>
chmod 600 <имя файла>

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

Обратите винмание! Если не указать --private-key <имя файла>, то содержимое будет выведено на экран.

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

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

Например:

openstack keypair create myKey --pub-key ~/.ssh/id_rsa.pub

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

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

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

openstack volume type list

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

+--------------------------------------+-----------------+-----------+
|                  ID                  |       Name      |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 в нужной зоне. Создать диск можно с помощью команды:

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

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

+-------------------+--------------------------------------+
|      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            |
+-------------------+--------------------------------------+

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

openstack volume set --bootable <ID диска>

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

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

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

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

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

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

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

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

openstack network list --name license_windows_2016_standard

Например:

+--------------------------------------+-------------------------------+--------------------------------------+
| id                                   | name                          | subnets                              |
+--------------------------------------+-------------------------------+--------------------------------------+
| 21db1ae1-c2a8-4982-b944-4167fede2fce | license_windows_2016_standard | c62f1cd9-4a55-4809-b7f9-8b5c26b4cc7f |
+--------------------------------------+-------------------------------+--------------------------------------+

Выполните подготовительные шаги, описанные выше, кроме последнего (без ssh-ключа).

При создании сервера укажите эту сеть в качестве первого интерфейса.

Также можно задать пароль с помощью ключа --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=<ваш пароль> \
 <имя сервера>

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

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

openstack volume list --long

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

openstack server add volume <имя сервера> <id диска>

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

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

openstack floating ip list

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

openstack server add floating ip <имя сервера> <адрес>

Через CLI можно выделить ещё один адрес командой:

openstack floating ip create external-network

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

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

openstack server list

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

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

openstack server reboot <имя сервера>

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

openstack server reboot --hard <имя сервера>

В параметре <имя сервера> может быть использовано как само имя сервера, так и его ID.

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

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

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

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

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

openstack network create <имя сети>

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

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

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

openstack subnet create \
 --network <имя сети> \
 --subnet-range 192.168.127.0/24 \
 <имя подсети>

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

openstack port create \
 --network <имя сети> \
 <имя порта>

Подключаем порт к серверу:

openstack server add port [-h] <имя сервера> <имя порта>