31 Aug 2014, 15:42

OpenStack をとりあえず動かしてみたい! vagrant で OpenStack を初体験したメモ

はじめに

最近とみに OpenStack という単語をきくようになった.

OpenStack がなんなのか知らないと, 何だか日本人なのに納豆がきらいといって白々しい目で見られるような, 子供にそのうち石をなげられるような惨めさを感じる.

というわけで, OpenStack について調べ, さらにはインストールしてみる.

OpenStack とは

まずは, OpenStack とはなにか, しらべてみた.

OpenStack の特徴

<div class="outline-text-3" id="text-2-1">
  <ul class="org-ul">
    <li>
      オープンソースで構成されるクラウド・インフラストラクチャー.
    </li>
    <li>
      クラウドに・インフラに関わるすべてのことが, 共通化されて自動化される.
    </li>
    <li>
      バイナリの API ではなく Web API で呼び出せるため, それぞれは独立性が担保され, 柔軟で開発しやすく使いやすい.
    </li>
    <li>
      Apache ライセンスを採用.
    </li>
    <li>
      IBM や HP など, 大企業が開発を牽引している.
    </li>
    <li>
      AWS クラウド コンピューティングに対するロックイン回避
    </li>
  </ul>
</div>

<div id="outline-container-sec-2-1-1" class="outline-4">
  <h4 id="sec-2-1-1">
    20 年前の Linux のような存在
  </h4>

  <div class="outline-text-4" id="text-2-1-1">
    <p>
      Linux は OpenStack のように, オープンソースであることによって, 早い成長を遂げている.しかし, Linux とおなじではない.
    </p>

    <ul class="org-ul">
      <li>
        草の根 vs 大企業: Linux はコミュニティが作り, その後ベンダーに採用されたテクノロジ.
      </li>
    </ul>

    <p>
      OpenStack は商業的なプロジェクトで, その後コミュニティに公開されたもの.
    </p>

    <p>
      <a href="https://jp.linux.com/news/linuxcom-exclusive/406215-lco201307029">リアリティ チェック: Openstack は第二の Linux ではない</a>
    </p>
  </div>
</div>

<div id="outline-container-sec-2-1-2" class="outline-4">
  <h4 id="sec-2-1-2">
    参考
  </h4>

  <div class="outline-text-4" id="text-2-1-2">
    <ul class="org-ul">
      <li>
        <a href="http://ja.wikipedia.org/wiki/OpenStack">OpenStack &#8211; Wikipedia</a>
      </li>
      <li>
        <a href="http://www.atmarkit.co.jp/ait/articles/1406/10/news039.html">NEC の柴田氏に聞く:OpenStack はなぜこれまで成功してきたのか &#8211; @ IT</a>
      </li>
      <li>
        <a href="http://itpro.nikkeibp.co.jp/article/Keyword/20121029/433321/">Network キーワード &#8211; OpenStack とは:ITpro</a>
      </li>
      <li>
        <a href="http://cloud.watch.impress.co.jp/docs/column/cloud/20140404_642748.html">【クラウド特捜部】プレーヤーがそろい表舞台に立つ OpenStack &#8211; クラウド Watch</a>
      </li>
    </ul>
  </div>
</div>

OpenStack のアーキテクチャ

<div class="outline-text-3" id="text-2-2">
  複数のサービスコンポーネントが Web ベースの RestAPI でつながっている. 詳細は, 別ページ参照.</p> 

  <ul class="org-ul">
    <li>
      <a href="http://thinkit.co.jp/story/2014/06/10/4999">OpenStack のアーキテクチャを理解しよう | Think IT (シンクイット)</a>
    </li>
    <li>
      <a href="http://docs.openstack.org/ja/trunk/install-guide/install/apt-debian/content/ch_overview.html">第 1 章 アーキテクチャー &#8211; OpenStack インストールガイド Debian 7.0 (Wheezy) 版 &#8211; juno</a>
    </li>
  </ul>
</div>

OpenStack のインストール方法

OpenStack のインストール方法はいろいろあるようだ.

公式ページのインストール方法.

DevStack

