OpenStackの新機能、Cinderを使う

図1 ボリュームの管理はOpenStack Dashboardからも実行できる

 OpenStack 2012.2(コードネーム「Folsom」)で追加された新たなコンポーネントの1つに、ブロックストレージの管理を行う「Cinder」がある。従来は「Nova」というコンポーネントがこの機能を提供していたが、Folsom以降ではCinderへの移行が進められている。本記事では、LVMおよびNFSと組み合わせてCinderを利用するための基本的な設定やその使い方を紹介する。

既存のコンポーネントからからボリュームストレージ機能が独立、選択肢が増える

 最近「クラウド」という言葉が多方面で使われているが、インフラストラクチャ関連でクラウドというとAmazon Web Service(AWS)やGoogle App Engine、Windows Azureなどのような、仮想化されたサーバーを提供するサービスのことを指すことが多い。OpenStackはこれらのようなクラウドインフラストラクチャサービスを構築するためのソフトウェア集である。

 OpenStackについては以前「さくらの専用サーバとOpenStackで作るプライベートクラウド」という記事でも解説を行っているためそちらを参照してほしいが、2012年9月27日にリリースされたOpenStackで6番目となるメジャーリリース「OpenStack 2012.2(コードネーム「Folsom」)では、新たにブロックストレージサービス「Cinder」やネットワークサービス「Quantum」といったコンポーネントが追加されている。

 OpenStackは機能ごとに別々のコンポーネントに分割されており、それぞれにコードネームが付けられている(表1)。

表1 OpenStackのコンポーネント
サービス名コードネーム説明
IdentityKeystoneOpenStackシステムのユーザー管理を行う
ComputeNova仮想マシンの管理・運用を行う
Image ServiceGlance仮想マシンの作成に使用する仮想イメージの管理を行う
DashboardHorizonWebブラウザ経由でOpenStackを管理・操作できるGUIコンソールを提供する
Object StorageSwiftAmazon S3のようなクラウドストレージを提供する
Block StorageCinder仮想マシンが使用するストレージの管理を行う
Network ServiceQuantum仮想ネットワークの管理を行う

 Folsomで追加されたCinderおよびQuantumは、元々はComputeサービスを提供するコンポーネントである「Nova」に含まれていた機能を独立されたものだ。Novaは仮想マシンの作成や設定、管理といった機能を提供するコンポーネントだが、それに付随して必要となる仮想ストレージの管理サービス(nova-volumeサービス)やネットワーク管理サービス(nova-networkサービス)などの機能も備えていた。これらの機能を独立したコンポーネントとして実装したものがCinderおよびQuantumとなる。

 Folsomでは仮想ストレージやネットワークの管理に従来どおりnova-volumeやnova-networkを利用することも可能だが、これらの機能は今後廃止されることになっている。また、CinderやQuantumではより柔軟な構成を実現できるほか機能も強化されているため、新たにプライベートクラウド環境を構築するならこれらの利用を検討すべきだろう。ただし、Quantumについてはまだ一部未実装の機能もあり、nova-networkと完全に同一の構成は実現できない場合があるのでその点にも留意したい。

 なお、以下ではCentOS 6.3(64ビット)環境を使ってCinderのインストールや設定方法を解説していく。CentOSの標準リポジトリではOpenStack関連パッケージは提供されていないため、EPEL(Extra Packages for Enterprise Linux)というFedoraプロジェクトが提供しているパッケージリポジトリも利用している。EPELの利用方法については前述の「さくらの専用サーバとOpenStackで作るプライベートクラウド」という記事でも説明している。また、Cinder以外のコンポーネントの基本的なインストール/設定方法についてはOpenStack 2012.1(essex)からほぼ変わっていないので、こちらについてもこの記事を参照してほしい。

OpenStackにおける「ボリューム」とCinder

 Cinder(Block Storage Service)は仮想マシンインスタンスが使用するブロックストレージデバイス(「ボリューム」)を提供するサービスで、以下のような機能を備えている。

・ボリュームの作成/削除 ・テナントごとのquotaの設定 ・スナップショットの作成/削除

 OpenStackでの仮想マシンインスタンスには一定容量のローカルストレージが割り当てられているが、これらは仮想マシンインスタンスを削除すると同時に消えてしまう。そのため、ブロックストレージは永続化したいデータを保存するのに使われる。ブロックストレージはnovaコマンドやHorizon(ダッシュボード)からの操作に応じて指定されたストレージデバイス上に確保され、インスタンスに接続される。接続されたブロックストレージは仮想マシンで稼働しているOSからブロックデバイスとして認識され、OSからフォーマットやマウントを行ってファイルシステムとして利用できる。

 CinderはNovaの一部(nova-volume)のソースコードをベースとして開発されており、nova-volumeと同様にドライバを切り替えることでLVMやSANなど各種ストレージデバイスをバックエンドとして利用できる。デフォルトのドライバではLVMを使用するようになっているが、NFSボリュームや各種iSCSIデバイス、NetAppやNexenta、EMCなどのストレージシステムなどを利用することも可能だ。

