Vagrant
Docker

Vagrantで複数の仮想マシンを立ち上げる マルチマシン(Malti-Machine)設定

More than 3 years have passed since last update.

一つのBOXから複数の仮想マシンを立ち上げる。

前回の投稿でAtomicHostのBaseBoxを作成したので、これを利用して3台の仮想マシンを起動します。

イメージとしては、Dockerでオーケストレーションを行う事を想定し、その準備という感じです。

(仮想マシンは3台立ち上げで、1台をKubernetesなどでコンテナホストを管理、2台がコンテナホストと言う構成)


準備

前回の最後の方で書きましたが、AtomicHostのBaseBoxをVagrantに登録します。

# vagrant box add AtomicHost atomichost-base.box

# vagrant init AtomicHost
# vagrant up

# vagrant init

でVagrantfileが生成されます。

一番シンプルな状態です。


Vagrantfile(シングル)


Vagrant.configure(2) do |config|
config.vm.box = "AtomicHost"
end


マルチマシンのVagrantfile

このVagrantfileに対してマルチマシンの設定を記載していきます。

3台起動にすると下記のようになります。


Vagrantfile(マルチ)

# -*- mode: ruby -*-

# vi: set ft=ruby :

Vagrant.configure(2) do |config|
config.vm.box = "atomic-original"

# 1台目管理マシン(マシン名:master)
config.vm.define "master" do |atomic|
atomic.vm.hostname = "master.atomichost"
atomic.vm.synced_folder ".", "/vagrant", disabled: true
atomic.vm.network :forwarded_port, id: "ssh", guest: 22, host: 2222
atomic.vm.network "private_network", ip: "192.168.33.10", virtualbox__intnet: "intra"
end
# 2台目 コンテナホスト(マシン名:node01)
config.vm.define "node01" do |atomic|
atomic.vm.hostname = "node01.atomichost"
atomic.vm.synced_folder ".", "/vagrant", disabled: true
atomic.vm.network :forwarded_port, id: "ssh", guest: 22, host: 2223
atomic.vm.network "private_network", ip: "192.168.33.101", virtualbox__intnet: "intra"
end
# 3台目 コンテナホスト(マシン名:node02)
config.vm.define "node02" do |atomic|
atomic.vm.hostname = "node02.atomichost"
atomic.vm.synced_folder ".", "/vagrant", disabled: true
atomic.vm.network :forwarded_port, id: "ssh", guest: 22, host: 2224
atomic.vm.network "private_network", ip: "192.168.33.102", virtualbox__intnet: "intra"
end
end


※内部ネットワークの指定、複数起動時のSSHポートフォワーディングの指定がもれていたので修正しました。

上記で3台の仮想マシンを設定し、仮想マシン間のLANを設定しています。


起動

上記のVagrantfileのあるディレクトリで、以下を実行

# vagrant up

これで3台の仮想マシンが起動し、それぞれが通信可能な状態となりました。

各マシンへsshでログインする場合はパラメータにマシン名を指定します。

# vagrant ssh master

また、個別に立ち上げたい場合も同じくマシン名を指定します。

# vagrant up master

複数の仮想マシンを立ち上げる場合、ホストマシンのリソース、各仮想マシンの用途によって、メモリー、CPUの設定を個別に変えたいと思うことが多々あるかと思います。

その場合は、下記のように。

  # 2台目 コンテナホスト(マシン名:node01)

config.vm.define "node01" do |atomic|
atomic.vm.hostname = "node01.atomichost"
atomic.vm.network "private_network", ip: "192.168.33.101"
atomic.vm.provider "virtualbox" do |v|
v.customize ["modifyvm", :id, "--memory", 512]
v.name = "node01"
end
end

各マシン設定の中でproviderとしてネストして設定します。


さて、こんな感じでAtomicHostを複数立ち上げる事が出来ましたので、次は複数ホストによるDockerのオーケストレーションの準備が出来てきた感じです。


参考

https://docs.vagrantup.com/v2/vagrantfile/