OpenStack へのブロックデバイスのガイド

Red Hat Ceph Storage 4

OpenStack のバックエンドとして Ceph を使用するように、Ceph、QEMU、libvirt、OpenStack を設定

概要

本ガイドでは、Glance、Cinder、Cinder Backup、および Nova のバックエンドに Ceph を使用するように OpenStack および Ceph を設定する方法を説明します。
Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。まずは、マスター (master)、スレーブ (slave)、ブラックリスト (blacklist)、ホワイトリスト (whitelist) の 4 つの用語の置き換えから始めます。この取り組みは膨大な作業を要するため、今後の複数のリリースで段階的に用語の置き換えを実施して参ります。詳細は、弊社の CTO、Chris Wright のメッセージを参照してください。

第1章 Ceph ブロックデバイスおよび OpenStack

The Red Hat Enterprise Linux OpenStack Platform Director は、Glance、Cinder、Cinder Backup、および Nova のバックエンドとして Ceph を使用するための 2 つの方法を提供します。

  1. OpenStack は Ceph Storage クラスターを作成する: OpenStack director は Ceph Storage クラスターを作成できます。これには、Ceph OSD のテンプレートを設定する必要があります。OpenStack は Ceph ノードのインストールと設定を処理します。このシナリオでは、OpenStack は OpenStack のコントローラーノードで Ceph モニターをインストールします。
  2. OpenStack は既存の Ceph ストレージクラスターに接続: Red Hat OpenStack Platform 9 以降を使用して、Ceph モニターに接続して OpenStack のバックエンドとして使用するように Ceph ストレージクラスターを設定することができます。

前述の方法は、インストールと設定の多くを自動的に処理してくれるため、OpenStack のバックエンドとして Ceph を設定するための好ましい方法です。

本書では、Ceph をバックエンドとして使用するように Ceph、QEMU、libvirt、および OpenStack を設定する手順を詳しく説明します。本書は、RHEL OSP Director を使用する予定のないユーザーを対象としています。

112 Ceph Block Device OpenStack 0720
注記

OpenStack のバックエンドとして Ceph ブロックデバイスを使用するには、稼働中の Ceph ストレージクラスターと少なくとも 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 つとも使う必要はありません。

関連情報

第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 クラスター

手順

  1. Red Hat Ceph Storage クラスターが実行中で、HEALTH_OK 状態にあることを確認します。

    [root@mon ~]# ceph -s
  2. 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 クライアントのインストール

Ceph Storage クラスターにアクセスするために、Red Hat OpenStack Platform に Ceph クライアントパッケージをインストールします。

前提条件

  • 稼働中の Red Hat Ceph Storage クラスター
  • Ceph ソフトウェアリポジトリーへのアクセス
  • OpenStack の Nova、Cinder、Cinder Backup、および Glance ノードへのルートレベルのアクセス。

手順

  1. OpenStack Nova、Cinder、Cinder Backup ノードは以下のパッケージをインストールします。

    [root@nova ~]# yum install python-rbd
    [root@nova ~]# yum install ceph-common
  2. OpenStack Glance ノードで python-rbd パッケージをインストールします。

    [root@glance ~]# yum 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 ノードへのルートレベルのアクセス。

手順

  1. 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 ノードへのルートレベルのアクセス。
  • 稼働中の Red Hat Ceph Storage クラスター

手順

  1. 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'
  2. client.cinderclient.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
  3. OpenStack Nova ノードには、nova-compute プロセスのキーリングファイルが必要です。

    [root@mon ~]# ceph auth get-or-create client.cinder | ssh NOVA_NODE tee /etc/ceph/ceph.client.cinder.keyring
  4. OpenStack Nova ノードは、libvirtclient.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'
  5. OpenStack Nova ノードに戻ります。

    [root@mon ~]# ssh NOVA_NODE
  6. シークレットの UUID を生成し、後で nova-compute を設定するためにシークレットの UUID を保存します。

    [root@nova ~]# uuidgen > uuid-secret.txt
    注記

    すべての Nova コンピュートノードに UUID は必要ありません。ただし、プラットフォームの一貫性から、同じ UUID を維持する方が適切です。

  7. 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
  8. 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

関連情報

第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。

