Przebudowa instancji z poziomu CLI

W niektórych przypadkach nie jest możliwe wprowadzenie zmian na istniejącej instancji i musi być ona przebudowana. Przykładowo, przebudowa jest wymagana jeśli chcemy zmienić typ dysku instancji (standard, fast, 1000iops, 6000iops). Innym zastosowaniem jest wykonanie klona instancji.

W pierwszej kolejności wykonujemy backup instancji i odtwarzamy go na nowym wolumenie. Istotne jest, żeby w tym przypadku użyć opcji backup, a nie snapshot – różnice między nimi zostały opisane w tym artykule.

$ openstack server list
+--------------------------------------+------+--------+-------------------------------------------------------------+-------+--------+
| ID                                   | Name | Status | Networks                                                    | Image | Flavor |
+--------------------------------------+------+--------+-------------------------------------------------------------+-------+--------+
| 75aaf580-bbe6-4887-8059-c1cf532345d2 | VM_1 | ACTIVE | siec-wewnetrzna-2=192.168.2.8; siec-wewnetrzna=192.168.1.13 |       | m2.c2  |
+--------------------------------------+------+--------+-------------------------------------------------------------+-------+--------+
$ openstack volume list
+--------------------------------------+------+--------+------+-------------------------------+
| ID                                   | Name | Status | Size | Attached to                   |
+--------------------------------------+------+--------+------+-------------------------------+
| ee6e6567-7466-43f9-a3f7-5e95c17eb336 |      | in-use | 3    | Attached to VM_1 on /dev/vda  |
+--------------------------------------+------+--------+------+-------------------------------+

Tworzymy backup podając ID wolumenu. Backup najlepiej jest wykonać na wyłączonej instancji, jeśli nie mamy takiej możliwości do polecenia dodajemy opcję --force:

$ openstack volume backup create ee6e6567-7466-43f9-a3f7-5e95c17eb336 --force
+-------+--------------------------------------+
| Field | Value                                |
+-------+--------------------------------------+
| id    | 4be9f898-0174-4d12-9226-f18159d28bf2 |
| name  | None                                 |
+-------+--------------------------------------+

Odtwarzamy backup na nowym wolumenie.

$ openstack volume create --size 3 --type 6000iops new_volume
+---------------------+--------------------------------------+
| Field               | Value                                |
+---------------------+--------------------------------------+
| attachments         | []                                   |
| availability_zone   | nova                                 |
| bootable            | false                                |
| consistencygroup_id | None                                 |
| created_at          | 2019-01-17T12:48:05.000000           |
| description         | None                                 |
| encrypted           | False                                |
| id                  | 391b6733-8610-4dc5-8913-f9af68f54f41 |
| multiattach         | False                                |
| name                | new_volume                           |
| properties          |                                      |
| replication_status  | None                                 |
| size                | 3                                    |
| snapshot_id         | None                                 |
| source_volid        | None                                 |
| status              | creating                             |
| type                | 6000iops                             |
| updated_at          | None                                 |
| user_id             | 780027...                            |
+---------------------+--------------------------------------+

Wykonujemy openstack volume backup restore <backup-id> <volume-id>

$ openstack volume backup restore 4be9f898-0174-4d12-9226-f18159d28bf2 391b6733-8610-4dc5-8913-f9af68f54f41

W tym kroku skupimy się na zgromadzeniu wszystkich informacji niezbędnych do stworzenia klona instancji.
Rozpoczynamy od samej instancji, wykonujemy openstack server show <id-instancji>:

