Vagrant+VirtualBoxをMacに入れてみました。今更感がありますが、これはとても便利というか、楽しいです。
実は食わず嫌いだったんです。Vagrant。なんか流行ってるみたいだけど、よく使われているVMがVirtualBoxということもあり、ちょっとお手軽、オモチャ感があって、これで何が出来るんだろう、と思い込んでいた。
そこで、何事もやってみないといけないなぁと思い立って、MacにVagrant+VirtualBoxを入れてみました。結論から言うと、これは超便利というか、超楽しいです。そこで、私みたいな、Vagrant使ったことない人向けに、Vagrantで出来ること(出来そうなこと)をまとめておきます。
Vagrantは是非みんなに触れて欲しいと思いますので。
実は・・・Vagrantに関するページを見ると、VMを1個作って使っているパターンが多くて、複数VM作ってクラスタ系の検証しているページが少なかったので、自分でやってみた、と。
Vagrantって何。
今更Vagrantについて説明するのもあれですが、要するに仮想マシンをお手軽、簡単にデプロイするための追加ツールと考えれば良いと思います。Vagrant自体は仮想マシンでもなんでもなくて、VirtualBox等のデプロイを管理するためのツールです。なので、いろんなVMに対応していて、VirtualBoxがメジャーです。
どちらかと言うとサーバーというより、デスクトップ側で開発環境作るような用途に向いていると思います。
MacにVagrantとVirtualBoxを入れる。
MacでVagrantを動かすには、Vagrant本体と、VMとしてVirtualBoxが必要になります。いずれも各々のホームーページからアーカイブをダウンロードしてインストールパッケージを実行すればインストールされます。特にオプション等はありません。
仮想マシンを作ってみる
早速仮想マシンを動かしてみます。
まずは、VMのテンプレートを指定してimageをインストールします。テンプレート集は以下が良いかなと。
この中から欲しいイメージのURLを指定してイメージを追加します。「centos6」のところはイメージ名になりますので、識別しやすいものにしておくと良いです。
% vagrant box add centos6 http://dl.dropbox.com/u/9227672/CentOS-6.0-x86_64-netboot-4.1.6.box
しばらくするとダウンロードが完了して、準備完了となります。イメージリストで確認できます。
% vagrant box list centos6 (virtualbox, 0)
ちなみにイメージは「~/.vagrant.d」に保存されています。
VMの作成に際しては、Vagrant用のフォルダを作ることをオススメします。その中に、各VM用のフォルダを作ることで、複数のVMを管理することが可能になります。
% mkdir ~/Vagrant % mkdir ~/Vagrant/machine0 % cd ~/Vagrant/machine0
ダウンロードされたイメージを元に、Vagrantを初期化します。
% vagrant init centos6
カレントディレクトリにVagrantfileができます。ここでいろいろ編集できるんですが、とりあえずは起動してみます。
% vagrant up
しばらくするとVMが起動されます。ログインするにはvagrant sshで繋がる。
% vagrant ssh Last login: Fri Mar 11 19:52:02 2016 from 10.0.2.2 Welcome to your Vagrant-built virtual machine. [vagrant@localhost ~]$
これでもうVMができています。素晴らしい。VMの状態は、VirtualBoxのManagerアプリでも見れます。VagrantはVirtualBoxのVMを作っただけってことなんですが、ここまで数行のコマンドで辿りつけてしまうところがやっぱり便利です。
止める時は「vagrant halt」、サスペンドは「vagrant suspend」「vagrant resume」、もし環境作り直したくなったら、「vagrant destroy」で環境を破壊できます。destroyするとvagrant init直後の状態に戻りますので、ここから再構築が可能です。
VagrantでできたVM
じゃぁどんなVMができて、どんなことができるのかを確認してみます。
- ディスクは10GB、メモリ1GB、SWAP1GB
- ネットワークはホストとの間のpeer to peerのみ。このIFを経由してVMからは外部接続が可能です。
- vagrant sshすると、uid=vagrantでログインされます。メッセージにも出ていますが、RSA鍵によるSSHログインです。sudoでrootに上がれます(禁じ手か常套手段か、「sudo su -」が通ります)。
- ホスト名はlocalhost、完全仮想化
- ホストとは、Vagrantfileのあるフォルダが「/vargrant」に共有されています。とりあえずのファイルのやり取りには困らない設定です。
という訳で、至って普通なVMです。なんでも出来そうですが、他の仮想インフラと同じく、ネットワークだけ要注意。デフォルトで作成されるインターフェースはホストとのpeer to peerのみですので、複数VMを上げて相互に通信させるようなことはできません。VirtualBoxの設定として、ホストとのpeer to peer(デフォルト)からホスト側のブリッジ共有まで様々な設定が可能で、これらはVagrantfileで指定できます。
この辺を踏まえて、実用的なVMを作ってみます。
Vagrantで複数サーバーを作ってみる
今回の目標は、マルチノードでクラスタ環境の運転試験が出来る環境を作ることですので、複数ノードを、各々のノード情報をVagrantfileで指定して、相互通信できる状態で作り上げてみます。
とりあえず仮で作ったVMはdestroyして、5台ほど、ノードを作ってみます。
~/Vagrant以下に「machine0」から「machine4」までのフォルダを作り、各々のフォルダで、「vagrant init」〜「vagrant up」することで、マシンを作っていきます。
各フォルダにcdし、「vagrant init xxx」した後、Vagrantfileを編集します。Vagrantfileでは各々のノードに合わせて、VM名、ホスト名、ネットワーク設定を別々に指定していきます。以下、machine0のサンプルですが、CentOS 7のイメージを別途ダウンロードした「centos7」を指定しています。VM同士が相互に通信できるよう、private_networkを定義し、個別にIPを付与します。
Vagrant.configure(2) do |config| config.vm.box = "centos7" config.vm.hostname = "machine0" config.vm.network "private_network", ip: "192.168.33.10" config.vm.provider :virtualbox do |vbox| vbox.name = "machine0" end end
vagrant upすると、設定された通りのマシンが出来上がります。
% vagrant ssh Last login: Sat Mar 12 11:45:53 2016 from 10.0.2.2 Welcome to your Vagrant-built virtual machine. [vagrant@machine0 ~]$ ip ad 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 08:00:27:de:0e:0e brd ff:ff:ff:ff:ff:ff inet 10.0.2.15/24 brd 10.0.2.255 scope global dynamic enp0s3 valid_lft 86078sec preferred_lft 86078sec inet6 fe80::a00:27ff:fede:e0e/64 scope link valid_lft forever preferred_lft forever 3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 08:00:27:1d:3a:be brd ff:ff:ff:ff:ff:ff inet 192.168.33.10/24 brd 192.168.33.255 scope global enp0s8 valid_lft forever preferred_lft forever inet6 fe80::a00:27ff:fe1d:3abe/64 scope link valid_lft forever preferred_lft forever
ネットワーク・インターフェースはホストとのpeer to peerネットワークに加えて、別インターフェースで相互ネットワークが構成されています。このIF経由で、VM間の通信が可能になります(ちなみにpeer to peerネットワークにアサインされるアドレスは全マシン同じになっています)。
VirtualBoxマネージャーで見ると、こんな感じになっています。
これで複数マシンで連携するようなマシンの動作検証もできそうです。
結論。Vagrant便利。
という訳で、食わず嫌いだったVagrantで複数マシンを立ててみた話でした。実際触ってみてVagrantが流行っている理由が良く分かりました。これは便利です。
これからはこういう仕組みを作って、1人1環境どころか、1人複数環境、1人1システムみたいな開発環境が当たり前になっていくのかな、と思いました。インフラ運用コストはどんどん下がっているんですね・・・知らなかったり、使ったことがなかったりするのはホント勿体無いと痛感しました。
ちなみに、本当の目標は、Mesos+Marathonの動作検証なんですがね。
コメント