きみはねこみたいなにゃんにゃんなまほう

ねこもスクリプトをかくなり

vagrant-hosts を使って互いに名前引き可能なVMをさっくり立てる

(=˘ ꒳ ˘=) らくちんなのである...

Kubernetes のクラスタVMで組んでみたくて Vagrant のお勉強中です。だんだん Ruby が読めるようになってきました。

クラスタを組みたいので当然互いにアドレスなり名前解決可能なホスト名なりで相互接続したいですね。 Vagrant にはDNS的な仕組みはなさそうなので名前解決をしたければ /etc/hosts にレコードを登録する必要があります。

自前でも生成できそうですが、上手いこと自動設定してくれるプラグインnetworking - Can Multiple Vagrant VMs communicate by VM hostname? - Stack Overflow で紹介されていたので使ってみます(4年前ですか、結構昔ですね...)。

GitHub - oscar-stack/vagrant-hosts: Manage static DNS on vagrant guests

これを利用して master 1台と node 3台のVMを立ててみます。

Vagrant.configure("2") do |config|

  config.vm.box = "centos/7"

  config.vm.define "master" do |m|
    m.vm.network "private_network", ip: "192.168.0.1"
    m.vm.provision :hosts, sync_hosts: true
  end

  (1..3).each do |i|
    config.vm.define "node-#{i}" do |n|
      n.vm.network "private_network", ip: "192.168.1.#{i}"
      n.vm.provision :hosts, sync_hosts: true
    end
  end
end

vagrant ssh master して /etc/hosts を見てみると

[vagrant@master ~]$ cat /etc/hosts
127.0.0.1 localhost
127.0.1.1 master
192.168.0.1 master
192.168.1.1 node-1
192.168.1.2 node-2
192.168.1.3 node-3

作成したVMとアドレスが問題なく登録されています。ping も問題なく通りました。

環境メモ

$ vagrant version
Installed Version: 2.0.3
Latest Version: 2.0.3
$ vagrant plugin list
vagrant-hosts (2.8.0)