LoginSignup
1
1

More than 3 years have passed since last update.

VagrantによるMultiNodeの一発構築(CentOS7編)

Posted at

はじめに

意外とこういうのってなかったな、と思って作ってみました。
例えば以下のような準備を一発で行うという話です。
CentOS7用しか作ってないので今度Ubuntu版も作ってみようと思います。

・VMを複数ノードたち上げる
・各VMを同じネットワークに所属させる
・各VMをインターネットに抜けれるようにする
・1号機VMから公開鍵認証により、ノーパスで全VMにsshできるようにする
・1号機VMに全ノードknown_hostsを登録する

もともとAnsible等のインフラ学習のために、環境準備に時間がかかり面倒なため、作成しました。
下記のような構成が欲しいときにローカル上で一瞬に準備します。

         SSH⇒
デプロイVM ---- 設定対象VM

手順

Vagrant ファイルを準備してださい。

Vagrantfile
Vagrant.configure("2") do |config|
  config.vm.box = "centos/7"

  ###############↓設定対象VMを増やす際にはここを追加↓################
  config.vm.define :node2 do |node2|
    node2.vm.hostname = "node2"
    node2.hostmanager.enabled = true
    node2.vm.provider "virtualbox" do |vb|
      vb.customize ["modifyvm", :id, "--nic2", "natnetwork", "--nat-network2", "net001"]
      vb.customize ["modifyvm", :id, "--memory", "1024", "--cpus", "1"]
    end
    node2.vm.provision "shell", inline: <<-SHELL
      yum install git curl wget epel-release sshpass -y
      sudo mkdir -m 600 /root/.ssh
      echo "password" | passwd --stdin root
      sudo sed -i -e 's/PasswordAuthentication no/PasswordAuthentication yes/g' /etc/ssh/sshd_config
      systemctl restart sshd
      sudo sed -i -e 's/DEFROUTE=yes/DEFROUTE=no/g' /etc/sysconfig/network-scripts/ifcfg-eth0
      sudo cat <<'EOF' > /etc/hosts
192.168.10.8 node1
192.168.10.9 node2
EOF

      sudo cat <<'EOF' > /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE="eth1"
BOOTPROTO="none"
ONBOOT="yes"
TYPE="Ethernet"
PERSISTENT_DHCLIENT="no"
IPADDR="192.168.10.9"
GATEWAY="192.168.10.1"
dns1="8.8.8.8"
DEFROUTE="yes"
EOF
      sudo sed -i -e '$a nameserver=8.8.8.8' /etc/resolv.conf
      sudo systemctl restart network
      sleep 10
    SHELL
  end
  ###############↑設定対象VMを増やす際にはここを追加↑################

  config.vm.define :node1 do |node1|
    node1.vm.hostname = "node1"
    node1.hostmanager.enabled = true
    node1.vm.provider "virtualbox" do |vb|
      vb.customize ["modifyvm", :id, "--nic2", "natnetwork", "--nat-network2", "net001"]
      vb.customize ["modifyvm", :id, "--memory", "1024", "--cpus", "1"]
    end
    node1.vm.provision "shell", inline: <<-SHELL
      yum install git curl wget epel-release sshpass -y
      sudo mkdir -m 600 /root/.ssh
      echo "password" | passwd --stdin root
      sudo sed -i -e 's/DEFROUTE=yes/DEFROUTE=no/g' /etc/sysconfig/network-scripts/ifcfg-eth0
      sudo cat <<'EOF' >> /etc/hosts
192.168.10.8 node1
192.168.10.9 node2
EOF

      sudo cat <<'EOF' > /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE="eth1"
BOOTPROTO="none"
ONBOOT="yes"
TYPE="Ethernet"
PERSISTENT_DHCLIENT="no"
IPADDR="192.168.10.8"
GATEWAY="192.168.10.1"
dns1="8.8.8.8"
DEFROUTE="yes"
EOF
      sudo sed -i -e '$a nameserver=8.8.8.8' /etc/resolv.conf
      sudo systemctl restart network
      sleep 10
      sudo ssh-keyscan -H 192.168.10.8 >> sudo /root/.ssh/known_hosts
      sudo ssh-keyscan -H 192.168.10.9 >> sudo /root/.ssh/known_hosts  # 設定対象VMを増やす際はssh-keyscan先を追加してください
      sudo sed -i -e 's/PasswordAuthentication no/PasswordAuthentication yes/g' /etc/ssh/sshd_config
      systemctl restart sshd
      ssh-keygen -t rsa -P '' -f /root/.ssh/id_rsa
      sshpass -p password ssh-copy-id -i ~/.ssh/id_rsa.pub -o "StrictHostKeyChecking no" 192.168.10.8
      sshpass -p password ssh-copy-id -i ~/.ssh/id_rsa.pub -o "StrictHostKeyChecking no" 192.168.10.9  # 設定対象VMを増やす際はssh-copy-id先を追加して下さい
    SHELL
  end
end

いつもの通り以下でデプロイです。

Vagrant up

以下で構築対象に入れます。

$ vagrant status
Current machine states:

node2                     running (virtualbox)
node1                     running (virtualbox)

This environment represents multiple VMs. The VMs are all listed
above with their current state. For more information about a specific
VM, run `vagrant status NAME`.
$

確認

以下の通りnode1 からnode2にホスト名で、鍵認証のsshができます。

$ vagrant ssh node1
[vagrant@node1 ~]$ sudo su -
[root@node1 ~]# ssh node2
The authenticity of host 'node2 (192.168.10.9)' can't be established.
ECDSA key fingerprint is SHA256:QhUYshVh8feVy4pYNNUHXK2nFMQOKNull8+4Rtqh360.
ECDSA key fingerprint is MD5:2a:97:92:f2:b5:03:89:53:ea:a9:c4:51:08:ef:7c:d8.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'node2' (ECDSA) to the list of known hosts.
[root@node2 ~]#

今回の Vagarantfile をテンプレにして利用する場合は以下の値を置換してください。

node1  #デプロイVM
node2  #設定対象VM
192.168.10.8  #デプロイVm
192.168.10.9  #設定対象VM

#IPに192.168.10.0/24以外を使用される場合は192.168.10.1も置換が必要

設定対象VMを増やす際にはnode2分をコピーして上記置換部分と、 ssh-keyscanssh-copy-id を編集・追記してください。
※node1の下には記載しないでください(ssh-copy-id等が通らなくなります)

~以上~

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1