東京電機大学 工学部 情報通信工学科
ネットワークシステム研究室
指導教員 坂本 直志
14EC076 田中 良寛
近年、クラウドサービスは右肩上がりの成長続け、注目を集めている。
クラウドサービスには、提供するサービスによって呼び方が異なり様々な種類があるが、主なものはInfrastructure as a Service (IaaS)、Platform as a Service (PaaS)、Software as a Service (SaaS)の3種類である。 laaSではリモート接続できる仮想環境上のコンピュータを提供し、利用者は通常のネットワークサーバを構築してサービスを用意する必要がある。 PaaSではクラウドが提供するのはAPIとアプリケーションを実行する環境を提供するため、利用者は端末のほかにクラウドで実行するアプリケーションを用意する必要がある。 SaaSでは クラウドはアプリケーションを提供するため、利用者はクライアントの端末を使って、提供されたアプリケーションを利用する。 このように、この3種類は提供する領域が段階的に変わる。 また、これらのサービスをどのように使用するかについても呼び方がある。 サービスプロバイダと契約してリソースの一部を使用するものをパブリッククラウドと呼び、自社専用のサーバでクラウドシステムを動かすものをプライベートクラウドと呼ぶ。 さらに、このプライベートクラウドには2種類あり、自社でクラウド環境を用意しサーバを所有し運用する場合はオンプレミス型となり、外部の事業者にサーバを借りて運用を任せる場合はホステッド型となる。 ホステッド型はパブリッククラウドと似ているが、同じサーバを他の利用者と共有しないところに大きな違いがある。
このように様々な種類のサービスや使用方法があるクラウドサービスだが、平成29年版情報通信白書によると、今後、全体的に成長していくのはもちろんだが、特にIaaSが今後成長していくという。 このIaaSは日本の企業も含めて様々な企業がサービスを行っているが、一番有名なのは、Amazon Web Services(AWS)が提供する、Amazon Elastic Compute Cloud (Amazon EC2)である。 一方、Amazon EC2に対抗するために作られたOpenStackは、オープンソースソフトウェア(OSS)として開発されているため、誰でもクラウドサービスを構築することが出来る。 このOpenStackは日本でも実際にJFEスチール、NTTドコモ、富士通などで、社内システムを構築するための基盤として導入されている。 また、GMOインターネット株式会社のConoHaやNHN テコラス株式会社のCloudGarageはOpenStackの技術を基盤に使用したIaaSのサービスを行っている。 本研究では、今後も成長を続けていくと期待されているOpenStackについて調べ、OpenStackの今後の展望について考察した。
Rackspace Hostingは、1998年に創業してホスティング事業を行っていたが、Amazonは2006年にAmazon Web Services(AWS)という外部からAPI(Application Programming Interface)経由で操作できるセルフサービス方式のIaaSサービス(Amazon EC2)を独自に開発して提供を開始したことを受け、Rackspace Hostingは、自社の優位性を保つためにはこれに対抗する必要があると考えた。 しかし、少人数のソフトウエア開発者しか雇用していないため、数千人規模のソフトウェア開発者をかかえるAWSに対抗するのは難しいため、自社で開発した技術をOSSとして公開し、他社の協力を得ることが必要だと考え、クラウド事業推進のために既に開発を終えていたストレージツールを基盤として使用することにした。
一方、この頃NASAは研究に必要な計算に対するデータ量の増大につれストレージや処理能力を必要に応じて利用できることが要求されるようになり、これらの解決としてオンデマンドかつAPIで操作可能な仮想マシンとストレージが必要だと考え、開発を行っていた。そして先に開発を始めていた仮想マシンツールの開発が終わりを迎え、ストレージの開発を行おうとしていた。
この両者はオープンでスケーラブルなクラウドの必要性という点で考えが一致していたため、NASAが仮想マシンツール、Rackspaceがストレージツールを提供する形で開発を行いOpenStackをOSSとして公開した。
その後OpenStackプロジェクトはOpenStack Foundationという非営利団体によって運営されるようになった。このコミュニティには、現在では世界中から187カ国から82000人以上のメンバーが参加するようになった。活動としては、コミュニティの管理のほかOpenStack Summitなどのイベントを行っている。現在、理事会に籍を置くプラチナメンバーは「AT&T」「Ericsson」「Huawei」「IBM」「Intel」「Rackspace」「Red Hat, Inc.」「SUSE」の8社である。
尚、もともとOpenStackプロジェクトはRackspace Hostingが開発主体となっていたが、Rackspace Hostingが他社に買収されることによって、OpenStackの開発方針が変わり、それまでIBMやレッドハットなど外部の企業がOpenStackの開発のために多額の投資をしていたことが無駄になることを恐れ、OpenStackプロジェクトは2012年9月19日にRackspace Hostingから独立した組織としてOpenStack Foundationを設立した。現在ではOpenStack FoundationはOSS関連の団体としては世界第二位の規模を誇っている。
ここでは、OpenStackのライセンス、構成、API、バージョンについて説明していく。
現在、OpenStackのライセンスはApache License 2.0になっている。 このApache License2.0にはソフトウェアの使用に関して制限が無いことになっている。 また、元のライセンスのコピーを含めなければならない、変更した場合は変更したことを分かるように記述しなければならない、などの条件はあるが、ソフトウエアの複製や頒布も出来る。従って、個人や企業がOpenStackの使用に契約や使用料などが発生しないことはもちろんだが、企業がOpenStackを利用して商用サービスを行うことや、独自の機能を追加して販売することも可能である。
OpenStackは複数のサービスが連携することによって動いている。
これを主なサービスに関して図式すると図1のようになる。
実線は外部からのアクセス、破線は内部の通信を表す。
主なサービスの主な役割をまとめたものは表1になる。
表1:OpenStackのサービス一覧
サービス | プロジェクト名 | 説明 |
---|---|---|
Dashboard | Horizon | OpenStackで提供されるサービスを操作するための拡張可能なWebベースのUIを提供する |
Compute | Nova | 仮想マシンなどのリソースを管理する |
Networking | Neutron | 仮想コンピューティング環境などに提供する仮想ネットワークを管理する |
Object Storage | Swift | HTTPベースのAPIで操作を行い、データをファイル単位ではなく、オブジェクトという単位で扱うストレージシステムを提供する |
Block Storage | Cinder | 仮想のブロックストレージディバイスを管理し、インスタンスに提供する |
Identity service | Keystone | APIクライアントなどの認証を行うためのAPIサービスを提供する |
Image service | Glance | 仮想マシンディスクイメージの登録や取得の管理を行う |
オブジェクトストレージ(*1)は画像や動画などのファイルをオブジェクトという単位として扱うものである。利用方法としては、HTTPで操作できるためwebサービスで使用するデータを保存などに使われる。
ブロックストレージ(*2)はブロックと呼ばれる一定の大きさのデータ単位で扱うストレージシステムのことである。利用方法としては、インスタンスにとってOSなどが保存されるHDDのように使われる。
OpenStackでは、各サービスごとに専用のAPIが用意されていて、ユーザーがサービスを操作する時だけでなく、サービスが他のサービスを操作する時もこのAPIを使用する。
現在使用できるAPIは表2になる。
表2:OpenStackのAPI一覧
現行のAPI(非推奨なものは除く) |
---|
Application Catalog API v1 |
Application Container Service API |
Backup API v1 |
Bare Metal API v1 |
Block Storage API v3 |
Clustering API v1 |
Compute API (*1) |
Container Infrastructure Management API |
Data Processing v1.1 |
Data Protection Orchestration v1 |
Database Service API v1.0 |
Domain Name Server (DNS) API v2 |
EC2 API Service (*2) |
Identity API v3 |
Identity API v3 extensions |
Image service API v2 |
Load Balancer API v2 |
Messaging API v2 |
Networking API v2.0 |
NFV Orchestration API v1.0 |
Object Storage API v1 (*3) |
Orchestration API v1 |
Search API v1 |
Shared File Systems API v2 |
各サービスに備わっているAPIのほとんどはOpenStack独自のものだが、Novaに備わっているAPIにはCompute API (*1) と呼ばれる独自のAPI以外にAWSのAmazon EC2との互換性のあるEC2 API (*2) が追加で備わっている。 また、Swiftに標準で備わっているものは独自APIのObject Storage API (*3) のみだが公式のリポジトリからインストールすることによってAWSのAmazon S3(Amazon Simple Storage Service)との互換のあるS3 APIが使用できるようになっている。
OpenStackのリリースサイクルは基本6ヶ月である。 GrizzlyからNewtonまでは4月と10月にリリースが行われていたが、Ocataから二か月ずれて2月と8月になっている。名付け方はアルファベット順になっており、現在の最新バージョンはPikeである。次のバージョンとなるQueensは公式のドキュメントによると2018年2月28日にリリースされることになっている。
Queensも含めたバージョンの履歴は表3になる。
表3:OpenStackのバージョン一覧
シリーズ | リリース日 | サポート終了日 |
---|---|---|
Austin | 2010-10-21 | 不明 |
Bexar | 2011-02-03 | 不明 |
Cactus | 2011-04-15 | 不明 |
Diablo | 2011-09-22 | 2013-05-06 |
Essex | 2012-04-05 | 2013-05-06 |
Folsom | 2012-09-27 | 2013-11-19 |
Grizzly | 2013-04-04 | 2014-03-29 |
Havana | 2013-10-17 | 2014-09-30 |
Icehouse | 2014-04-17 | 2015-07-02 |
Juno | 2014-10-16 | 2015-12-07 |
Kilo | 2015-04-30 | 2016-05-02 |
Liberty | 2015-10-15 | 2016-11-17 |
Mitaka | 2016-04-07 | 2017-04-10 |
Newton | 2016-10-06 | 2017-10-11 |
Ocata | 2017-02-22 | 2018-02-26 |
Pike | 2017-08-30 | 2018-09-03 |
Queens | 2018-02-28 | 未定 |
ここではOpenStackの環境を構築する方法を示す。 これには以下の2つの方法がある。
今回は、OpenStack Foundation 公認のユーザグループである日本OpenStackユーザー会のページに一番簡単な評価環境のインストール方法として公開されている、CentOSでPackstackを使用する方法を示す。Packstackのインストール方法はRDOにある方法を参考にする。RDOはPackstackを提供するコミュニティである。
使用した環境は表4となる。
表4:使用した環境
使用環境 | |
---|---|
OS | CentOS Linux release 7.4.1708 (Core) |
カーネル | 3.10.0-693.el7.x86_64 |
割り当てIP | 192.168.10.50 |
環境変数を設定する必要があるため/etc/environmentに以下の内容を記述して再起動する。
LANG=en_US.utf-8
LC_ALL=en_US.utf-8
手順は以下の項目になる。
この6項目は以下のコマンドで実行できる。
# systemctl disable firewalld
# systemctl stop firewalld
# systemctl disable NetworkManager
# systemctl stop NetworkManager
# systemctl enable network
# systemctl start network
手順は以下の項目になる
この3項目は以下のコマンドで実行できる。
# yum install -y centos-release-openstack-pike
# yum update -y
# yum install -y openstack-packstack
Block Storageの容量の変更とNeutronの設定を行うための設定ファイルの作成と編集を行う。
以下のコマンドを実行すると設定ファイルのひな形が作成される。
# packstack --gen-answer-file=~/answers.cfg
作成されたanswers.cfgというテキストファイルには設定の項目とデフォルト値が列挙されている。
まず、Block Storageの容量を変更する。
CONFIG_CINDER_VOLUMES_SIZE={割り当て容量}
次にインスタンスと外部のネットワークを繋げるようにするためにNeutronの設定を行う。
まず、仮想スイッチと物理インターフェイスを接続するための設定を行う。
CONFIG_NEUTRON_OVS_BRIDGE_IFACES=br-ex:{使用するNIC}
次に、仮想スイッチに接続する仮想インターフェースの名前を設定する。
CONFIG_NEUTRON_OVS_BRIDGE_MAPPINGS={仮想NICの名前}:br-ex
設定を終えたらファイルを保存する。
以下のコマンドを実行して、変更を加えたanswers.cfgの内容を適応させてOpenStackのインストールを行う。また、timeout=0と設定するとインストール時間に制限がなくなりインストールに時間がかかっても止まらなくなる。
# packstack --timeout=0 --answer-file=~/answers.cfg
実行すると図2の様になりインストールが開始される。
インストールが完了すると図3のように表示される。
以上でOpenStackの環境が構築できた。
ユーザーがOpenStackのサービスを操作する方法は主に以下の3つ用意されている。
今回は、例として稼働しているインスタンスの一覧を取得することにする。 インスタンスの一覧を取得するにあたって、インスタンスがなければ表示できないため事前にDEMO1、DEMO2、DEMO3、DEMO4、DEMO5という名前の5つのインスタンスを立てた。
Dashboardにアクセスするには、Packstackインストール完了時に表示される図4の赤枠の中にあるURLにアクセスする。
アクセスすると図5のようなログイン画面が表示される。
正しいユーザー名とパスワードを入力したのち接続を押すとログインできる。
ログインが出来ると図6のようなページが表示される。
横にあるメニューバーを「プロジェクト(①)」、「コンピュート(②)」、「インスタンス(③)」の順で押す。
実際に開くと図8のようになる。
これで、インスタンスの一覧を確認できた。
コマンドラインクライアントは、Packstackを利用してインストールした場合OpenStackのサービスとともにインストールされる。 コマンドラインクライアントを使用するには、環境変数を設定する必要がある。 この設定を行うためにDashboardからダウンロードできるOpenStack RCファイルを使用する。
OpenStack RCファイルは、Dashboardの横にあるメニューバーを「プロジェクト(①)」、「APIアクセス(②)」の順で押し、APIアクセスに関するページを表示させ、そのページにある「OpenStack RCファイルのダウンロード(③)」を押してメニューにある「OpenStack RCファイル (Identity API v3) (④)」を押すことによってダウンロード出来る。
ダウンロードしたOpenStack RCファイル(admin-openrc.sh)を実行すると 図10のようにパスワードを要求されるので入力する。
パスワード入力終えたら、コマンドラインクライアントが使えるようになるためインスタンスを取得するコマンドを実行することが出来るようになる。実行すると図11のような結果が返ってくる。
これで、インスタンスの一覧を確認できた。
OpenStackが提供するAPIでインスタンスの一覧を取得するにはCompute APIを使用する必要がある。また、このCompute APIはHTTPで通信を行う必要があるため、今回はcurlコマンドを使用する。
Compute APIを使用するにはIdentity APIを使用して認証を行い、トークンを取得する必要がある。この時ユーザー名、パスワード以外にプロジェクトを指定する必要がある。このプロジェクトとはユーザーが所属し、インスタンスなどをまとめて管理するためのグループのことである。そのため、違うグループに属するインスタンスにはアクセス出来ない。
ユーザーが所属するプロジェクト一覧の確認はIdentity APIで行える。 まず、ユーザー名とパスワードを指定して認証を行う。このとき以下のようなコマンドを使用する。
curl -v \
-X POST http:/サーバアドレス:5000/v3/auth/tokens \
-H "Content-Type: application/json" \
-d '
{
"auth": {
"identity": {
"methods": ["password"],
"password": {
"user": {
"name": "ユーザー名",
"domain": {"name": "Default" },
"password": "パスワード"
}
}
}
}
}' \
| python -m json.tool
実行すると図12のような結果が返ってくる。
図12の赤枠で囲まれているレスポンスヘッダのX-Subject-TokenはトークンとなるのでX-Auth-Tokenヘッダに追加し以下のようにアクセスする。
curl -v \
-X GET http://サーバアドレス:5000/v3/auth/projects \
-H "X-Auth-Token: 図12にあるX-Subject-Tokenの値 " \
| python -m json.tool
実行すると図13のような結果が返ってくる。
緑の枠で囲まれているのが個々のプロジェクト情報である。 また、赤枠は個々のプロジェクト名である。 今回使用したユーザーは「admin」「demo」という2つのプロジェクトに属していることが確認できた。 これで、所属するプロジェクトが分かるようになったので、以下のようにユーザー名、パスワード、プロジェクトを指定して、もう一度認証を行う。
curl -v \
-X POST http://サーバーアドレス:5000/v3/auth/tokens \
-H "Content-Type: application/json" \
-d '
{ "auth": {
"identity": {
"methods": ["password"],
"password": {
"user": {
"name": "ユーザー名",
"domain": { "id": "default" },
"password": "パスワード"
}
}
},
"scope": {
"project": {
"name": "プロジェクト名",
"domain": { "id": "default" }
}
}
}
}' \
| python -m json.tool
実行すると図14のような結果が返ってくる。
図12と同じように図14の赤枠で囲まれているレスポンスヘッダのX-Subject-Tokenはトークンとなる。
今回は 図12の時とは違いレスポンスボディには各APIにアクセスするためのURLが記述されている。
Compute APIを使用するため赤の下線がcomputeとなっているものを使用する。緑の枠で囲まれているのが個々のAPIにアクセスするための情報である。今回Compute APIにアクセスするためのURLは赤枠で囲まれているものを使用する。 これでCompute APIにアクセスするためのURLとトークンが分かったので以下のようにしてCompute APIにアクセスする。
curl -v \
-X GET 図15の赤枠にあるURL/servers \
-H "X-Auth-Token: 図14にあるX-Subject-Tokenの値 " \
| python -m json.tool
実行すると図16のような結果が返ってくる。
赤枠で囲まれているのがインスタンスの名前になる。 これで、インスタンスの一覧を確認できた。
Compute APIではコマンドラインクライアントと比べて一度に取得できる情報が少ない。コマンドラインクライアントではID、Name、Status、Networks、Image、Flavorの6つだが、Compute APIではID(id)、Links(links)、Name(name)の3つであり、これ以上の情報を取得するためにはLinksにあるURLにリクエストを行う必要がある。
この3つの利用方法としては、Dashboardとコマンドラインクライアントは、ユーザーがOpenStackのサービスを操作する時に使用し、Compute APIはプログラムで操作する場合に使用する。
OpenStackのユーザー調査によると、OpenStackはオンプレミス型のプライベートクラウド基盤として使われていることが多い。
オンプレミス型のプライベートクラウドとして考えられる使用方法は、社内で使用するために、社内に設置されるクラウド環境が多いと考える。 オンプレミス型のプライベートクラウドは、AWSやMicrosoft Azure、 Google Cloud Platformなどのパブリッククラウドと比べて、インスタンスの個数やインスタンスの使用時間に対してお金が掛からないことが利点である。 また従来は、マシンが必要になった場合にはハードウエアやネットワークなどの設定を行わなければならなかったのが、web上のクライアントから必要な環境を指定して作成をクリックするだけで仮想マシンを使えるようになる。さらに仮想マシンは保存や複製を行うことが出来る。 これらの特徴は、柔軟に使えるという点で開発環境やテスト環境に適している。 今後OpenStackは、柔軟に使える環境をオンプレミス型のプライベートクラウドとして構築するユーザーにとってのデファクトスタンダードになると考える。
これまで、OpenStackについて説明してきた。 OpenStackは元々AWSに対抗するために作られたものであったため、当初はAWSのようなパブリッククラウドの置き換えとして成長してきたものだったが、現在はプライベートクラウドを構築するための基盤として、注目を集めていることが分かった。 クラウド環境を元々あるサーバなどのリソースを使って構築したい企業や法的な問題やセキュリティ上の決まりから外部にデータを置かずに安全に構築したい企業にとって、OpenStackが重要な存在であることが分かったと思う。 また、さらにパブリッククラウドに関しては、IaaSのサービスを展開しようと思っている企業が一から開発をする必要がなくなり開発コストが下がることによって、提供するIaaSサービスの料金が下がり、手頃な価格のIaaSが増えていくことが期待できる。 ただ、これによってAWSなどの大手サービスと争うということになる訳ではなく、ユーザーとって選択肢が増えることになり、全体としてクラウドサービスの利用者が増えることを期待する。
今回の研究では、OpenStackのサービスについて代表的なものしか調べることが出来なかった。そのため今後の課題として、今回扱えなかった多くのサービス調べOpenStackの問題点や用途などについて深く考察したいと思う。