<div class="outline-text-3" id="text-3-1">
  簡単にインストールするためには, DevStack というものが有名なようだ.</p> 

  <ul class="org-ul">
    <li>
      <a href="http://devstack.org/">DevStack &#8211; Deploying OpenStack for Developers</a>
    </li>
    <li>
      <a href="http://www.ospn.jp/press/20120828no27-useit-oss.html"> 「オープンソース」を使ってみよう (第 23 回 DevStack でラクラク導入!</a>
    </li>
    <li>
      <a href="http://momijiame.tumblr.com/post/80665373356/vagrant-devstack-openstack">Vagrant と DevStack で OpenStack をサクッと試す | CUBE SUGAR STORAGE</a>
    </li>
    <li>
      <a href="https://github.com/openstack-dev/devstack.git">https://github.com/openstack-dev/devstack.git</a>
    </li>
  </ul>
</div>

RDO

<div class="outline-text-3" id="text-3-2">
  Linux ディストリビューションを VM 上に入れるという方法もある. RedHat が出している RDO というツールもある.</p> 

  <ul class="org-ul">
    <li>
      <a href="https://openstack.redhat.com/Main_Page">RDO</a>
    </li>
    <li>
      <a href="http://momijiame.tumblr.com/post/80582413671/vagrant-rdo-openstack">Vagrant と RDO で OpenStack をサクッと試す | CUBE SUGAR STORAGE</a>
    </li>
    <li>
      <a href="http://www.atmarkit.co.jp/ait/articles/1311/06/news004_2.html">Havana 登場! 何が変わった?/DevStack で Havana を試すには? (2/3) &#8211; @ IT</a>
    </li>
  </ul>
</div>

VMware Integrated OpenStack

<div class="outline-text-3" id="text-3-3">
  VMware も ディストリを出す予定らしい.</p> 

  <ul class="org-ul">
    <li>
      <a href="http://www.vmware.com/products/openstack">VMware Integrated OpenStack (Beta) | United States</a>
    </li>
    <li>
      <a href="http://www.atmarkit.co.jp/ait/articles/1408/26/news127.html">「 OpenStack の本質は API 」:OpenStack ディストリビューションを発表, ヴイエムウェアは何を考えているか &#8211; @ IT</a>
    </li>
  </ul>
</div>

docker

<div class="outline-text-3" id="text-3-4">
  docker のなかに devstack がはいっているという ちなみに, 自分の環境ではインストールできなかった.</p> 

  <ul class="org-ul">
    <li>
      <a href="https://registry.hub.docker.com/u/ewindisch/dockenstack/">https://registry.hub.docker.com/u/ewindisch/dockenstack/</a>
    </li>
    <li>
      <a href="https://github.com/ewindisch/dockenstack">https://github.com/ewindisch/dockenstack</a>
    </li>
  </ul>
</div>

vagrant-openstack にきめた

いろいろ試してみた (正確に表現すると, 失敗してみた) 結果, vagrant をつかうことにした.

vagrant ってなにってひとは, 過去記事を参照のこと.

environment

<div class="outline-text-3" id="text-4-1">
  <ul class="org-ul">
    <li>
      archlinux
    </li>
    <li>
      vagrant 1.6.3
    </li>
    <li>
      virtualBox 4.3
    </li>
  </ul>
</div>

手順

<div class="outline-text-3" id="text-4-2">
  <p>
    以下の記事から vagrant box があることを知ったので, それを利用する.
  </p>

  <ul class="org-ul">
    <li>
      <a href="http://qiita.com/takuan_osho/items/7f571fb35d282251e5e7">OpenStack 初心者でも Vagrant を使って OpenStack を体験する方法 &#8211; Qiita</a>
    </li>
    <li>
      <a href="https://github.com/TelekomLabs/vagrant-devstack">TelekomLabs/vagrant-devstack</a>
    </li>
  </ul>

  <p>
    github の README にしたがえば, vagrant up して, お茶を飲めと書いてある. 茶どころか, 回線速度が貧弱なので 1 時間くらいかかって, 喫茶店が閉店時間になって追い出されたのだが・・・ (_&#8217;Д`)
  </p>

  <p>
    [sourcecode language=&#8221;sh&#8221; title=&#8221;&#8221;]<br /> git clone https://github.com/TelekomLabs/vagrant-devstack.git<br /> cd vagrant-devstack<br /> vagrant up<br /> [/sourcecode]
  </p>

  <p>
    <a href="http://192.168.50.10/">http://192.168.50.10/</a> にアクセスして, user: admin/ password: devstack でログイン.
  </p>

  <div class="figure">
    <p>
      <img src="http://futurismo.biz/wp-content/uploads/wpid-2014-09-01-003629_632x482_scrot.png" alt="2014-09-01-003629_632x482_scrot.png" />
    </p></p>
  </div>
</div>

OpenStack で開発する

以下はブックマーク.

github リポジトリは以下.

開発に参加するための手引きがまとまっている.

開発やバグ管理は launchpad で実施されているようだ.

開発のための API や SDK とそのドキュメント.

20 Jul 2013, 11:48

既存のCentOSのイメージファイルを使ってvagrant用boxファイルを作ったメモ

既存のvmをbox化する方法がワカラなかったので、自分でvargrant用boxを作成する方法を調べました。

ネットからisoを落としててきてカスタマイズするのは、veeweeやpackerといったツールがあるみたいだけれども、今回はあくまで既存のvmイメージをなんとかする。

公式サイトによると、以下の設定が必要

  • VirtualBox Guest Additionsのインストール(ファイル共有、ポートフォワードのため)
  • SSH の設定
  • Ruby & RubyGemsインストール(Chef and Puppetをインストールするため)
  • Chef and Puppet インストール(プロビジョニングのため)

ちなみに、一番参考になったのは、以下のサイト

[toc]

事前準備

使うのは、もともともっている自分のvmです。こんな歴史のCentOS 6.4 minimal構成。

VMの設定

rootパスワードをvargrantにする

root権限になって、変更

su
vagrant

vagrantユーザを作成する

vagrant userを追加して、adminグループに入れる。

useradd vagrant
passwd vagrant
groupadd admin
usermod -G admin -a vagrant

Permission設定

adminグループにパスワードなしで、sudoできるようにする。

visudo

以下を末尾に追記

vagrant ALL=(ALL) ALL

%admin ALL=(ALL) NOPASSWD:ALL

Defaults env_keep=”SSH_AUTH_SOCK”

requirettyの先頭に!をつける。

Default !requiretty

これをしないと、起動時にこんなエラーが出た。

[default] -- /vagrant
The following SSH command responded with a non-zero exit status.
Vagrant assumes that this means the command failed!

mkdir -p /vagrant

VirtualBox Guest Additionsのインストール

ファイル共有やポートフォワーディングを利用するために、virtualbox guest additionをインストールする。

VirtualBox の [デバイス]-[GuestAdditionインストール]を選択してダウンロード。ダウンロードされたら、ファイルをマウントしてファイルを取り出す。

mkdir /mnt/cdrom
mount -r /dev/cdrom1 /mnt/cdrom
cd /mnt/cdrom/

VBoxLinuxAdditions.runというファイルがあるので、これを実行。

# 念のため
yum -y install gcc kernel-devel
sh VBoxLinuxAdditions.run

CentOSだとエラーしたけど、構わずReboot

Installing the Window System drivers     [FAILED]

これはエラーしても問題はない。以下のコマンドでインストールできたことを確認する。

VBoxControl --version
VBoxService --version

インストールが終わったら、CentOSを再起動する。

ソフトウェアのインストール

以下の5つが必要。

  • Ruby – Use the dev package so mkmf is present for Chef to compile
  • RubyGems – To install the Chef gem
  • Puppet – To install Puppet (also ensure that a ‘puppet’ group is present!)
  • Chef gem – For provisioning support (gem install chef)
  • SSH

Ruby & RubyGemを入れる

yum -y install ruby rubygems

Chef,Puppetのインストール

プロビジョニングのためにChefを入れる

gem install chef --no-ri --no-rdoc
// puppetはいらないかも
gem install puppet --no-ri --no-rdoc

SSH設定

githubにSSHのためのキーがおいてある。

自分でつかうだけならば、この鍵をつかう。boxを公開するきは、自分で鍵を作成する。

vagrantユーザになって、

 mkdir .ssh
 cd  .ssh
 curl 'https://raw.github.com/mitchellh/vagrant/master/keys/vagrant.pub' > authorized_keys
 chmod 0755 .ssh
 chmod 0644 .ssh/authorized_keys

これを叩くとssh高速化するらしい

echo 'UseDNS no' >> /etc/ssh/sshd_config

パッケージ作成

不要なファイルはできるだけ、パッケージ化前に削除しておくこと。

yum clean all

VMの電源を一旦OFFにする。

vagrant package でパッケージを作成する。

vagrant package --base "C:\home\TSUNEMICHI\VirtualBox VMs\Saru\Saru.vbox"

package.boxが作成される。(けっこう時間かかる)

作成できたか確認

実際に、boxをつかってみて、ちゃっとできたか確かめる。

vagrant box add my_box package.box
mkdir test_environment
cd test_environment
vagrant init my_box
vagrant up
vagrant ssh

接続できればOK.接続できなければ、sshの設定が怪しい。

共有フォルダの設定も確認。

touch test
vagrant ssh
less /vagrant

参考

15 Jul 2013, 09:26

ミライの組込み開発!vagrant × sahara × minitestで実現する仮想エンドツーエンドテスト

photo credit: Ѕolo via photopin cc

以前、組込み開発での機能テスト自動化について考察しました。

組込み開発でのエンドツーエンドの課題は、テストが失敗したところから正常な状態まで復旧させることでした。

実際にテストできるかどうかはまだまだ試行錯誤が必要そうだ。実際の仕事で適用するためには、後処理から正常な状態に復旧させる処理が最大の課題だと思っている。

この課題を、仮想環境のスナップショットがコマンドラインから操作できるvagrantとsaharaを利用して解決してみようと思います。

3ヶ月前のリベンジ

3ヶ月前に書いた、Rubyのminitestを利用したスクリプトのなかに、vagrantとsaharaを組込みます。ポイントは、

  • setupでスナップショットから仮想環境を初期化

です。テストが失敗した結果、いくらボロボロに環境を破壊してても、一瞬でもとに戻します。

# sahara rollbackで初期化
system( 'vagrant sandbox rollback' )

 mkdirするサンプルテスト

動画

[//www.youtube.com/embed/Ct7ivafdpoY?rel=0]

ミライの組込み開発

GOOS本を読んでから、ウォーキングスケルトンを組込み開発でどうやってつくればいいのか、ずっと頭を悩ませていた。(そして、途中で読むのをやめてしまった。。えっ?(・・?)

vagrant、これが、答えだ! ( ー`дー´)キリッ

vagrantとsaharaを利用したエンドツーエンドテスト、革命的な方法だと思う。

githubのReadmeを読むと、Acceptance Tests用の追加機能もあるっぽいのでもう少し調べてみる。

会社では、quemで作成されたシミュレータをCentOS上で動作させてテストしたりしてる。vagrantとsaharaを利用すれば、quemで作られたシミュレータも一瞬で初期化できるのだ。もっとも、quem自体にスナップショット機能があるっぽいけど。。

実機がないけど、シミュレータを利用してテスト出来て、いくらでも壊して一瞬で復元できる。。。これが、ミライの組込み開発。

これって、すごいことじゃないか?

15 Jul 2013, 00:47

仮想環境を破壊しまくっても大丈夫だ、問題ない。vagrantプラグイン『sahara』

vagrantのプラグイン、saharaを使ってVirtualBox上のCentOSを破壊しました。

photo credit: mariusz kluzniak via photopin

[toc]

saharaとは

saharaはvagrantのプラグインです。

saharaを使うと、以下のようなことがコマンドラインからできます。

  • 仮想マシンのスナップショットを作成
  • スナップショットから仮想マシンを復元

つまり、仮想マシンをボロボロのメタメタのケチョンケチョンに破壊しまくっても、

元に戻せるのです!( ̄ー ̄)

saharaのインストール

$ vagrant plugin install sahara
Installing the 'sahara' plugin. This can take a few minutes...
Installed the plugin 'sahara (0.0.15)'!

saharaの使い方

コマンドは以下の4つです。

  • vagrant sandbox on
  • vagrant sandbox commit
  • vagrant sandbox rollback
  • vagrant sandbox off

簡単な例

ここでは、 /usr配下をうっかり削除してしまい、復元しようと思います。

まずは、事前にvmを立ちあげときます。

$ vagrant up
サンドボックス有効化

saharaを利用するためには、sandboxモードを有効化します。

$ vagrant sandbox on
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%

GUIからも、スナップショットが作成されたことが確認できます。


以下のフォルダに格納されました。

C:\home\TSUNEMICHI\VirtualBox VMs\centos_1373847520\Snapshots
スナップショットから以前の状態を復元

rollbackコマンドでsandboxモードを有効化した時点に戻ることができます。

$ vagrant sandbox rollback
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%

それでは、ここでうっかりディレクトリ削除をしてみます。

$ vagrant ssh
$ su # root passwordは vagrant
$ rm -rf /usr

うひゃあ 。゚(゚´Д`゚)゚。

$ ls /usr
ls: cannot access /usr: No such file or directory

でも、大丈夫だよ (´・ω・)っ□

$ vagrant sandbox rollback
$ vagrant ssh
$ ls /usr/
bin  etc  games  include  lib  lib64  libexec  local  sbin  share  src  tmp

よかったねー。(っ´∀`)っ


[//www.youtube.com/embed/uviNa0kyVX8?rel=0]

サンドボックス無効化

saharaをもう利用しない時は、sandboxモードを無効化します。ちなみに、けっこう時間がかかります。

$ vagrant sandbox off
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%

スナップショットは以下に保存されています。もちろん、VirtualBoxからもスナップショットの管理ができます。

スナップショット作成

commitコマンドで現在の状態を保存します。これによって、rollbackで戻れる時点を変更できます。これはスナップショットを一旦削除するので、時間がかかります。

$ vagrant sandbox commit

内部的には、sandbox offしてonしているだけに見えます。

パフォーマンスについて

時間はどうなの?

sandbox onと sandbox rollbackは一瞬で終わります。sandbox offとsandbox commitスナップショットの削除時間が入るので、数分かかります。

とくに、sandbox rollbackが一瞬で完了するのは素晴らしいです。これなら、エンドツーエンドテストに十分応用可能なスピードです。

容量はどうなの?

スナップショットをたくさんとった時の気になる容量を確認しました。

CentOS 6.4 Minimal の元ファイルが1.5GBのスナップショットは 63.8 MB でした。このくらいならば、許せるレベル。僕の貧弱マシンでも大丈夫です。

参考

525A3%2525E3%252583%2525BC_2013-7-14_15-7-43_No-00.jpg

14 Jul 2013, 23:06

vagrantがスゲエ!コマンドラインからVirtualBoxを自由自在に操る方法

前回、VirtualBoxの導入をしました。

今回は、VirtualBoxをコマンドラインから操作することができるVagrantを使ってみようと思います。

[toc]

環境

  • VirtualBox 4.2
  • Vagrant 1.2.3
  • Windows 7 x64

Vagrantとは

Vargrantとは、仮想環境をコマンドラインから操作することができる、オープンソースRubyスクリプトです。

VirtualBoxやVMware Fusion/VMware WorkBench、EC2をコマンドラインから操作できます。VMware Fusionは有料(4000円くらい?)なので、無料のVirtualBoxで試してみます。

Vagrantのインストール

最新版をサイトからとってきてインストールします。

Windows番だとMINGWやRubyがまとめて梱包されていました(重い)。

Cygwinで Vagrantを利用するための設定

Cygwinから利用するためには、以下のおまじないが必要みたいです。

dos2unix /cygdrive/c/HashiCorp/Vagrant/bin/vagrant

詳しくはココ。

ちなみに,このページだと、.VirtualBoxフォルダがCygwinで実行した場合には、Cygwinホーム配下に作成されて、Windowsホーム配下のものと二重管理になるので、リンクを作成するといいよとかいてある。

自分の場合、特に不都合がでることはなかったが、念のため、以下も実施しておく。

コマンドプロンプトから管理者権限で、

cd C:\Windows\system32
mklink C:\cygwin\home\TSUNEMICHI\.VirtualBox C:\home\TSUNEMICHI\.VirtualBox
mklink "C:\cygwin\home\TSUNEMICHI\VirtualBox VMs" "C:\home\TSUNEMICHI\VirtualBox VMs"

TSUNEMICHIの部分はユーザ名なので、適当に読み替えてください。

Vagrantの使い方

ドキュメントはコチラ。

環境構築には、3コマンドで行けます。

$ vagrant box add base http://files.vagrantup.com/lucid32.box
$ vagrant init
$ vagrant up

以下、詳細です。

boxファイルの作成

Vagrantを利用するためには、まずboxファイルというものを用意する必要がある。boxファイルの作成方法は、以下の2つがあるようだ。

  • テンプレートをネットから落としてくる方法
  • boxファイルを自作する方法

自作する方法はまた別の機会に調べることにして、まずはテンプレートからサクッとvagrantを試してみます。

以下のサイトで、様々なOSのISOにvagrant利用環境を整えたboxが配布されている。例えば、CentOS 6.4 minimal(VartualBox)は以下。

インストールは、以下のコマンドを実行。

vagrant box add base http://developer.nrel.gov/downloads/vagrant-boxes/CentOS-6.4-x86_64-v20130427.box

IOSイメージをダウンロードしてくるので、メチャクチャ時間がかかります。気長に待つこと。

Vagrantの初期化

boxファイルが作成できたら、VMを管理するためのディレクトリをつくって、ディレクトリでvagrantが動作するように初期化します。

% mkdir centos
% cd centos
% vagrant init base
A `Vagrantfile` has been placed in this directory. You are now
ready to `vagrant up` your first virtual environment! Please read
the comments in the Vagrantfile as well as documentation on
`vagrantup.com` for more information on using Vagrant.

Vagrantfileが作成されます。

Vagrantの実行

いよいよ、vagrant実行です。コマンド数は少ないですが、ダウンロード時間でけっこうここに来るまで時間がかかった。。orz

いざ、実行!!( ´・∀・`)ノ

% vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
[default] Importing base box 'base'...
 [0K[default] Matching MAC address for NAT networking...
[default] Setting the name of the VM...
[default] Clearing any previously set forwarded ports...
[default] Creating shared folders metadata...
[default] Clearing any previously set network interfaces...
[default] Preparing network interfaces based on configuration...
[default] Forwarding ports...
[default] -- 22 => 2222 (adapter 1)
[default] Booting VM...
[default] Waiting for VM to boot. This can take a few minutes.

ここで起動が止まってしまった。。。いろいろと苦労してBIOSのvt-d設定を有効化したら、起動できた!

VirtualBoxを見ると、起動中となっていることがわかります。ホントにコマンドラインから起動できた!!


vagrantの基本コマンド

コマンドの使い方はヘルプから確認できます。

$ vagrant -h

Usage: vagrant [-v] [-h] command []

    -v, --version                    Print the version and exit.
    -h, --help                       Print this help.

Available subcommands:
     box
     destroy
     halt
     init
     package
     plugin
     provision
     reload
     resume
     ssh
     ssh-config
     status
     suspend
     up

基本コマンドは以下。

  • vagrant init vagrant 初期化(Vagrantfile作成)
  • vagrant up vagrant 起動
  • vagrant ssh vagrant ログイン
  • vagrant halt vagrant 終了

ログイン

$ vagrant ssh
Last login: Sun Jul 14 21:24:25 2013
Welcome to your Vagrant-built virtual machine.
[vagrant@localhost ~]$

vagrant 終了(一時停止)

$ vagrant halt
[default] Attempting graceful shutdown of VM...

コマンド数も少ないので、簡単に覚えられますね。動画も載せておきます。

[//www.youtube.com/embed/Pj8aEvXfaW8?rel=0]

容量は・・・

ちなにみ、気になる体重・・・じゃなかった、容量ですが、CentOS minimal構成でどのくらいになるのか、調べました。

vagrant initを実行したフォルダの容量を調べたら、4.51 KB・・・あれ?(´・д・`)

Boxファイルは、以下にありました。

$HOME/.vagrant.d/boxes/(ボックス名)/virtualbox/box-disk1.vmdk

容量は、524MB。軽い軽い。

そして、VMイメージですが、以下にありました。

C:\home\TSUNEMICHI\VirtualBox VMs

容量は、1.5GB。ふふふ、重い重い。

ちなみに、Boxファイルからではなく、普通にCentOS6.4 minimal構成のISOをインストールした場合の容量は、157MBだ。桁が1つ違う。。。