Встановлення, конфігурування та запуск DevStack від 'А' до 'Я'

Опис DevStack

Призначення DevStack — надати набір інструментів, використовуваних для установки головних сервісів OS з вихідних, необхідних для розробки і тестування. DevStack так само показує і описує приклади конфігурацій і запусків сервісів, а також використання клієнта командного рядка (CLI).

wiki.openstack.org/wiki/DevStack


Словничок:
Інстанси (instance) — віртуальна машина, створена за допомогою інструментів DevStack.

Підготовка до установки

Для установки DevStack бажано спочатку створити користувача з правами root:

sudo useradd -G sudo -m -U -s /bin/bash -p stack stack

Тепер перемикаємося під щойно створеного користувача і викачуємо DevStack з репозиторію:

su stack
cd ~
git clone https://github.com/openstack-dev/devstack.git

Якщо у Git ще не встановлений, поставимо його командою

sudo apt-get install git -y

Трохи про версіях DevStack. Всього на момент написання статті для скачування було доступно чотири стабільних релізу:

  • -b stable/kilo
  • -b stable/liberty
  • -b stable/mitaka
  • -b stable/master
Найбільш свіжі з яких master і mitaka. Однак якщо не вказувати скачуваний бранч, то выкачается остання версія DevStack з репозиторію (HEAD), яка може містити помилки.

Установка

Після того, як обрана версія буде викачана на диск, в кореневому каталозі користувача stack з'явиться директорія devstack:

[email protected]:$ls
devstack

Перейдемо в нову директорію і створимо в ній файл local.conf:

[email protected]:$cd devstack
touch local.conf

Цей файл буде містити конфігурацію, що дозволяє нам працювати з DevStack. Всі параметри конфігурації повинні бути описані в секції [[local|localrc]]:

nano local.conf
[[local|localrc]]

Для того, щоб не вводити паролі (і не забути, що вводили) в процесі установки, задамо паролі для використовуваних сервісів:

############################################################
# Customize the following HOST_IP based on your installation
############################################################
ADMIN_PASSWORD=admin # Пароль від Horizon & Keystone
MYSQL_PASSWORD=admin
RABBIT_PASSWORD=admin
SERVICE_PASSWORD=admin
SERVICE_TOKEN=admin

а також IP-адресу машини, на якій буде встановлюватися DevStack:

HOST_IP=10.0.2.15

Взагалі в DevStack використовуються два типи мереж: PUBLIC і PRIVATE, у яких використовуються різні типи адрес (floating і fixed відповідно). Якщо коротко, то Floating-адреси використовуються для доступу до створеного инстансу із зовнішньої мережі. При цьому сам інстанси нічого про нього не знає, і вся маршрутизація трафіку здійснюється засобами DevStack. Fixed адреси використовуються для роботи всередині віртуальної мережі (детальніше здесь).

Отже, спочатку додамо секцію, що відповідає за розподіл floating-адрес:

#PUBLIC NETWORK CONFIGURATION
Q_USE_PROVIDERNET_FOR_PUBLIC=False
FLOATING_RANGE=10.0.2.0/24
Q_FLOATING_ALLOCATION_POOL="start=10.0.2.150,end=10.0.2.201"
PUBLIC_NETWORK_NAME=external
PUBLIC_NETWORK_GATEWAY=10.0.2.1
PUBLIC_PHYSICAL_NETWORK=public
# Required for l3-agent to connect to external-network-bridge
PUBLIC_BRIDGE=br-ext

І секцію для fixed-адрес:

#PRIVATE NETWORK CONFIGURATION
NETWORK_GATEWAY=${NETWORK_GATEWAY:-15.0.0.1}
FIXED_RANGE=${FIXED_RANGE:-15.0.0.0/24}

Зберігаємо файл local.conf і запускаємо DevStack:

./stack.sh

Якщо все зроблено правильно, то в результаті побачимо таку картину:

This is your host IP address: 10.0.2.15
This is your host IPv6 address: ::1
Horizon is now available at http://10.0.2.15/dashboard
Keystone is at serving http://10.0.2.15/identity/
The default users are: admin and demo
The password: admin

Налаштування DevStack

DevStack надає ряд інструментів, які дозволяють переглядати і конфігурувати систему в широких діапазонах. Вже зараз можна зайти на WEB-сервер HORIZON, і, використовуючи графічний інтерфейс, запустити інстанси в потрібній конфігурації. При цьому для запуску буде доступна всього одна операційна система CirrOS в мінімальному наповненні.

Якщо ви хочете запустити щось більш суттєве, потрібна більш тонка настройка, яка і описана нижче. Щоб працювати з DevStack, треба ввести команду:

