목차

인스턴스 삭제 시 볼륨 삭제(delete on termination) 변경

최초 인스턴스 생성시 delete on termination옵션을 활성화 한 경우 인스턴스를 삭제할때 해당 인스턴스에 할당된 볼륨도 같이 삭제되도록 한다.

그러나 나중에 볼륨을 재활용하기 위해 볼륨은 남겨두고 인스턴스만 삭제하기 위해서는 해당 옵션을 비활성화 해야 한다.
비활성화 작업은 호라이즌 대시보드에서는 불가능하며 직접 DB를 수정해야 한다.

인스턴스 정보 조회

먼저 해당 인스턴스의 볼륨 정보를 조회한다.

인스턴스 목록이나 정보를 조회할때 openstack server list, openstack server show 명령어로는 상세 항목이 조회되지 않는다.
따라서 nova list, nova show 명령어로 조회를 해야한다.

(overcloud) [stack@director ~]$ nova list
+--------------------------------------+-------+--------+------------+-------------+-----------------------+
| ID                                   | Name  | Status | Task State | Power State | Networks              |
+--------------------------------------+-------+--------+------------+-------------+-----------------------+
| 7574f8c6-a165-4fb7-a21d-cb03770e69b7 | test  | ACTIVE | -          | Running     | vmnet0=192.168.55.81  |
| 1a46c1c9-216d-4cc4-90a5-5fdb621ea037 | test2 | ACTIVE | -          | Running     | vmnet0=192.168.55.185 |
| 9b50eb68-bd73-4c49-99d6-f548654f5665 | ttt   | ACTIVE | -          | Running     | vmnet0=192.168.55.227 |
+--------------------------------------+-------+--------+------------+-------------+-----------------------+

(overcloud) [stack@director ~]$ nova show test
+--------------------------------------+---------------------------------------------------------------------------------+
| Property                             | Value                                                                           |
+--------------------------------------+---------------------------------------------------------------------------------+
...
| os-extended-volumes:volumes_attached | [{"id": "80e71469-7a8e-4abd-affb-19f71c0f6406", "delete_on_termination": true}] |
...
+--------------------------------------+---------------------------------------------------------------------------------+

위에서와 같이 인스턴스 속성중 os-extended-volumes:volumes_attached 항목에 delete_on_termination값이 true인 경우 인스턴스 삭제시 볼륨이 같이 삭제되는 옵션이 활성화 된 것으로 확인 할 수 있다.

delete_on_termination 설정 수정

controller노드에 접속하여 해당 옵션의 설정 상태를 직접 SQL로 조회해본다.

# podman exec -t $(sudo podman ps -q -f name=galera) mysql -uroot -e "select * from nova.block_device_mapping where instance_uuid='INSTANCE_UUID'\G;"
# podman exec -t $(sudo podman ps -q -f name=galera) mysql -uroot -e "update nova.block_device_mapping set delete_on_termination='0' where instance_uuid='INSTANCE_UUID';"

아래는 실제 수행 결과이다.

만약 여러개의 볼륨이 붙어있는경우 row가 여러개 출력된다.

[root@overcloud-controller-0 ~]# podman exec -t $(sudo podman ps -q -f name=galera) mysql -uroot -e "select * from nova.block_device_mapping where instance_uuid='7574f8c6-a165-4fb7-a21d-cb03770e69b7'\G;"
*************************** 1. row ***************************
           created_at: 2023-04-25 04:58:12
           updated_at: 2023-04-25 06:26:23
           deleted_at: NULL
                   id: 43
          device_name: /dev/vda
delete_on_termination: 1                    ### <<<<< delete_on_termination이 1인것을 확인할수 있다.
          snapshot_id: NULL
            volume_id: 80e71469-7a8e-4abd-affb-19f71c0f6406
          volume_size: 10
            no_device: 0
      connection_info: {"driver_volume_type": "rbd", "data": {"name": "volumes/volume-80e71469-7a8e-4abd-affb-19f71c0f6406", "hosts": ["172.16.1.31", "172.16.1.32", "172.16.1.33"], "ports": ["6789", "6789", "6789"], "cluster_name": "ceph", "auth_enabled": true, "auth_username": "openstack", "secret_type": "ceph", "secret_uuid": "39e13f84-26a4-4d91-bd1c-6e6c74762e8e", "volume_id": "80e71469-7a8e-4abd-affb-19f71c0f6406", "discard": true, "keyring": null, "qos_specs": null, "access_mode": "rw", "encrypted": false}, "status": "attaching", "instance": "7574f8c6-a165-4fb7-a21d-cb03770e69b7", "attached_at": "2023-04-25T06:26:22.000000", "detached_at": "", "volume_id": "80e71469-7a8e-4abd-affb-19f71c0f6406", "serial": "80e71469-7a8e-4abd-affb-19f71c0f6406"}
        instance_uuid: 7574f8c6-a165-4fb7-a21d-cb03770e69b7
              deleted: 0
          source_type: image
     destination_type: volume
         guest_format: NULL
          device_type: disk
             disk_bus: virtio
           boot_index: 0
             image_id: 0038989e-2e66-4afd-ab5a-10c6b8e4e11c
                  tag: NULL
        attachment_id: 5e3ddea9-16f6-4b18-afc3-b04ee9ab2328
                 uuid: 49127384-1b00-4f40-9ba5-324463c95af6
          volume_type: NULL

