인스턴스 삭제 시 볼륨 삭제(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로 조회해본다.
- 볼륨 delete_on_termination 설정 확인
# 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;"
- 볼륨 delete_on_termination 설정 업데이트:
# 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 | +--------------------------------------+----------+--------------------------------------+--------------------------------------+-----+-----------------------+
이후 인스턴스를 삭제해도 해당 볼륨이 남아있는지 확인해보도록 한다.