openstack server show 75aaf580-bbe6-4887-8059-c1cf532345d2
+-----------------------------+-------------------------------------------------------------+
| Field                       | Value                                                       |
+-----------------------------+-------------------------------------------------------------+
| OS-DCF:diskConfig           | AUTO                                                        |
| OS-EXT-AZ:availability_zone | AZ3                                                         |
| OS-EXT-STS:power_state      | Running                                                     |
| OS-EXT-STS:task_state       | None                                                        |
| OS-EXT-STS:vm_state         | active                                                      |
| OS-SRV-USG:launched_at      | 2019-01-17T12:38:38.000000                                  |
| OS-SRV-USG:terminated_at    | None                                                        |
| accessIPv4                  |                                                             |
| accessIPv6                  |                                                             |
| addresses                   | siec-wewnetrzna-2=192.168.2.8; siec-wewnetrzna=192.168.1.13 |
| config_drive                |                                                             |
| created                     | 2019-01-17T12:38:13Z                                        |
| flavor                      | m2.c2 (c00f0837-9213-4f04-bb79-6ccc5a8332f7)                |
| hostId                      | 561e70f9481a53ae03bbbd23f5ae0a8212755dc8c0b6f07e457b71d8    |
| id                          | 75aaf580-bbe6-4887-8059-c1cf532345d2                        |
| image                       |                                                             |
| key_name                    | Jan-Kowalski-key                                            |
| name                        | VM_1                                                        |
| progress                    | 0                                                           |
| project_id                  | 1d2e7815df014305a9cf13f5d4c1fde4                            |
| properties                  |                                                             |
| security_groups             | name='default'                                              |
|                             | name='ssh'                                                  |
|                             | name='ssh'                                                  |
|                             | name='default'                                              |
| status                      | ACTIVE                                                      |
| updated                     | 2019-01-17T12:38:39Z                                        |
| user_id                     | 780027...                                                   |
| volumes_attached            | id='ee6e6567-7466-43f9-a3f7-5e95c17eb336'                   |
+-----------------------------+-------------------------------------------------------------+

ID wolumenu dla nowej instancji otrzymaliśmy w poprzednim punkcie, jedyną brakującą informacją są ID sieci podłączonych do instancji:

$ openstack network list
+--------------------------------------+-------------------+----------------------------------------------------------------------------+
| ID                                   | Name              | Subnets                                                                    |
+--------------------------------------+-------------------+----------------------------------------------------------------------------+
| 19f99d0d-e04b-4e88-bf13-f7d83cf8ff52 | EXTERNAL          | 2a426a8e-0158-46ad-9d82-cd716a895788, 41175650-8e5c-492a-9f59-238be3bb9d2b |
| 31c9b1ea-4ce4-4359-bca0-3cd391be7cc6 | siec-wewnetrzna-2 | 44163d2e-d998-42bf-b4a5-4f2ecccce968                                       |
| 96e40db6-3857-45e0-a7a3-c49c17ceffed | siec-wewnetrzna   | 721d234d-87fb-4237-99e9-57c7ea1711e0                                       |
+--------------------------------------+-------------------+----------------------------------------------------------------------------+

Usunięcie instancji jest konieczne tylko wtedy, gdy nowa instancja ma wykorzystywać te same adresy sieci wewnętrznych.

$ openstack server delete 75aaf580-bbe6-4887-8059-c1cf532345d2

Instancję tworzymy jednym poleceniem, z wykorzystaniem zebranych wcześniej informacji:

openstack server create VM_NAME \
--volume VOL_ID \
--flavor FLAVOR_NAME \
--security-group default --security-group NAME_1 --security-group NAME_2 \
--nic net-id=NET_ID,v4-fixed-ip=IP_ADDR --nic net-id=NET_ID,v4-fixed-ip=IP_ADDR \
--key-name NAME
openstack server create VM_1 --volume 391b6733-8610-4dc5-8913-f9af68f54f41 --flavor m2.c2 --security-group default --security-group ssh --nic net-id=31c9b1ea-4ce4-4359-bca0-3cd391be7cc6,v4-fixed-ip=192.168.2.8 --nic net-id=96e40db6-3857-45e0-a7a3-c49c17ceffed,v4-fixed-ip=192.168.1.13 --key-name Jan-Kowalski-key