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)