OpenStack へのブロックデバイスのガイド
OpenStack のバックエンドとして Ceph を使用するように、Ceph、QEMU、libvirt、OpenStack を設定
概要
第1章 Ceph ブロックデバイスおよび OpenStack
The Red Hat Enterprise Linux OpenStack Platform Director は、Glance、Cinder、Cinder Backup、および Nova のバックエンドとして Ceph を使用するための 2 つの方法を提供します。
- OpenStack は Ceph Storage クラスターを作成する: OpenStack director は Ceph Storage クラスターを作成できます。これには、Ceph OSD のテンプレートを設定する必要があります。OpenStack は Ceph ホストのインストールと設定を処理します。このシナリオでは、OpenStack は OpenStack のコントローラーホストで Ceph モニターをインストールします。
- OpenStack は既存の Ceph Storage クラスターに接続: Red Hat OpenStack Platform 9 以降を使用して、Ceph モニターに接続して OpenStack のバックエンドとして使用するように Ceph Storage クラスターを設定することができます。
前述の方法は、インストールと設定の多くを自動的に処理してくれるため、OpenStack のバックエンドとして Ceph を設定するための好ましい方法です。
本書では、Ceph をバックエンドとして使用するように Ceph、QEMU、libvirt、および OpenStack を設定する手順を詳しく説明します。本書は、RHEL OSP Director を使用する予定のないユーザーを対象としています。

