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

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

Установка ПО

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

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

Использование docker-контейнера с утилитами

Содержимое Dockerfile:

FROM alpine:3.11

RUN apk add --update --no-cache python3 py3-pip git python3-dev libffi libffi-dev \
    openssl openssl-dev build-base iputils bash curl linux-headers && \
    apk add py3-cffi py3-tz py3-pbr py3-setuptools && \
    pip3 install -UI git+https://github.com/openstack/python-openstackclient.git@stable/ussuri \
                     git+https://github.com/openstack/python-heatclient.git@stable/ussuri \
                     git+https://github.com/openstack/python-octaviaclient.git@stable/ussuri \
                     git+https://github.com/openstack/python-magnumclient.git@stable/ussuri \
    && apk del build-base linux-headers python3-dev libffi-dev openssl-dev && rm -rf /var/cache

CMD ["sh"]

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

docker build -t osc:train .

Запуститесь из каталога, где лежит rc.sh файл:

docker run -ti --rm -v $(PWD):/workspace osc:train

После этого можно работать с утилитами в контейнере, перед запуском утилит выполните из папки /workspace:

source rc.sh

Использование обычных утилит под debian 9/ 10 или ubuntu 16/ 18/ 20 (для python3)

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

CentOS

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

Fedora

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

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

Образ сервера

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

openstack image list --public

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

+--------------------------------------+--------------------------------------------+--------+
| ID                                   | Name                                       | Status |
+--------------------------------------+--------------------------------------------+--------+
| 771635f4-7604-4c1c-abd6-8934237d8816 | CentOS 7 64-bit                            | active |
| 0cd42521-8146-4488-967b-da6f6d15f156 | CentOS 7 Minimal 64-bit                    | active |
| ad82e097-d786-4201-a637-5a50abe95483 | CentOS 8 64-bit                            | active |
| 3b7d0b97-e808-45e4-877f-4b8801563497 | CoreOS                                     | active |
| cf7e6a23-bd30-4cad-98e5-88d0ede05954 | Debian 10 (Buster) 64-bit                  | active |
| 82ed4d6d-ca96-4736-beb3-3ad56f3c3a62 | Debian 8 (Jessie) 64-bit                   | active |
| 145e6700-8f6b-40ac-91d4-102d156aa9d0 | Debian 9 (Stretch) 64-bit                  | active |
| cf67b80c-9c08-439e-97f3-4c12bbc25feb | Fedora 28 64-bit                           | active |
| 37221cd3-f636-40e8-9624-f493a0e148df | Fedora 29 64-bit                           | active |
| 2b87f642-b581-43c1-9b84-46969d6199b6 | Fedora 30 64-bit                           | active |
| 694f5167-67d1-426f-808b-6606ebc14566 | Fedora 31 64-bit                           | active |
| 05372e42-e654-4349-865d-cd941f257e65 | Fedora Atomic 27 64-bit                    | active |
| e95f07cd-fcce-4813-88ca-50dfc6a60a66 | Fedora Atomic 28 64-bit                    | active |
| d0ebf434-cb62-4168-a3f1-1ea17a0a586a | Fedora Atomic 29 64-bit                    | active |
| bd6035e9-6813-44cf-b121-7a03b72a6f8f | RancherOS                                  | active |
| 1da506f9-1afa-4258-8049-9adc6988b5cb | Ubuntu 16.04 LTS 64-bit                    | active |
| 266e724e-d6a8-4b6e-86b8-9d634abe057b | Ubuntu 16.04 LTS GPU Drivers 64-bit        | active |
| c5c8d3cc-9a2c-48ce-adfe-93e066e9ae6e | Ubuntu 18.04 LTS 64-bit                    | active |
| 7d93991b-aa64-41de-a728-8d08018553cf | Ubuntu 18.04 LTS GPU Drivers 64-bit        | active |
| ca311e9f-943c-4ebb-849c-002b04962b4c | Ubuntu 20.04 LTS 64-bit                    | active |
| da041a03-7ae8-405f-bcd7-072f9fede164 | Windows Server 2012 R2 Standard            | active |
| d8735845-de63-4202-983e-c618888ccd08 | Windows Server 2016 Standard               | active |
| 568685fa-573b-48f5-971a-8162c9016c19 | Windows Server 2016 Standard (GPU Drivers) | active |
| 87bf1e26-5cb3-4d89-93eb-c094e1bffa62 | Windows Server 2019 Standard Legacy BIOS   | active |
| 8cd12e23-a228-4dbb-864f-319e80a8dd44 | blank-simple-image                         | active |
| bac517e3-6b48-47cf-8135-a3189785e539 | selectel-rescue-initrd                     | active |
| 1e3206a6-9e37-4d69-9733-855ade507782 | selectel-rescue-kernel                     | active |
+--------------------------------------+--------------------------------------------+--------+

