*

CentOS7 RDO Juno with Ceph

公開日: 最終更新日:2015/06/06  |  By  |  CentOS, Ceph, Cinder, OpenStack, OSS, RDO, Storage , ,

ご無沙汰しています。
先日のブログではCentOS7/RDOで OpenStack Juno環境を構築する方法についてご紹介しました。

今回の記事ではCentOS7/RDOで構築したOpenStack Junoの環境でCinderのバックエンドにCephを使用する際の構築、設定方法をご紹介します。

 

構築する環境の概要

今回構築する環境を図に表すと以下のようになります。

01.all

前提となる環境の構築

まず、OpenStack Juno環境とCeph環境を構築します。

PackStackを使用したOpenStack Juno環境の構築はこのブログの以前の記事 を参考としてください。

Ceph環境の構築はこのブログの以前の記事 や公式ドキュメントを参考に構築してください。

02.step1

コントローラーノードでの作業

コントローラーノードで必要な設定を行います。

03.controller

1.必要パッケージのインストールのインストール

Cephのクライアントモジュール(ceph-common)とカーネルモジュール(kmod-rbd,kmod-libceph)のインストールが必要です。
ceph-commonは epel7よりインストールすることができますが、カーネルモジュールは現時点では cephのtestリポジトリから取得する必要があります。
以下の手順でパッケージのインストールを実施してください。


# epel-releaseのインストール
$ yum install epel-release
# ceph-commonパッケージのインストール
$ yum install ceph-common
$ cat > /etc/yum.repos.d/ceph.repo << EOF 
[ceph-test]
name=Ceph packages for $basearch/$releasever
baseurl=http://ceph.com/rpm-testing/rhel7/$basearch
enabled=0
gpgcheck=1
type=rpm-md
gpgkey=https://ceph.com/git/?p=ceph.git;a=blob_plain;f=keys/release.asc
EOF
$ yum install --enablerepo=ceph-test kmod-rbd kmod-libceph

2.Ceph アクセスのための設定とCinder用プールの作成

コントローラーノードからCephの操作を行うための設定をし、Ceph上にOpenStack Cinder用のプールを作成します。Cephの公式ドキュメントにはGlanceのバックエンドやcinder-backup用の設定も一緒に記載されていますが、今回はCinder用の設定のみを行います。

まず、Cephを操作するための設定ファイルをCephノードから取得します。

 $ scp -p {CephノードのIPアドレス}:/etc/ceph/ceph.conf /etc/ceph/ceph.conf
 $ scp -p {CephノードのIPアドレス}:/etc/ceph/ceph.client.admin.keyring /etc/ceph/ceph.client.admin.keyring

次に、以下の手順でCeph上にCinder Volume用のプールを作成し、ceph authによる認証の設定も行います。

 # プールを作成します。指定する数はPG(Placement Group)の数です。
 $ ceph osd pool create volumes 128
 $ ceph auth get-or-create client.cinder mon 'allow r' osd 'allow class-read object_prefix rbd_children, allow rwx pool=volumes'

Cephクラスター側に配置した ceph.confと同じものをコントローラーノードの /etc/ceph/ceph.conf に配置します。

 $ ceph auth get-or-create client.cinder | sudo tee /etc/ceph/ceph.client.cinder.keyring
 $ sudo chown cinder:cinder /etc/ceph/ceph.client.cinder.keyring

3.設定ファイル(cinder.conf)の編集

CinderのバックエンドとしてCephを使用するため、/etc/cinder/cinder.conf の下記の箇所を編集します。
ここで生成したuuidはコンピュートノードでも設定時に使用します。

 $ uuidgen
 {生成されたuuid}
 # --- 書き換え ---
 enabled_backends=ceph    # 書き換え

 # --- 追記 ---
  [ceph]
 volume_driver = cinder.volume.drivers.rbd.RBDDriver
 rbd_pool = volumes
 rbd_ceph_conf = /etc/ceph/ceph.conf
 rbd_flatten_volume_from_snapshot = false
 rbd_max_clone_depth = 5
 rbd_store_chunk_size = 4
 rados_connect_timeout = -1
 glance_api_version = 2
 rbd_user = cinder
 rbd_secret_uuid = {生成されたuuid}
# ---

コンピュートノードの設定

コンピュートノードで必要な設定を行います。

04.conpute

1.qemu-kvm / qemu-imgの再インストール

( この箇所は、この記事を書いた当初、CentOS7.0では必要でしたが、CentOS7.1 では不要となっています。 2015/6/6 追記)

現在、RDO/PackStackでインストールしたコンピュートノード上のkvmでは Cephのrbdプロトコルでマウントを行うことはできません。この件についてAsk OpenStack のやり取りをみると、qemu-kvmのソースを取得し、リビルドする必要があるということですが、、リンク先の手順のとおりやってみると、ビルド時にrhevのオプションを指定するとrbdも使用できるようになっていることが分かります。

ということで、今回はRHEVの Upstream版 oVirtから 必要パッケージをインストールしなおします。

$ yum remove qemu-kvm qemu-img qemu-kvm-tools qemu-kvm-common
$ yum install http://resources.ovirt.org/pub/yum-repo/ovirt-release35.rpm
$ yum install qemu-kvm-rhev qemu-img-rhev qemu-kvm-tools-rhev openstack-nova-compute
$ systemctl start openstack-nova-compute

2.libvirtの設定

libvirtで、ceph上のvolumeに接続するために、keyを指定しておく必要があります。以下の手順で設定します。

$ ceph auth get-key client.cinder | ssh {your-compute-node} tee client.cinder.key
$ cat > secret.xml <<EOF
<secret ephemeral='no' private='no'>
 <uuid>{コントローラーノードで生成したUUID}</uuid>
 <usage type='ceph'>
 <name>client.cinder secret</name>
 </usage>
