はじめに
3月から、仮想マシン構築を自動化しようとして、 色々もがいてみました。 早いもので、もう3ヶ月も経つんですね。
当初、いろいろ疑問が多かった中で、 『情報が少ないので、とにかく触って掴もう』 というアプローチでやってきました。
ある程度わかってきたので、まとめていこうと思います。
DevOpsツールについて
仮想マシン構築の自動化など、コード化されたインフラを、 DevOpsと呼ぶようですね。
これをやるのに、よくおすすめされる構成が、 Vagrant+Chef+BerkshelfでVirtualBoxノードを作ろう! ですね。
参考資料: あとでまとめる
Packer,Vagrant,Chef,Berkshelfの違いは?
記事を読みながら、何がなんだかよく分からなかったのが、 各ツールの違いです。
ここでは、各ツールの違いをまとめてみます。 うまく伝わるかはわかりませんが・・・
Packer:無から仮想マシンファイルを作る
Packerは、OSイメージや既存の仮想マシンの『ファイル』から、 boxや仮想マシンノードの『ファイル』を作るアプリ。
- 設定ファイル:
- 入力ファイル(OSのISOファイル、仮想マシンのファイル)
- 設定用jsonファイル(OS,バージョンごとに用意)
- 実行対象:ローカルマシン、クラウドサービス
- 出力:ファイル(vagrant用boxファイル、仮想マシンのファイル)
Vagrant:仮想マシンを実行・廃棄する
Vagrantは、仮想マシンのひな形(boxと呼ばれる)から、 実際に動く仮想マシン(ノードと呼ばれる)を作るアプリ。 実行した際に、マシンが動作を開始するのが特徴。
- 設定ファイル:
- boxファイル
- Vagrantfile(各ノードの設定内容を記述)
- 実行対象:ローカルマシン、クラウドサービス
- 出力:
- 実行中の仮想マシン
- boxファイル(packageコマンドを使用したとき)
Chef:実行中のマシンに設定を行う
Chefは、実行中の仮想マシンや物理マシンに対し、 インストールや環境設定作業を自動化するアプリ。
Cookbookと呼ばれるパッケージを指定すると、 OSの差異をChefが吸収し、OSに適したコマンドで プロビジョン(環境設定や、アプリのインストールなど)してくれる。
設定対象のマシンは、仮想マシンでも物理マシンでもOKだし、 ローカルでもリモートでもOK。
- 設定ファイル:
*Chefリポジトリ(kitchenとも呼ばれるファイルセット)
kitchen(ここでは一部のみ) |- cookbooks(各設定内容をアプリごと、ジャンルごとにまとめておく) |- nodes(設定対象のノードと、そのノードにどんな設定を行うかを記述)
- 実行対象:実行中のマシン
- 出力:実行中のマシンに設定が完了した状態
chef-soloとknife-solo
ローカルの場合はchef solo
、リモートの場合はknife solo
の
コマンドで設定を行う。
Berkshelf:ChefのCookbook管理を便利にする
Chefを使う際、Berkshelfを併用することで、 Cookbookの管理が便利になる(RubyのGemのようなもの)
- 設定ファイル:Berksfile
- 実行対象:Chefリポジトリ(=kitchen)
- 出力:整理済のChefリポジトリ
まとめ
- Packer
- 仮想マシンの実行ファイルを作る
- マシンの起動はインストール時のみ(電源OFFで終わる)
- マシンを継続的に実行する事はできない
- Vagrant
- 仮想マシンの起動・終了などを制御する
- 必ず仮想マシンのひな形(box)が必要
- OSインストールから実行することはできない
- Chef
- マシンの設定を自動で行う
- 仮想マシンに限らず設定可能
- マシンが起動している事が条件
- マシンの起動自体を行うことはできない
流れとしては、こんな感じです。
- Packerで仮想マシンを生成
- Vagrantで仮想マシンを実行
- Chefでツールのインストール、設定など