Для просмотра информации об образе по UUID введите:

openstack image show <UUID image>

Для просмотра информации об образе по имени введите:

openstack image show <image name>

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

Доступные зоны

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

openstack availability zone list --compute

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

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

Флейвор сервера

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

openstack flavor create --private --vcpus <num-cpu> --ram <size-mb> --disk <size-gb> <flavor-name>

Имя флейвора обязательно должно быть уникальным и не совпадать с другими именами (в том числе с именами удалённых флейворов).

Будет сгенерирован 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 нужно скопировать — он понадобится при создании сервера.

Просмотр списка флейворов

Предопределённые флейворы фиксированной конфигурации можно просмотреть с помощью команды:

openstack flavor list --public

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

+-------+------------------+--------+------+-----------+-------+-----------+
| ID    | Name             |    RAM | Disk | Ephemeral | VCPUs | Is Public |
+-------+------------------+--------+------+-----------+-------+-----------+
| 1     | m1.tiny          |    512 |    0 |         0 |     1 | True      |
| 2     | m1.small         |   2048 |    0 |         0 |     1 | True      |
| 3     | m1.medium        |   4096 |    0 |         0 |     2 | True      |
| 4     | m1.large         |   8192 |    0 |         0 |     4 | True      |
| 5     | m1.xlarge        |  16384 |    0 |         0 |     8 | True      |
| 1011  | SL1.1-1024       |   1024 |    0 |         0 |     1 | True      |
| 1012  | SL1.1-2048       |   2048 |    0 |         0 |     1 | True      |
| 1013  | SL1.2-4096       |   4096 |    0 |         0 |     2 | True      |
| 1014  | SL1.2-8192       |   8192 |    0 |         0 |     2 | True      |
| 1015  | SL1.4-16384      |  16384 |    0 |         0 |     4 | True      |
| 1016  | SL1.6-32768      |  32768 |    0 |         0 |     6 | True      |
| 1017  | SL1.8-32768      |  32768 |    0 |         0 |     8 | True      |
| 1311  | SL1.1-1024-8     |   1024 |    8 |         0 |     1 | True      |
| 1312  | SL1.1-2048-16    |   2048 |   16 |         0 |     1 | True      |
| 1313  | SL1.2-4096-32    |   4096 |   32 |         0 |     2 | True      |
| 1314  | SL1.2-8192-64    |   8192 |   64 |         0 |     2 | True      |
| 1315  | SL1.4-16384-128  |  16384 |  128 |         0 |     4 | True      |
| 1316  | SL1.6-32768-256  |  32768 |  256 |         0 |     6 | True      |
| 1317  | SL1.8-32768-384  |  32768 |  384 |         0 |     8 | True      |

Флейворы с именем вида SL1.XX — Standard Line. Флейворы с именем вида CPU1.XX — CPU Line. Флейворы с именем вида RAM1.XX — Memory Line.

Подробнее о фиксированных конфигурациях облачных серверов.

Примечание: Флейворы вида m1.XX — это базовые из примеров openstack, аналогичны серверам гибкой конфигурации в панели управления.

SSH-ключ

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

openstack keypair create <key> --private-key <file>
chmod 600 <file>

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

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

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

openstack keypair create <key> --pub-key <Path to Public 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.ru-1a   |   True   |
| c7f1cda0-ebcb-4711-8f50-e13e6e4fc9eb |   basic.ru-1b   |   True   |
| ea11f5ad-baeb-461e-9769-47facee5dbcd |   basic.ru-1a   |   True   |
+--------------------------------------+-----------------+-----------+

Для дисков серверов следует использовать типы fast, basic и universal в нужной зоне вида <тип диска>.<имя зоны>, например, fast.ru-2b.

Для создания диска введите:

openstack volume create \
 --availability-zone <name> \
 --type <type>.<name> \ 
 --size <size-Gb> \
 --image <ID image> \
 <volume name>

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

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

Подробнее об операциях с дисками читайте в статье Управление дисками.

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