</secret>
EOF
$ sudo virsh secret-define --file secret.xml
Secret {コントローラーノードで生成したUUID} created
$ sudo virsh secret-set-value --secret {コントローラーノードで生成したUUID} --base64 $(cat client.cinder.key)
$ rm client.cinder.key secret.xml

 

動作の確認

上記の設定でOpenStack上のインスタンスにCephのボリュームをマウントすることができるようになります。
OpenStack上で作成したインスタンスにボリュームをアタッチしたとき、どのような状態になっているかを確認します。
OpenStack上でのインスタンス作成とボリュームの接続の操作についてはここでは説明しません。

05.check

以下の手順で確認します。

1.コントローラーノードで実施(OpenStackコマンドはadmin権限で実行します。)

$ nova hypervisor-servers {コンピュートノード}   # コンピュートノード上のインスタンス名を確認
+--------------------------------------+-------------------+---------------+------------------------+
|            ID                        |     Name          | Hypervisor ID |  Hypervisor Hostname   |
+--------------------------------------+-------------------+---------------+------------------------+
| ed3a9884-afd8-40bf-9dbc-1b95c517e8e1 | instance-000000c0 | 11            | compute_node           |
+--------------------------------------+-------------------+---------------+------------------------+

$ cinder list --all-tenants  # ボリュームのIDを確認
+-------------------------+-----------------+--------+--------------+------+-------------+----------+--------------------------------------+
|              ID         | Tenant ID       | Status | Display Name | Size | Volume Type | Bootable |   Attached to                        |
+-------------------------+-----------------+--------+--------------+------+-------------+----------+--------------------------------------+
| {Cinder ID}             |  (略)           | in-use | (略)         | 20   | None        |  false   | ed3a9884-afd8-40bf-9dbc-1b95c517e8e1 |
+-------------------------+-----------------+--------+--------------+------+-------------+----------+--------------------------------------+

$ rbd -p volumes ls -l   # volumesプール上のrbdイメージを確認
NAME SIZE PARENT FMT PROT LOCK
volume-{cinderボリュームのID} 20480M 2

コンピュートノードでvirshコマンドを実行すると以下のようにvdbにボリュームがマウントされていることが確認できます。

$ virsh domblklist instance-000000c0  # virshで管理しているイメージのブロックデバイスを表示
ターゲット ソース
------------------------------------------------
vda /var/lib/nova/instances/ed3a9884-afd8-40bf-9dbc-1b95c517e8e1/disk
vdb volumes/volume-{Cinder ID}    #これが Ceph上のボリューム

by @kumagai19o

このブログの記事に関するご意見等は #bird_blog までお願いします。

関連記事

affinity_swift-get-node

Swift のグローバルクラスタ(2) affinity の設定

Swift のグローバルクラスタ(2) affinity 山縣です。Havana 版(1.10.0)

記事を読む

no image

CLIによるSwiftへのアクセス(前編) ~ Swiftによるオブジェクトストレージシステムの構築(3)

by yamagata 2013/1/30(Swift関連の記事の一覧はこちらをご覧ください)(2/

記事を読む

no image

Swift のグローバルクラスタ (3) Icehouse 開発版でのテスト結果

2014.4.14 by You Yamagata 山縣です。 前回・前々回でグローバルクラスタ対応

記事を読む

no image

Grizzlyの新機能(2) SLO ~ Swiftによるオブジェクトストレージシステムの構築(10)

by You Yamagata 2013.06.10 (Swift関連の記事の一覧は 

記事を読む

no image

Keystone認証の利用 ~ Swiftによるオブジェクトストレージシステムの構築(9)

by You Yamagata 2013.05.13 (Last updated 2013

記事を読む

no image

CLIによるSwiftへのアクセス(後編) ~ Swiftによるオブジェクトストレージシステムの構築(4)

by yamagata 2013/2/7(Swift関連の記事の一覧はこちらをご覧ください)前回の

記事を読む

newton

Juju Manual Cloud で OpenStack 環境構築

本当にご無沙汰しております。 この投稿はOpenStack Advent Calendar 201

記事を読む

no image

Pythonライブラリによる Swift の操作 ~ Swiftによるオブジェクトストレージシステムの構築(6)

by Yamagata 2013.03.14(Swift関連の記事の一覧はこちらをご覧ください)前回

記事を読む

no image

Swift 1.12.0 CHANGELOG の翻訳

by You Yamagata 2013.02.04ビットアイル総研の山縣です。Swift の ve

記事を読む

no image

Swift 1.11.0 CHANGELOG の翻訳

by You Yamagata 2013.1.23(Swift関連の記事の一覧は インデッ

記事を読む

no image

ビットアイル総合研究所は、クラウド技術に関する調査&研究を通して、社会と会社に寄与していくことを目的に、ビットアイル・エクイニクスの企業内研究所として2011年8月に設立されました。

openstack-figure1-2x
COHO DataStream のCinder連携

OpenStack Cinder のストレージバックエンドとしてはCe

blog-ocata
Jujuで Ocataを含む様々なバージョンのOpenStack をデプロイする方法

祝OpenStack Ocata リリース!! ということで、早速デプ

newton
Juju Manual Cloud で OpenStack 環境構築

本当にご無沙汰しております。 この投稿はOpenStack Adve

top
HACK! THE Juju/MAAS

6/8~6/10まで幕張メッセで開催されたInterop 2016。皆

dpdk
OpenStack OVS VXLAN ネットワークの高速化

少し前の話になりますが、3月2日に開催された 日本仮想化技術株式会社様

→もっと見る

PAGE TOP ↑