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.
Tworzenie backupu
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
Zgromadzenie pozostałych informacji
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 (opcjonalnie)
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
Stworzenie nowej instancji
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