OpenStack のバックエンドとして Ceph ブロックデバイスを使用するには、稼働中の Ceph Storage クラスターと少なくとも 1 つの OpenStack ホストが必要です。
OpenStack の 3 つの部分は、Ceph のブロックデバイスと統合されます。
- イメージ: OpenStack Glance は仮想マシンのイメージを管理します。イメージを変更することはできません。OpenStack はイメージをバイナリーブロブとして扱い、それに応じてイメージをダウンロードします。
- ボリューム: ボリュームはブロックデバイスです。OpenStack では、仮想マシンを起動したり、実行中の仮想マシンにボリュームを接続したりするためにボリュームを使用します。OpenStack は Cinder サービスを使用してボリュームを管理します。Ceph は、OpenStack Cinder および Cinder Backup のブラックリストとしての役割を果たすことができます。
-
ゲストディスク: ゲストディスクは、ゲストオペレーティングシステムのディスクです。デフォルトでは、仮想マシンのブート時に、ディスクはハイパーバイザーのファイルシステムにファイルとして表示されます (デフォルトでは
/var/lib/nova/instances/<uuid> /
ディレクトリー下に)。OpenStack Glance は、Ceph ブロックデバイスにイメージを保存することができ、イメージの Copy-on-Write クローンを使用して Cinder を使用して仮想マシンをブートすることができます。
Ceph は、仮想マシンのディスクをホストする QCOW2 をサポートしません。仮想マシンを起動するには、エフェメラルバックエンドまたはボリュームから起動するには、Glance イメージのフォーマットを RAW にする必要があります。
OpenStack では、イメージ、ボリューム、またはゲストディスクの仮想マシンに Ceph を使用することができます。3 つとも使う必要はありません。
関連情報
- 詳細は、Red Hat OpenStack Platform のドキュメントを参照してください。
第2章 OpenStack 用 Ceph のインストールおよび設定
ストレージ管理者は、Red Hat OpenStack Platform が Ceph ブロックデバイスを使用する前に、Ceph をインストールおよび設定する必要があります。
2.1. 前提条件
- 新しい Red Hat Ceph Storage クラスターまたは既存の Red Hat Ceph Storage クラスター。
2.2. Openstack 用の Ceph プールの作成
OpenStack で使用するための Ceph プールを作成することができます。デフォルトでは、Ceph ブロックデバイスは rbd
プールを使用しますが、利用可能なプールをすべて使用することができます。
前提条件
- 稼働中の Red Hat Ceph Storage クラスターがある。
手順
Red Hat Ceph Storage クラスターが実行中で、
HEALTH_OK
状態にあることを確認します。[root@mon ~]# ceph -s
Ceph プールを作成します。
例
[root@mon ~]# ceph osd pool create volumes 128 [root@mon ~]# ceph osd pool create backups 128 [root@mon ~]# ceph osd pool create images 128 [root@mon ~]# ceph osd pool create vms 128
上記の例では、
128
は配置グループの数になります。重要Red Hat は、Ceph Placement Group’s per Pool Calculator を使用して、プールに適した配置グループ数を計算することを推奨します。
関連情報
- プールの作成に関する詳細は、『ストラテジー戦略』 ガイドの 「プール」 の章を参照してください。
2.3. Openstack への Ceph クライアントのインストール
Red Hat OpenStack Platform に Ceph クライアントパッケージをインストールすることで、Ceph Storage クラスターにアクセスすることができます。
前提条件
- 稼働中の Red Hat Ceph Storage クラスターがある。
- Ceph ソフトウェアリポジトリーへのアクセス
- OpenStack の Nova、Cinder、Cinder Backup、および Glance ノードへのルートレベルのアクセス。
手順
OpenStack Nova、Cinder、Cinder Backup ノードは以下のパッケージをインストールします。
[root@nova ~]# dnf install python-rbd ceph-common
OpenStack Glance ホストで
python-rbd
パッケージをインストールします。[root@glance ~]# dnf install python-rbd
2.4. Ceph 設定ファイルの Openstack へのコピー
Ceph 設定ファイルを nova-compute
ノード、cinder-backup
ノード、cinder-volume
ノード、および glance-api
ノードにコピーします。
前提条件
- 稼働中の Red Hat Ceph Storage クラスターがある。
- Ceph ソフトウェアリポジトリーへのアクセス
- OpenStack Nova、Cinder、および Glance ノードへのルートレベルのアクセス。
手順
Ceph 設定ファイルを Ceph Monitor ホストから OpenStack Nova ノード、Cinder ノード、Cinder Backup ノード、および Glance ノードにコピーします。
[root@mon ~]# scp /etc/ceph/ceph.conf OPENSTACK_NODES:/etc/ceph
2.5. Ceph クライアント認証の設定
Ceph クライアントが Red Hat OpenStack Platform にアクセスするように認証を設定することができます。
前提条件
- Ceph Monitor ホストへの root レベルのアクセス。
- 稼働中の Red Hat Ceph Storage クラスターがある。
手順
Ceph Monitor ホストから、Cinder、Cinder Backup、および Glance の新しいユーザーを作成します。
[root@mon ~]# ceph auth get-or-create client.cinder mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=volumes, allow rwx pool=vms, allow rx pool=images' [root@mon ~]# ceph auth get-or-create client.cinder-backup mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=backups' [root@mon ~]# ceph auth get-or-create client.glance mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=images'
client.cinder
、client.cinder-backup
、およびclient.glance
のキーリングを適切なノードに追加し、それらの所有権を変更します。[root@mon ~]# ceph auth get-or-create client.cinder | ssh CINDER_VOLUME_NODE sudo tee /etc/ceph/ceph.client.cinder.keyring [root@mon ~]# ssh CINDER_VOLUME_NODE chown cinder:cinder /etc/ceph/ceph.client.cinder.keyring [root@mon ~]# ceph auth get-or-create client.cinder-backup | ssh CINDER_BACKUP_NODE tee /etc/ceph/ceph.client.cinder-backup.keyring [root@mon ~]# ssh CINDER_BACKUP_NODE chown cinder:cinder /etc/ceph/ceph.client.cinder-backup.keyring [root@mon ~]# ceph auth get-or-create client.glance | ssh GLANCE_API_NODE sudo tee /etc/ceph/ceph.client.glance.keyring [root@mon ~]# ssh GLANCE_API_NODE chown glance:glance /etc/ceph/ceph.client.glance.keyring
OpenStack Nova ノードには、
nova-compute
プロセスのキーリングファイルが必要です。[root@mon ~]# ceph auth get-or-create client.cinder | ssh NOVA_NODE tee /etc/ceph/ceph.client.cinder.keyring
OpenStack Nova ノードは、
libvirt
にclient.cinder
ユーザーの秘密鍵を保存する必要もあります。libvirt
プロセスでは、Cinder からブロックデバイスを接続する際にクラスターにアクセスするために秘密鍵が必要です。OpenStack Nova ノードに秘密鍵の一時的なコピーを作成します。[root@mon ~]# ceph auth get-key client.cinder | ssh NOVA_NODE tee client.cinder.key
exclusive-lock
機能を使用する Ceph ブロックデバイスイメージがストレージクラスターに含まれている場合は、すべての Ceph ブロックデバイスユーザーに、クライアントをブロックリストするパーミッションがあることを確認してください。[root@mon ~]# ceph auth caps client.ID mon 'allow r, allow command "osd blacklist"' osd 'EXISTING_OSD_USER_CAPS'
OpenStack Nova ホストに戻ります。
[root@mon ~]# ssh NOVA_NODE
シークレットの UUID を生成し、後で
nova-compute
を設定するためにシークレットの UUID を保存します。[root@nova ~]# uuidgen > uuid-secret.txt
注記すべての Nova コンピュートノードに UUID は必要ありません。ただし、プラットフォームの一貫性から、同じ UUID を維持する方が適切です。
OpenStack Nova ノードで、
libvirt
にシークレットキーを追加して、キーの一時コピーを削除します。cat > secret.xml <<EOF <secret ephemeral='no' private='no'> <uuid>`cat uuid-secret.txt`</uuid> <usage type='ceph'> <name>client.cinder secret</name> </usage> </secret> EOF
libvirt
のシークレットを設定して定義します。[root@nova ~]# virsh secret-define --file secret.xml [root@nova ~]# virsh secret-set-value --secret $(cat uuid-secret.txt) --base64 $(cat client.cinder.key) && rm client.cinder.key secret.xml
関連情報
- 詳細は、『Red Hat Ceph Storage 管理ガイド』の「Ceph ユーザーの管理」セクションを参照してください。
- ユーザー機能に関する詳細は、Red Hat OpenStack Platform の Integrating an Overcloud with an Existing Red Hat Ceph Cluster Guide の Configuring the existing ceph storage cluster を参照してください。
第3章 Ceph ブロックデバイスを使用するように OpenStack 設定
ストレージ管理者は、Red Hat OpenStack Platform が Ceph ブロックデバイスを使用するように設定する必要があります。Red Hat OpenStack Platform では、Cinder、Cinder Backup、Glance、および Nova に Ceph ブロックデバイスを使用することができます。
3.1. 前提条件
- 新しい Red Hat Ceph Storage クラスターまたは既存の Red Hat Ceph Storage クラスター。
- 実行中の Red Hat OpenStack Platform 環境
3.2. Ceph ブロックデバイスを使用するように Cinder を設定
Red Hat OpenStack Platform は Ceph ブロックデバイスを使用して Cinder ボリュームのバックエンドストレージを提供することができます。
前提条件
- Cinder ノードへのルートレベルのアクセス。
-
Ceph
volume
プール。 - Ceph ブロックデバイスと対話するシークレットのユーザーおよび UUID。
手順
Cinder 設定ファイルを編集します。
[root@cinder ~]# vim /etc/cinder/cinder.conf
[DEFAULT]
セクションで、Cinder のバックエンドとして Ceph を有効にします。enabled_backends = ceph
Glance API のバージョンが 2 に設定されていることを確認します。複数の cinder バックエンドを
enabled_backends
に設定する場合には、glance_api_version = 2
設定は[DEFAULT]
セクションではなく、[ceph]
セクションになければなりません。glance_api_version = 2
-
cinder.conf
ファイルに[ceph]
セクションを作成します。以下のステップで[ceph]
セクションに Ceph 設定を追加します。 volume_driver
の設定を指定し、Ceph ブロックデバイスドライバーを使用するように設定します。volume_driver = cinder.volume.drivers.rbd.RBDDriver
クラスター名と Ceph の設定ファイルの場所を指定します。典型的なデプロイメントでは、
ceph
クラスターのクラスター名および Ceph 設定ファイルは/etc/ceph/ceph.conf
にあります。Ceph クラスター名がceph
ではない場合は、クラスター名と設定ファイルパスを適切に指定します。rbd_cluster_name = us-west rbd_ceph_conf = /etc/ceph/us-west.conf
デフォルトでは、Red Hat OpenStack Platform は Ceph ボリュームを
rbd
プールに保管します。以前に作成したvolumes
プールを使用するには、rbd_pool
設定を指定し、volumes
プールを設定します。rbd_pool = volumes
Red Hat OpenStack Platform には、ボリュームのシークレットのデフォルトユーザー名または UUID がありません。
rbd_user
を指定して、cinder
ユーザーに設定します。次に、rbd_secret_uuid
設定を指定し、これをuuid-secret.txt
ファイルに保存されている生成された UUID に設定します。rbd_user = cinder rbd_secret_uuid = 4b5fd580-360c-4f8c-abb5-c83bb9a3f964
以下の設定を指定します。
rbd_flatten_volume_from_snapshot = false rbd_max_clone_depth = 5 rbd_store_chunk_size = 4 rados_connect_timeout = -1
Cinder が Ceph ブロックデバイスを使用するように設定すると、設定ファイルは以下のようになります。
例
[DEFAULT] enabled_backends = ceph glance_api_version = 2 … [ceph] volume_driver = cinder.volume.drivers.rbd.RBDDriver rbd_cluster_name = ceph rbd_pool = volumes rbd_user = cinder rbd_ceph_conf = /etc/ceph/ceph.conf rbd_flatten_volume_from_snapshot = false rbd_secret_uuid = 4b5fd580-360c-4f8c-abb5-c83bb9a3f964 rbd_max_clone_depth = 5 rbd_store_chunk_size = 4 rados_connect_timeout = -1
注記デフォルトの
[lvm]
セクションと、その設定を削除することを検討してください。
3.3. Ceph ブロックデバイスを使用する Cinder バックアップの設定
Red Hat OpenStack Platform では、Cinder バックアップが Ceph ブロックデバイスを使用するように設定できます。
前提条件
- Cinder ノードへのルートレベルのアクセス。
手順
Cinder 設定ファイルを編集します。
[root@cinder ~]# vim /etc/cinder/cinder.conf
-
設定ファイルの
[ceph]
セクションに移動します。 backup_driver
の設定を指定し、それを Ceph ドライバーに設定します。backup_driver = cinder.backup.drivers.ceph
backup_ceph_conf
の設定を指定し、Ceph 設定ファイルへのパスを指定します。backup_ceph_conf = /etc/ceph/ceph.conf
注記Cinder バックアップ Ceph 設定ファイルは、Cinder に使用する Ceph 設定ファイルとは異なる場合があります。たとえば、別の Ceph Storage クラスターを指定することができます。
バックアップ用の Ceph プールを指定します。
backup_ceph_pool = backups
注記Cinder バックアップに使用される Ceph 設定ファイルは、Cinder に使用される Ceph 設定ファイルとは異なる場合があります。
backup_ceph_user
設定を指定し、ユーザーをcinder-backup
として指定します。backup_ceph_user = cinder-backup
以下の設定を指定します。
backup_ceph_chunk_size = 134217728 backup_ceph_stripe_unit = 0 backup_ceph_stripe_count = 0 restore_discard_excess_bytes = true
Cinder オプションを指定すると、
cinder.conf
ファイルの[ceph]
セクションは以下のようになります。例
[ceph] volume_driver = cinder.volume.drivers.rbd.RBDDriver rbd_cluster_name = ceph rbd_pool = volumes rbd_user = cinder rbd_ceph_conf = /etc/ceph/ceph.conf rbd_flatten_volume_from_snapshot = false rbd_secret_uuid = 4b5fd580-360c-4f8c-abb5-c83bb9a3f964 rbd_max_clone_depth = 5 rbd_store_chunk_size = 4 rados_connect_timeout = -1 backup_driver = cinder.backup.drivers.ceph backup_ceph_user = cinder-backup backup_ceph_conf = /etc/ceph/ceph.conf backup_ceph_chunk_size = 134217728 backup_ceph_pool = backups backup_ceph_stripe_unit = 0 backup_ceph_stripe_count = 0 restore_discard_excess_bytes = true
Cinder バックアップが有効になっているかどうかを確認します。
[root@cinder ~]# cat /etc/openstack-dashboard/local_settings | grep enable_backup
enable_backup
をFalse
に設定すると、local_settings
ファイルを編集し、これをTrue
に設定します。例
OPENSTACK_CINDER_FEATURES = { 'enable_backup': True, }
3.4. Ceph ブロックデバイスを使用するように Glance の設定
Red Hat OpenStack Platform は、Ceph ブロックデバイスを使用する Glance を設定できます。
前提条件
- Glance ノードへのルートレベルのアクセス。
手順
デフォルトで Ceph ブロックデバイスを使用するには、
/etc/glance/glance-api.conf
ファイルを編集します。別のプールを使用した場合は、ユーザーまたは Ceph の設定ファイルの適切な値が適用されます。必要に応じて以下の設定のコメント設定を解除し、値を変更します。[root@glance ~]# vim /etc/glance/glance-api.conf
stores = rbd default_store = rbd rbd_store_chunk_size = 8 rbd_store_pool = images rbd_store_user = glance rbd_store_ceph_conf = /etc/ceph/ceph.conf
CoW (copy-on-write) クローン作成を有効にするには、
show_image_direct_url
をTrue
に設定します。show_image_direct_url = True
重要CoW を有効にすると、Glance の API 経由でバックエンドの場所を公開するため、エンドポイントは一般にアクセスできないはずです。
必要に応じてキャッシュ管理を無効にします。
flavor
は、keystone+cachemanagement
ではなく、keystone
にのみ設定する必要があります。flavor = keystone
Red Hat では、イメージに以下のプロパティーを推奨します。
hw_scsi_model=virtio-scsi hw_disk_bus=scsi hw_qemu_guest_agent=yes os_require_quiesce=yes
virtio-scsi
コントローラーのパフォーマンスが向上し、破棄操作に対応します。SCSI/SAS ドライブを使用するシステムの場合は、そのコントローラーにすべての Cinder ブロックデバイスを接続します。また、QEMU ゲストエージェントを有効にし、QEMU ゲストエージェントを介してfs-freeze/thaw
呼び出しを送信します。
3.5. Ceph ブロックデバイスを使用する Nova の設定
Red Hat OpenStack Platform は、Ceph ブロックデバイスを使用する Nova を設定できます。
一時バックエンドストレージデバイスを使用するように各 Nova ノードを設定する必要があります。これにより、すべての仮想マシンが Ceph ブロックデバイスを使用できるようになります。
前提条件
- Nova ノードへのルートレベルのアクセス。
手順
Ceph 設定ファイルを編集します。
[root@nova ~]# vim /etc/ceph/ceph.conf
以下のセクションを Ceph 設定ファイルの
[client]
セクションに追加します。[client] rbd cache = true rbd cache writethrough until flush = true rbd concurrent management ops = 20 admin socket = /var/run/ceph/guests/$cluster-$type.$id.$pid.$cctid.asok log file = /var/log/ceph/qemu-guest-$pid.log
管理ソケットとログファイル用に新規ディレクトリーを作成し、
qemu
ユーザーおよびlibvirtd
グループを使用するディレクトリーのパーミッションを変更します。[root@nova ~]# mkdir -p /var/run/ceph/guests/ /var/log/ceph/ [root@nova ~]# chown qemu:libvirt /var/run/ceph/guests /var/log/ceph/
注記ディレクトリーは SELinux または AppArmor が許可している必要があります。
それぞれの Nova ノードで、
/etc/nova/nova.conf
ファイルを編集します。[libvirt]
セクションで、以下の設定を構成します。例
[libvirt] images_type = rbd images_rbd_pool = vms images_rbd_ceph_conf = /etc/ceph/ceph.conf rbd_user = cinder rbd_secret_uuid = 4b5fd580-360c-4f8c-abb5-c83bb9a3f964 disk_cachemodes="network=writeback" inject_password = false inject_key = false inject_partition = -2 live_migration_flag="VIR_MIGRATE_UNDEFINE_SOURCE,VIR_MIGRATE_PEER2PEER,VIR_MIGRATE_LIVE,VIR_MIGRATE_PERSIST_DEST,VIR_MIGRATE_TUNNELLED" hw_disk_discard = unmap
rbd_user_secret
の UUID は、uuid-secret.txt
ファイルの UUID に置き換えます。
3.6. OpenStack サービスの再起動
Red Hat OpenStack Platform サービスを再起動すると、Ceph ブロックデバイスドライバーをアクティベートできます。
前提条件
- Red Hat OpenStack Platform ノードへのルートレベルのアクセス。
手順
- ブロックデバイスプール名と Ceph ユーザー名を設定ファイルに読み込みます。
該当する設定ファイルを変更したら、適切な OpenStack サービスを再起動します。
[root@osp ~]# systemctl restart openstack-cinder-volume [root@osp ~]# systemctl restart openstack-cinder-backup [root@osp ~]# systemctl restart openstack-glance-api [root@osp ~]# systemctl restart openstack-nova-compute