Создание сервера на базе Linux с загрузочным сетевым диском (один диск)

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

  1. Создайте сетевой диск нужного размера из образа (этот диск автоматически будет назначен загрузочным).
  2. Создайте сервер из этого диска.

Пример создания сетевого диска:

openstack volume create --image 'Ubuntu 18.04 LTS 64-bit' --size 5 --type fast.ru-2b  BOOT_VOLUME_NAME

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

+---------------------+--------------------------------------+
| Field               | Value                                |
+---------------------+--------------------------------------+
| attachments         | []                                   |
| availability_zone   | ru-2b                                |
| bootable            | false                                |
| consistencygroup_id | None                                 |
| created_at          | 2020-04-28T03:29:57.000000           |
| description         | None                                 |
| encrypted           | False                                |
| id                  | 3b447abb-a4ff-4f02-baac-a6f7a02bd21e |
| multiattach         | False                                |
| name                | BИмяЗагрузочногоДиска                |
| properties          |                                      |
| replication_status  | None                                 |
| size                | 5                                    |
| snapshot_id         | None                                 |
| source_volid        | None                                 |
| status              | creating                             |
| type                | fast.ru-2b                           |
| updated_at          | None                                 |
| user_id             | d38f8bea67f94083803c5066f458664a     |
+---------------------+--------------------------------------+

Пример создания сервера из сетевого диска:

openstack server create \
          --availability-zone ru-2b \
          --flavor SL1.1-1024 \
          --nic net-id=nat \
          --volume BOOT_VOLUME_NAME \
    test-srv-with-boot-net-volume

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

+-----------------------------+--------------------------------------+
| Field                       | Value                                |
+-----------------------------+--------------------------------------+
| OS-DCF:diskConfig           | MANUAL                               |
| OS-EXT-AZ:availability_zone | ru-2b                                |
| OS-EXT-STS:power_state      | NOSTATE                              |
| OS-EXT-STS:task_state       | scheduling                           |
| OS-EXT-STS:vm_state         | building                             |
| OS-SRV-USG:launched_at      | None                                 |
| OS-SRV-USG:terminated_at    | None                                 |
| accessIPv4                  |                                      |
| accessIPv6                  |                                      |
| addresses                   |                                      |
| config_drive                |                                      |
| created                     | 2020-04-28T03:33:32Z                 |
| flavor                      | SL1.1-1024 (1011)                    |
| hostId                      |                                      |
| id                          | 112f9304-4a70-428f-b588-05d61436f9d8 |
| image                       |                                      |
| key_name                    | None                                 |
| name                        | test-srv-with-boot-net-volume        |
| progress                    | 0                                    |
| project_id                  | 04d92ef9fe254caaa90d6ecd2849c1cf     |
| properties                  |                                      |
| security_groups             | name='default'                       |
| status                      | BUILD                                |
| updated                     | 2020-04-28T03:33:31Z                 |
| user_data                   | None                                 |
| user_id                     | d38f8bea67f94083803c5066f458664a     |
| volumes_attached            |                                      |
+-----------------------------+--------------------------------------+

Создание облачного сервера на базе Linux с локальным диском

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

openstack server create \
>  --availability-zone ru-2b \
>  --flavor SL1.1-1024-8 \
>  --nic net-id=nat \
>  --image 'Ubuntu 18.04 LTS 64-bit' \
>  test-srv-with-boot-local
+-----------------------------+----------------------------------------------------------------+
| Field                       | Value                                                          |
+-----------------------------+----------------------------------------------------------------+
| OS-DCF:diskConfig           | MANUAL                                                         |
| OS-EXT-AZ:availability_zone | ru-2b                                                          |
| OS-EXT-STS:power_state      | NOSTATE                                                        |
| OS-EXT-STS:task_state       | scheduling                                                     |
| OS-EXT-STS:vm_state         | building                                                       |
| OS-SRV-USG:launched_at      | None                                                           |
| OS-SRV-USG:terminated_at    | None                                                           |
| accessIPv4                  |                                                                |
| accessIPv6                  |                                                                |
| addresses                   |                                                                |
| config_drive                |                                                                |
| created                     | 2020-04-28T03:34:29Z                                           |
| flavor                      | SL1.1-1024-8 (1311)                                            |
| hostId                      |                                                                |
| id                          | 980f8c19-3974-466e-803e-9239c8a8a14f                           |
| image                       | Ubuntu 18.04 LTS 64-bit (c5c8d3cc-9a2c-48ce-adfe-93e066e9ae6e) |
| key_name                    | None                                                           |
| name                        | test-srv-with-boot-local                                       |
| progress                    | 0                                                              |
| project_id                  | 04d92ef9fe254caaa90d6ecd2849c1cf                               |
| properties                  |                                                                |
| security_groups             | name='default'                                                 |
| status                      | BUILD                                                          |
| updated                     | 2020-04-28T03:34:29Z                                           |
| user_data                   | None                                                           |
| user_id                     | d38f8bea67f94083803c5066f458664a                               |
| volumes_attached            |                                                                |
+-----------------------------+----------------------------------------------------------------+