. openrc admin admin

Налаштування мережі
Для того, щоб подивитися доступні конфігурації мереж, треба зробити наступне:

[email protected]:~/devstack$ nova secgroup-list
+----+---------+-------------+
| Id | Name | Description |
+----+---------+-------------+
| 1 | default | default |
+----+---------+-------------+

Nova — це менеджер віртуальних машин, який так само відповідає за працездатність віртуальної мережі. Взагалі в DevStack можна отримати одну і ту ж (а точніше, різного рівня деталізації) інформацію від різних служб, що буде показано нижче.

В даному випадку ми отримали список доступних груп, що складається лише з одного елемента. Надалі ми будемо працювати саме з цим елементом, оскільки деякі інструменти, наприклад, Rally, працюють тільки з профілями за замовчуванням.

Кожна мережева група складається з правил, які визначають поведінку цієї групи. Щоб подивитися, які правила встановлені у групі default, треба ввести команду secgroup-list-rules:

[email protected]:~/devstack$ nova secgroup-list-rules default
+-------------+-----------+---------+----------+--------------+
| IP Protocol | From Port | To Port | IP Range | Source Group |
+-------------+-----------+---------+----------+--------------+
+-------------+-----------+---------+----------+--------------+

Як бачимо, в даний момент список правил порожній. У такому вигляді наші инстансы не зможуть спілкуватися із зовнішнім світом. Для того, щоб виправити ситуацію, треба додати кілька правил, а саме:

  1. Правило для доступу SSH
  2. Правило для протоколу ICMP (забезпечує роботу команди ping)
  3. Правило для доступу до інтернет-трафіку по протоколу http
  4. Правило для доступу до інтернет-трафіку по протоколу https
Правила додаються по шаблону: secgroup-add-rule <group_name> <procol_name> <port_from> <port_to>.

[email protected]:~/devstack$ nova secgroup-add-rule default tcp 22 22 0.0.0.0/0
+-------------+-----------+---------+-----------+--------------+
| IP Protocol | From Port | To Port | IP Range | Source Group |
+-------------+-----------+---------+-----------+--------------+
| tcp| 22 | 22 | 0.0.0.0/0 | |
+-------------+-----------+---------+-----------+--------------+
[email protected]:~/devstack$ nova secgroup-add-rule default icmp -1 255 0.0.0.0/0
+-------------+-----------+---------+-----------+--------------+
| IP Protocol | From Port | To Port | IP Range | Source Group |
+-------------+-----------+---------+-----------+--------------+
| icmp| -1 | 255 | 0.0.0.0/0 | |
+-------------+-----------+---------+-----------+--------------+
[email protected]:~/devstack$ nova secgroup-add-rule default tcp 80 80 0.0.0.0/0
+-------------+-----------+---------+-----------+--------------+
| IP Protocol | From Port | To Port | IP Range | Source Group |
+-------------+-----------+---------+-----------+--------------+
| tcp| 80 | 80 | 0.0.0.0/0 | |
+-------------+-----------+---------+-----------+--------------+
[email protected]:~/devstack$ nova secgroup-add-rule default tcp 443 443 0.0.0.0/0
+-------------+-----------+---------+-----------+--------------+
| IP Protocol | From Port | To Port | IP Range | Source Group |
+-------------+-----------+---------+-----------+--------------+
| tcp| 443 | 443 | 0.0.0.0/0 | |
+-------------+-----------+---------+-----------+--------------+

Перевіримо, що вийшло:

nova secgroup-list-rules default
+-------------+-----------+---------+-----------+--------------+
| IP Protocol | From Port | To Port | IP Range | Source Group |
+-------------+-----------+---------+-----------+--------------+
| tcp| 22 | 22 | 0.0.0.0/0 | |
| icmp| -1 | 255 | 0.0.0.0/0 | |
| tcp| 80 | 80 | 0.0.0.0/0 | |
| tcp| 443 | 443 | 0.0.0.0/0 | |
+-------------+-----------+---------+-----------+--------------+

Створення ключа SSH
Для роботи з операційними системами, відмінними від CirrOS, нам знадобиться ключ шифрування SSH. Спеціально для цих цілей DevStack надає всю необхідну функціональність. Якщо ввести команду keypair-list, то ми побачимо таблицю всіх доступних нам ключів:

[email protected]:~/devstack$ nova keypair-list
+-------+------+-------------------------------------------------+
| Name | Type | Fingerprint |
+-------+------+-------------------------------------------------+
+-------+------+-------------------------------------------------+

Згенерувати так потрібний нам ключ можна за допомогою команди ssh-keygen:

$ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/stack/.ssh/id_rsa): cloud.key

Після створення ключа у нас в поточній директорії з'являться два файлу: cloud.key і cloud.key.pub. Для файлу cloud.key треба відразу виставити коректні права:

$sudo chmod 600 cloud.key

Тепер треба додати створений ключ до списку:

[email protected]:~/devstack$ nova keypair-add --pub-key cloud.key.pub cloud
[email protected]:~/devstack$ nova keypair-list
+-------+------+-------------------------------------------------+
| Name | Type | Fingerprint |
+-------+------+-------------------------------------------------+
| cloud | ssh | 6f:a7:c2:11:f0:e9:9c:77:43:fc:61:37:b4:e5:f9:b2 |
+-------+------+-------------------------------------------------+

Додавання образу ОС через glance
Тепер саме час подивитися операційні системи, які нам доступні в установці за замовчуванням. Зробити це можна за допомогою команди image-list:

$nova image-list
+--------------------------------------+---------------------------------+--------+--------+
| ID | Name | Status | Server |
+--------------------------------------+---------------------------------+--------+--------+
| cc5fedc0-8331-4cfe-b2f0-27f264a81dde | cirros-0.3.4-x86_64-uec | ACTIVE | |
| bc0d3c78-d48b-4b41-872d-5106e3392a3c | cirros-0.3.4-x86_64-uec-kernel | ACTIVE | |
| 26bfbc17-1ea9-4a50-9075-5064a2b3d0ad | cirros-0.3.4-x86_64-uec-ramdisk | ACTIVE | |
+--------------------------------------+---------------------------------+--------+--------+

Як і було сказано вище, за замовчуванням нам доступна тільки одна операційна система. За керування доступними образами відповідає окремий інструмент glance:

$glance image-list
+--------------------------------------+---------------------------------+
| ID | Name |
+--------------------------------------+---------------------------------+
| cc5fedc0-8331-4cfe-b2f0-27f264a81dde | cirros-0.3.4-x86_64-uec |
| bc0d3c78-d48b-4b41-872d-5106e3392a3c | cirros-0.3.4-x86_64-uec-kernel |
| 26bfbc17-1ea9-4a50-9075-5064a2b3d0ad | cirros-0.3.4-x86_64-uec-ramdisk |
+--------------------------------------+---------------------------------+

Як видно, висновки команди image-list практично ідентичні як у glance, так і у nova, за тим винятком, що nova надає додаткову інформацію.

