OpenStack で「Offload rbd の copy_volume_to_image」メソッドによって作成されたイメージを使用するにはどうすればよいでしょうか?

OpenStack で「Offload rbd の copy_volume_to_image」メソッドによって作成されたイメージを使用するにはどうすればよいでしょうか?

私は Ceph と統合された OpenStack を持っています。cinder_backup モジュールを使用せずにインスタンスのボリュームのコピーを作成する最も速い方法に取り組んでいます。Ceph では、プールに保存されている rbd ファイル (ボリューム プールなど) にアクセスできます。それらをエクスポートして、そこからイメージを作成し、別のインスタンスを作成できます。ただし、「Offload rbd's copy_volume_to_image」という別の方法もあります。https://specs.openstack.org/openstack/cinder-specs/specs/liberty/optimze-rbd-copy-volume-to-image.html OpenStack でイメージ プールにコピーされたこれらのボリュームをどのように使用すればよいのか疑問に思っています。これを行うと、イメージは rbd プールにありますが、OpenStack によって生成されておらず、OpenStack ID もないため、OpenStack では使用できません。この方法で作成した後、イメージをどのように使用できるか教えていただけないでしょうか。よろしくお願いします。

答え1

cinder を使用して既存の rbd イメージを管理し、それらを openstack に「採用」することができます。ソース イメージをターゲット イメージに既にクローンまたはコピーしている場合は (例: rbd clone fast-pool/image@snap fast-pool/new_image)、バックエンド情報が必要です。以下は、クラスターの 1 つからの例です (高速ストレージと低速ストレージに 2 つの異なる rbd プールを使用しています)。

control01:~ # cinder get-pools
+----------+---------------------+
| Property | Value               |
+----------+---------------------+
| name     | control@rbd#rbd-ssd |
+----------+---------------------+
+----------+----------------------+
| Property | Value                |
+----------+----------------------+
| name     | control@rbd2#rbd-hdd |
+----------+----------------------+

管理したいターゲット イメージは高速ストレージ (rbd-ssd) にあるため、これをボリュームとして cinder で管理し、「openstack に認識させる」ために必要なコマンドは次のとおりです。

cinder manage --name new_volume_name control@rbd#rbd-ssd new_image

「new_volume_name」は出力に表示される名前でcinder list、「new_image」は前の手順で作成したクローン化された rbd イメージです。

答え2

@eblock 返信ありがとうございます。私の場合は状況が異なります。すでにクローンイメージを images という名前のプールの 1 つに持っています。しかし、cinder は ceph 内のプールとは異なるプールを認識します。これが ceph 内のプールです。

# ceph osd pool ls 
.mgr
images
volumes
backup

そして、シンダーが見たものは次のとおりです。

# cinder get-pools
+----------+-------------------------+
| Property | Value                   |
+----------+-------------------------+
| name     | controller3@rbd-1#rbd-1 |
+----------+-------------------------+
+----------+-------------------------+
| Property | Value                   |
+----------+-------------------------+
| name     | controller2@rbd-1#rbd-1 |
+----------+-------------------------+
+----------+-------------------------+
| Property | Value                   |
+----------+-------------------------+
| name     | controller1@rbd-1#rbd-1 |
+----------+-------------------------+

「cinder manage」コマンドを使用しようとすると、

cinder manage --name  my_new_volume  controller1@rbd-1#rbd-1  my_cloned_image

ボリュームが作成され、「エラー」ステータスで停止します。また、cinder ログ ファイルに次のエラーが表示されます。

cinder.exception.ManageExistingInvalidReference: Manage existing volume failed due to invalid backend reference my_cloned_image: Specified rbd image does not exist.

バックエンド アドレスを Ceph のプール名に変更しましたが、効果はありませんでした。

関連情報