nova-volumeからCinderへの移行

 Cinderはnova-volumeと同じAPIを提供している。そのため、nova-volumeを利用してすでに構築された環境でCinderを利用する場合はnova-volumeサービスを停止させ、APIエンドポイントなどの設定をあらかじめ削除しておく必要がある。また、データベースの移行などの作業も必要だ。データベースの移行については、cinder-manage migrateコマンドで行える。詳しい手順は環境によって異なるため割愛するが、詳しくはOpenStackのWikiページで解説されているので、そちらを確認していただきたい。

 また、APIエンドポイントの設定削除は以下のようにして行える。まず、Novaを稼働させているホストでnova-volumeサービスを停止させる。

# service openstack-nova-volume stop

 続いて、keystoneからnova-volumeサービス関連のエントリを削除しておく。この作業はkeystoneが稼働しているホスト上で行う。まず、下記のようにexportコマンドを実行してSERVICE_TOKENおよびSERVICE_ENDPOINT環境変数を適切に設定しておく。

export SERVICE_TOKEN=<keystoneの設定用サービストークン文字列>
export SERVICE_ENDPOINT=http://localhost:35357/v2.0/

 次に、以下のようにしてvolumeサービスのエントリを削除しておく。まず、keystone service-listコマンドで削除すべきサービスを確認する。

$ keystone service-list
+----------------------------------+----------+--------------+---------------------------+
|                id                |   name   |     type     |        description        |
+----------------------------------+----------+--------------+---------------------------+
| 84a7bfda5d86469390bd02598465ea58 | volume   | volume       | Nova Volume Service       |
| 8e0edd993fb24d06b785b1c6f9f16110 | nova     | compute      | Nova Compute Service      |
| e88a405a79bc416cb6ec0a710b48bec0 | glance   | image        | Glance Image Service      |
| f782c561f238407ebff6e2c51af5548e | keystone | identity     | Keystone Identity Service |
+----------------------------------+----------+--------------+---------------------------+

 この場合、volumeサービスのIDは「84a7bfda5d86469390bd02598465ea58」となっている。続いてこのIDを引数にkeystone service-deleteコマンドを実行してサービスを削除する。

$ keystone service-delete 84a7bfda5d86469390bd02598465ea58

 最後にkeystone endpoint-listコマンドでエンドポイント一覧を確認し、削除すべきエンドポイントを確認する。

$ keystone endpoint-list
+----------------------------------+-----------+---------------------------------------------+---------------------------------------------+---------------------------------------------+----------------------------------+
|                id                |   region  |                  publicurl                  |                 internalurl                 |                   adminurl                  |            service_id            |
+----------------------------------+-----------+---------------------------------------------+---------------------------------------------+---------------------------------------------+----------------------------------+
| 057bb1d67bb143e8971364ecaae6ad1e | RegionOne | http://192.168.100.21:8776/v1/%(tenant_id)s | http://192.168.100.21:8776/v1/%(tenant_id)s | http://192.168.100.21:8776/v1/%(tenant_id)s | 84a7bfda5d86469390bd02598465ea58 |
| 05de5c6dc9d346eb9c3eece39b0839df | RegionOne | http://192.168.100.21:8774/v2/%(tenant_id)s | http://192.168.100.21:8774/v2/%(tenant_id)s | http://192.168.100.21:8774/v2/%(tenant_id)s | 8e0edd993fb24d06b785b1c6f9f16110 |
| 29d928e55d604d64a63de3e05022c35e | RegionOne | http://192.168.100.21:9292/v1               | http://192.168.100.21:9292/v1               | http://192.168.100.21:9292/v1               | e88a405a79bc416cb6ec0a710b48bec0 |
| 9ef64ef3fcb84456bdd7ac16374d28c9 | RegionOne | http://192.168.100.21:5000/v2.0             | http://192.168.100.21:5000/v2.0             | http://192.168.100.21:35357/v2.0            | f782c561f238407ebff6e2c51af5548e |
+----------------------------------+-----------+---------------------------------------------+---------------------------------------------+---------------------------------------------+----------------------------------+

 この場合、volumeサービスのIDである「84a7bfda5d86469390bd02598465ea58」に対応するエンドポイントのIDは「057bb1d67bb143e8971364ecaae6ad1e」となっている。このIDを引数にkeystone endpoint-deleteコマンドを実行してエンドポイントを削除する。

$ keystone endpoint-delete 057bb1d67bb143e8971364ecaae6ad1e
Endpoint has been deleted.

 以上でnova-volume関連設定の削除は完了だ。