В якості робочої ОС будемо використовувати Ubuntu 15.10, яку можна взяти з cloud-images.ubuntu.com/vivid/current. Повний список підтримуваних ОС можна подивитися тут: docs.openstack.org/image-guide/obtain-images.html. Там же йдеться, що в деяких (конкретно в нашому випадку нам знадобиться ключ SSH для того, щоб залогуватися на створений інстанси.

Спочатку треба викачати образ диска з мережі:

[email protected]:~/devstack$ wget https://cloud-images.ubuntu.com/vivid/current/vivid-server-cloudimg-amd64-disk1.img

Після чого можна залити новий образ на сервер glance:

[email protected]:~/devstack$ glance image-create --name ubuntu_vivid --visibility public --container-format ami --file vivid-server-cloudimg-amd64-disk1.img --disk-format ami

Де name — ім'я образу в БД, яке буде виводитися по командам nova image-list або glance image-list.

Запуск инстанса
Тепер все готово до запуску нашого першого инстанса. Для цього скористаємося командою openstack server create:

[email protected]:~/devstack$ openstack server create srv1 --flavor=m1.small --image=ubuntu --key-name=cloud
+--------------------------------------+-----------------------------------------------+
| Field | Value |
+--------------------------------------+-----------------------------------------------+
| OS-DCF:diskConfig | MANUAL |
| OS-EXT-AZ:availability_zone | |
| OS-EXT-SRV-ATTR:host | None |
| OS-EXT-SRV-ATTR:hypervisor_hostname | None |
| OS-EXT-SRV-ATTR:instance_name | instance-00000001 |
| 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 | |
| adminPass | SJZYQRUgoo3k |
| config_drive | |
| created | 2016-06-06T06:50:41Z |
| flavor | m1.small (2) |
| hostId | |
| id | 706e906a-eb62-4927-afdf-e9a30b29c17f |
| image | ubuntu (beb392b7-de7f-4fef-9afa-2cc5c2a38a13) |
| key_name | cloud |
| name | srv1 |
| os-extended-volumes:volumes_attached | [] |
| progress | 0 |
| project_id | 7784247e5055485bb43c9f3311332d9a |
| properties | |
| security_groups | [{u 'name': u 'default'}] |
| status | BUILD |
| updated | 2016-06-06T06:50:41Z |
| user_id | e54b731c7e1f40f4a5ad16d64be383bd |
+--------------------------------------+-----------------------------------------------+

Де srv1 — ім'я нового инстанса, m1.small — H/W конфігурація инстанса, ubuntu — ім'я образу, і cloud — ім'я пари ключів SSH у внутрішній таблиці DevStack.

Оскільки ми намагаємося запустити повноцінну ОС, то нам треба виділити під неї відповідні ресурси, тому конфігурація m1.small є мінімальною. Для инстанса з CirrOS досить конфігурації m1.tiny. Різницю в конфігураціях можна подивитися командою flavor-list:

[email protected]:~/devstack$ nova flavor-list
+----+-----------+-----------+------+-----------+------+-------+-------------+-----------+
| ID | Name | Memory_MB | Disk | Ephemeral | Swap | VCPUs | RXTX_Factor | Is_Public |
+----+-----------+-----------+------+-----------+------+-------+-------------+-----------+
| 1 | m1.tiny| 512 | 1 | 0 | | 1 | 1.0 | True |
| 2 | m1.small| 2048 | 20 | 0 | | 1 | 1.0 | True |
| 3 | m1.medium| 4096 | 40 | 0 | | 2 | 1.0 | True |
| 4 | m1.large| 8192 | 80 | 0 | | 4 | 1.0 | True |
+----+-----------+-----------+------+-----------+------+-------+-------------+-----------+

Якщо ви встановлювали DevStack з HEAD, то можливо будуть доступні додаткові конфігурації. Наш інстанси буде готовий до роботи, коли його статус зміниться стану BUILD ACTIVE:

[email protected]:~/devstack$ nova list
+--------------------------------------+------+--------+------------+-------------+------------------+
| ID | Name | Status | Task State | State Power | Networks |
+--------------------------------------+------+--------+------------+-------------+------------------+
| 706e906a-eb62-4927-afdf-e9a30b29c17f | srv1 | ACTIVE | - | Running | private=15.0.0.2 |
+--------------------------------------+------+--------+------------+-------------+------------------+

Як видно, зараз у нашого инстанса є тільки IP-адреса діапазону fixed-адрес. Однак, якщо все зроблено правильно, ми можемо виконати команду ping:

[email protected]:~/devstack$ ping 15.0.0.2
PING 15.0.0.2 (15.0.0.2) 56(84) bytes of data.
64 bytes from 15.0.0.2: icmp_seq=1 ttl=64 time=5.31 ms
64 bytes from 15.0.0.2: icmp_seq=2 ttl=64 time=0.470 ms
64 bytes from 15.0.0.2: icmp_seq=3 ttl=64 time=0.409 ms

І спробувати залогуватися по SSH, використовуючи в якості імені користувача ubuntu (чомусь написано тут):

[email protected]:~/devstack$ ssh [email protected]
The authenticity of host '15.0.0.2 (15.0.0.2) can't be established.
ED25519 key fingerprint is 0e:56:2d:b0:d7:5f:27:bc:cd:39:ff:85:e6:84:a4:ef.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '15.0.0.2' (ED25519) to the list of known hosts.
Permission denied (publickey).

Підтвердивши створення ключа, отримуємо відмову у доступі. Те ж саме буде, якщо не вказувати параметр --key-name при створенні инстанса. Для того, щоб все-таки потрапити на наш інстанси, використовуємо ключ, створений раніше:

[email protected]:~/devstack$ ssh -i cloud.key [email protected]
Welcome to Ubuntu 15.04 (GNU/Linux 4.2.0-36-generic x86_64)
...
[email protected]:~$ pwd
/home/ubuntu

Додавання Floating-IP
Подивитися всі доступні на даний момент floating-адреси можна так:

[email protected]:~/devstack$ nova floating-ip-list
+----+----+-----------+----------+------+
| Id | IP | Server Id | Fixed IP | Pool |
+----+----+-----------+----------+------+
+----+----+-----------+----------+------+

Як і варто було очікувати, він порожній. Створимо парочку адрес:

[email protected]:~/devstack$ nova floating-ip-create
+----+----------+-----------+----------+----------+
| Id | IP | Server Id | Fixed IP | Pool |
+----+----------+-----------+----------+----------+
| 1 | 10.0.2.1 | - | - | external |
+----+----------+-----------+----------+----------+
[email protected]:~/devstack$ nova floating-ip-create
+----+----------+-----------+----------+----------+
| Id | IP | Server Id | Fixed IP | Pool |
+----+----------+-----------+----------+----------+
| 2 | 10.0.2.2 | - | - | external |
+----+----------+-----------+----------+----------+
[email protected]:~/devstack$ nova floating-ip-list
+----+----------+-----------+----------+----------+
| Id | IP | Server Id | Fixed IP | Pool |
+----+----------+-----------+----------+----------+
| 1 | 10.0.2.1 | - | - | external |
| 2 | 10.0.2.2 | - | - | external |
+----+----------+-----------+----------+----------+

І додамо один з цих адрес до нашого сервера:

[email protected]:~/devstack$ nova add-floating-ip srv1 10.0.2.1
[email protected]:~/devstack$ nova list 
+--------------------------------------+------+--------+------------+-------------+----------------------------+
| ID | Name | Status | Task State | State Power | Networks |
+--------------------------------------+------+--------+------------+-------------+----------------------------+
| 706e906a-eb62-4927-afdf-e9a30b29c17f | srv1 | ACTIVE | - | Running | private=15.0.0.2, 10.0.2.1 |
+--------------------------------------+------+--------+------------+-------------+----------------------------+

Як бачимо, у инстанса srv1 з'явився додатковий адреса, за якою так само можна виконати команди ping і ssh (для нового IP потрібно створити новий ключ):

[email protected]:~/devstack$ ping 10.0.2.1
PING 10.0.2.1 (10.0.2.1) 56(84) bytes of data.
64 bytes from 10.0.2.1: icmp_seq=1 ttl=64 time=1.86 ms
64 bytes from 10.0.2.1: icmp_seq=2 ttl=64 time=0.410 ms
^C
--- 10.0.2.1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 0.410/1.136/1.863/0.727 ms
[email protected]:~/devstack$ ssh -i cloud.key [email protected]
The authenticity of host '10.0.2.1 (10.0.2.1) can't be established.
ED25519 key fingerprint is 0e:56:2d:b0:d7:5f:27:bc:cd:39:ff:85:e6:84:a4:ef.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '10.0.2.1' (ED25519) to the list of known hosts.
...
[email protected]:~$

Щоб видалити floating-ip у инстанса, треба виконати команду remove-floating-ip (при цьому сам IP залишається в списку доступних floating-адрес):

[email protected]:~/devstack$ nova remove-floating-ip srv1 10.0.2.1
[email protected]:~/devstack$ nova list
+--------------------------------------+------+--------+------------+-------------+------------------+
| ID | Name | Status | Task State | State Power | Networks |
+--------------------------------------+------+--------+------------+-------------+------------------+
| 706e906a-eb62-4927-afdf-e9a30b29c17f | srv1 | ACTIVE | - | Running | private=15.0.0.2 |
+--------------------------------------+------+--------+------------+-------------+------------------+

Висновок

У статті детально розглянуто процес установки, настройки і запуску віртуальних машин (инстансов) з використанням пакету віртуалізації DevStack. Були розглянуті основні команди, які використовуються при роботі з DevStack з CLI. Варто сказати, що практично всі кроки, описані в статті, можна виконати через графічний інтерфейс, званий neutron. Дякую за коментарі і удачі!

На замітку

Повторний запуск DevStack після перезавантаження системи. Спочатку видалимо все, що відносилося до попередньої сесії:

[email protected]:~/devstack$ ./unstack.sh
[email protected]:~/devstack$ ./clean.sh

включаючи те, що зазвичай не видаляється:

[email protected]:~/devstack$ sudo rm -rf /opt/stack/*

Після чого перезапускаємо DevStack:

[email protected]:~/devstack$ ./stack.sh

Можливі проблеми
Симптом
При спробі запустити команду під sudo з'являється повідомлення:
sudo: unable to resolve host
Можливе рішення
Виконати команду:

cat /etc/hostname

Результат скопіювати в файл /etc/hosts в перший рядок:

nano /etc/hosts

Видалення збережених ключів
Симптом
[email protected]:~/devstack$ ssh -i cloud.key [email protected]
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ED25519 key sent by the remote host is
c9:8e:70:27:1d:3b:c8:9c:b3:db:df:c2:a4:07:92:a1.
Please contact your system administrator.
Add correct host key in /home/stack/.ssh/known_hosts to get rid of this message.
Offending ED25519 key in /home/stack/.ssh/known_hosts:2
remove with: ssh-keygen -f "/home/stack/.ssh/known_hosts" -R 15.0.0.3
ED25519 host key for 15.0.0.3 has changed and you have requested strict checking.
Host key verification failed.

Можливе рішення
Як варіант видалити файл /home/stack/.ssh/known_hosts:

[email protected]:~/devstack$ sudo rm /home/stack/.ssh/known_hosts

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.