手順

  1. Cinder 設定ファイルを編集します。

    [root@cinder ~]# vim /etc/cinder/cinder.conf
  2. [DEFAULT] セクションで、Cinder のバックエンドとして Ceph を有効にします。

    enabled_backends = ceph
  3. Glance API のバージョンが 2 に設定されていることを確認します。複数の cinder バックエンドを enabled_backends に設定する場合には、glance_api_version = 2 設定は [DEFAULT] セクションではなく、[ceph] セクションになければなりません。

    glance_api_version = 2
  4. cinder.conf ファイルに [ceph] セクションを作成します。以下のステップで [ceph] セクションに Ceph 設定を追加します。
  5. volume_driver の設定を指定し、Ceph ブロックデバイスドライバーを使用するように設定します。

    volume_driver = cinder.volume.drivers.rbd.RBDDriver
  6. クラスター名と Ceph の設定ファイルの場所を指定します。典型的なデプロイメントでは、ceph クラスターのクラスター名および Ceph 設定ファイルは /etc/ceph/ceph.conf にあります。Ceph クラスター名が ceph ではない場合は、クラスター名と設定ファイルパスを適切に指定します。

    rbd_cluster_name = us-west
    rbd_ceph_conf = /etc/ceph/us-west.conf
  7. デフォルトでは、Red Hat OpenStack Platform は Ceph ボリュームを rbd プールに保管します。以前に作成した volumes プールを使用するには、rbd_pool 設定を指定し、volumes プールを設定します。

    rbd_pool = volumes
  8. 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
  9. 以下の設定を指定します。

    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 ノードへのルートレベルのアクセス。

手順

  1. Cinder 設定ファイルを編集します。

    [root@cinder ~]# vim /etc/cinder/cinder.conf
  2. 設定ファイルの [ceph] セクションに移動します。
  3. backup_driver の設定を指定し、それを Ceph ドライバーに設定します。

    backup_driver = cinder.backup.drivers.ceph
  4. backup_ceph_conf の設定を指定し、Ceph 設定ファイルへのパスを指定します。

    backup_ceph_conf = /etc/ceph/ceph.conf
    注記

    Cinder バックアップ Ceph 設定ファイルは、Cinder に使用する Ceph 設定ファイルとは異なる場合があります。たとえば、別の Ceph Storage クラスターを指定することができます。

  5. バックアップ用の Ceph プールを指定します。

    backup_ceph_pool = backups
    注記

    Cinder バックアップに使用される Ceph 設定ファイルは、Cinder に使用される Ceph 設定ファイルとは異なる場合があります。

  6. backup_ceph_user 設定を指定し、ユーザーを cinder-backup として指定します。

    backup_ceph_user = cinder-backup
  7. 以下の設定を指定します。

    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

  8. Cinder バックアップが有効になっているかどうかを確認します。

    [root@cinder ~]# cat /etc/openstack-dashboard/local_settings | grep enable_backup

    enable_backupFalse に設定すると、local_settings ファイルを編集し、これを True に設定します。

    OPENSTACK_CINDER_FEATURES = {
        'enable_backup': True,
    }

3.4. Ceph ブロックデバイスを使用するように Glance の設定

Red Hat OpenStack Platform は、Ceph ブロックデバイスを使用する Glance を設定できます。

前提条件

  • Glance ノードへのルートレベルのアクセス。

手順

  1. デフォルトで 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
  2. CoW (copy-on-write) クローン作成を有効にするには、show_image_direct_urlTrue に設定します。

    show_image_direct_url = True
    重要

    CoW を有効にすると、Glance の API 経由でバックエンドの場所を公開するため、エンドポイントは一般にアクセスできないはずです。

  3. 必要に応じてキャッシュ管理を無効にします。flavor は、keystone+cachemanagement ではなく、keystone にのみ設定する必要があります。

    flavor = keystone
  4. 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 ノードへのルートレベルのアクセス。

手順

  1. Ceph 設定ファイルを編集します。

    [root@nova ~]# vim /etc/ceph/ceph.conf
  2. 以下のセクションを 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
  3. 管理ソケットとログファイル用に新規ディレクトリーを作成し、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 が許可している必要があります。

  4. それぞれの 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 ノードへのルートレベルのアクセス。

手順

  1. ブロックデバイスプール名と Ceph ユーザー名を設定ファイルに読み込みます。
  2. 該当する設定ファイルを変更したら、適切な 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