Создание сервера на базе Linux с загрузочным сетевым диском с дополнительным сетевым диском

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

  1. Создайте сетевой диск нужного размера из образа (этот диск автоматически будет назначен загрузочным).
  2. Создайте пустой сетевой диск нужного размера.
  3. Создайте облачный сервер из этого диска.

Пример:

openstack volume create --image 'Ubuntu 18.04 LTS 64-bit' --size 5 --type fast.ru-2b  BOOT_VOLUME_NAME_linux

openstack volume create --size 20 --type fast.ru-2b ADD_VOLUME_1

openstack server create \
 --availability-zone ru-2b \
 --flavor SL1.1-1024 \
 --nic net-id=nat \
 --block-device-mapping vdb=ADD_VOLUME_1 \
 --volume BOOT_VOLUME_NAME_linux \
 test-srv-with-boot-net-volume-add-volume

Создание сервера на базе Linux с локальным диском с дополнительным сетевым диском

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

  1. Создайте пустой сетевой диск нужного размера.
  2. Создайте сервер из флейвора с указанным размером локального диска и укажите из какого образа его нужно создать.

Пример:

openstack volume create --size 20 --type fast.ru-2b ADD_VOLUME_2

openstack server create \
 --availability-zone ru-2b \
 --flavor SL1.1-1024-8 \
 --nic net-id=nat \
 --block-device-mapping vdb=ADD_VOLUME_2 \
 --image 'Ubuntu 18.04 LTS 64-bit' \
 test-srv-with-boot-local-add-volume

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

Создание сервера на базе Windows с сетевым диском

Для создания облачного сервера на базе Windows с сетевым диском:

openstack volume create --image 'Windows Server 2016 Standard' --size 32 --type fast.ru-2b  WIN_BOOT_VOLUME_NAME2

openstack server create \
 --availability-zone ru-2b \
 --flavor SL1.2-4096 \
 --nic net-id=nat \
 --nic net-id=license_windows_2016_standard \
 --property admin_pass='qwert' \
 --volume WIN_BOOT_VOLUME_NAME2 \
 test-win-with-boot-net-volume2

Создание сервера на базе Windows с локальным диском

Для создания облачного сервера на базе Windows с локальным диском:

openstack server create \
 --availability-zone ru-2b \
 --flavor SL1.2-4096-32 \
 --nic net-id=nat \
 --nic net-id=license_windows_2016_standard \
 --property admin_pass='qwert' \
 --image 'Windows Server 2016 Standard' \
 test-win-with-boot-local

Восстановление сети с лицензиями

При разворачивании сервера на базе Windows из собственного образа или при удалении лицензионной подсети восстановить ее можно следующим образом (перед этим необходимо выделить лицензии в проекте):

openstack  server add network test-srv-with-boot-net-volume-add-volume license_windows_2016_standard

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

Для просмотра доступных сетей:

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

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

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

openstack floating ip list

Для назначения ранее созданного в панели управления плавающего адреса облачному серверу:

openstack server add floating ip <Server> <IP address>

В параметре может быть использовано как само имя сервера, так и его ID. Через CLI можно выделить ещё один адрес командой:

openstack floating ip create external-network

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

Для просмотра полного списка серверов:

openstack server list

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

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

openstack server reboot <Server>

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

openstack server reboot --hard <Server>

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

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

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

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

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

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

openstack network create <network name>

В ответе будет выведена таблица с информацией о сети:

+----------------+--------------------------------------+
| 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 <network name> \
 --subnet-range <subnet-range> \
 <subnet name>

Для создания в сети порта:

openstack port create \
 --network <network name> \
 <port name>

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

openstack server add port [-h] <Server> <port name>