해당 인스턴스 볼륨의 delete_on_termination값을 수정한다. 실행시 아무런 출력이 나오지 않는다.

[root@overcloud-controller-0 ~]# podman exec -t $(sudo podman ps -q -f name=galera) mysql -uroot -e "update nova.block_device_mapping set delete_on_termination='0' where instance_uuid='7574f8c6-a165-4fb7-a21d-cb03770e69b7';"

해당 인스턴스의 정보를 다시 조회해보면 delete_on_termination값이 변경된것을 확인 할 수 있다.

[root@overcloud-controller-0 ~]# podman exec -t $(sudo podman ps -q -f name=galera) mysql -uroot -e "select * from nova.block_device_mapping where instance_uuid='7574f8c6-a165-4fb7-a21d-cb03770e69b7'\G;"
*************************** 1. row ***************************
           created_at: 2023-04-25 04:58:12
           updated_at: 2023-04-25 06:26:23
           deleted_at: NULL
                   id: 43
          device_name: /dev/vda
delete_on_termination: 0            ### <<<<< 변경된 것을 확인 할 수 있다.
          snapshot_id: NULL
            volume_id: 80e71469-7a8e-4abd-affb-19f71c0f6406
          volume_size: 10
            no_device: 0
      connection_info: {"driver_volume_type": "rbd", "data": {"name": "volumes/volume-80e71469-7a8e-4abd-affb-19f71c0f6406", "hosts": ["172.16.1.31", "172.16.1.32", "172.16.1.33"], "ports": ["6789", "6789", "6789"], "cluster_name": "ceph", "auth_enabled": true, "auth_username": "openstack", "secret_type": "ceph", "secret_uuid": "39e13f84-26a4-4d91-bd1c-6e6c74762e8e", "volume_id": "80e71469-7a8e-4abd-affb-19f71c0f6406", "discard": true, "keyring": null, "qos_specs": null, "access_mode": "rw", "encrypted": false}, "status": "attaching", "instance": "7574f8c6-a165-4fb7-a21d-cb03770e69b7", "attached_at": "2023-04-25T06:26:22.000000", "detached_at": "", "volume_id": "80e71469-7a8e-4abd-affb-19f71c0f6406", "serial": "80e71469-7a8e-4abd-affb-19f71c0f6406"}
        instance_uuid: 7574f8c6-a165-4fb7-a21d-cb03770e69b7
              deleted: 0
          source_type: image
     destination_type: volume
         guest_format: NULL
          device_type: disk
             disk_bus: virtio
           boot_index: 0
             image_id: 0038989e-2e66-4afd-ab5a-10c6b8e4e11c
                  tag: NULL
        attachment_id: 5e3ddea9-16f6-4b18-afc3-b04ee9ab2328
                 uuid: 49127384-1b00-4f40-9ba5-324463c95af6
          volume_type: NULL

디렉터에서 확인해도 동일하게 delete_on_termination값이 false로 변경된 것을 확인 할 수 있다.

(overcloud) [stack@director ~]$ nova show test
+--------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Property                             | Value                                                                                                                                                            |
+--------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------+
...
| os-extended-volumes:volumes_attached | [{"id": "80e71469-7a8e-4abd-affb-19f71c0f6406", "delete_on_termination": false}] |
...
+--------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------+

(overcloud) [stack@director ~]$ nova volume-attachments test
+--------------------------------------+----------+--------------------------------------+--------------------------------------+-----+-----------------------+
| ID                                   | DEVICE   | SERVER ID                            | VOLUME ID                            | TAG | DELETE ON TERMINATION |
+--------------------------------------+----------+--------------------------------------+--------------------------------------+-----+-----------------------+
| 80e71469-7a8e-4abd-affb-19f71c0f6406 | /dev/vda | 7574f8c6-a165-4fb7-a21d-cb03770e69b7 | 80e71469-7a8e-4abd-affb-19f71c0f6406 | -   | False                 |
+--------------------------------------+----------+--------------------------------------+--------------------------------------+-----+-----------------------+

이후 인스턴스를 삭제해도 해당 볼륨이 남아있는지 확인해보도록 한다.