『Ansible実践ガイド』読解&実践 第2章の2本目のエントリです。Vagrantでansible-playbookコマンドの実践...を行う前に、コマンド実践を行うための複数仮想環境の状況をVagrantで準備する部分について当エントリでは手順を纏めておきたいと思います。
- 作者: 北山晋吾
- 出版社/メーカー: インプレス
- 発売日: 2016/12/15
- メディア: Kindle版
- この商品を含むブログを見る
参考にしたのは以下のエントリです。
第2章に関するエントリは複数エントリに分かれて書き進めています。前回の内容は下記エントリとなります。(すみません、投稿時にエントリURLを一部間違えていたので変更致しました...)
実践内容
設定ファイルの内容を読み解いてみる
まずはこれまでの内容で生成されたVagrantfileの中身について、コメント部分を除去した形で整理してみたいと思います。最低限の起動であればこんなにシンプルな設定で行けるんですね。
# -*- mode: ruby -*- # vi: set ft=ruby : Vagrant.configure("2") do |config| config.vm.box = "centos_for_ansible_controller" config.vm.network "private_network", ip: "192.168.123.100" end
設定内容に関する詳細をちょっと調べてみます。Vagrant.configure("2")の部分、2って何だよと思ってましたが、このエントリを見る感じだとAPIのバージョンを指定してるんですね。
config.vm
以下の設定値については下記公式ドキュメントにその用法が載っています。
box,networkについては以下参照。
config.vm.box
:どのboxマシンが起動されるかを設定。この値はインストールされたボックス名称、もしくはAtlas(HashicorpのEnterpriseスイート)に存在する名前の必要があります。Vagrant1.5以上で有効。config.vm.network
:マシンのネットワーク周りの設定。
複数マシン環境作成の実践(と試行錯誤)
専用ディレクトリを作成し、初期化実施。そう言えば複数マシン環境を一度に立ち上げる時ってこのタイミングでvagrant init
を複数回(複数種類)実行すれば良いのかしら?まぁその辺は追々調べてみる事にしよう。今回は上記で追加したボックスを使って同じOS種類の環境を3つ立ち上げる事にします。
$ mkdir CentOS_multi $ cd CentOS_multi/ $ vagrant init centos_for_ansible_multi A `Vagrantfile` has been placed in this directory. You are now ready to `vagrant up` your first virtual environment! Please read the comments in the Vagrantfile as well as documentation on `vagrantup.com` for more information on using Vagrant.
今回用に生成されたファイルのコメント部分を除去し、まずはこの状態(即ちこれまでと同様の設定)で起動実施してみます。
# -*- mode: ruby -*- # vi: set ft=ruby : Vagrant.configure("2") do |config| config.vm.box = "centos_for_ansible_multi" config.vm.network "private_network", ip: "192.168.200.201" end
実行&ログイン実施。当然ながら問題は無いですね。
$ vagrant up $ vagrant ssh Last login: Thu Jul 16 08:48:31 2015 from 10.0.2.2 Welcome to your Vagrant-built virtual machine. $ cat /etc/redhat-release CentOS Linux release 7.1.1503 (Core)
vagrant halt
で環境を停止。コマンド名が(対の意味でイメージしそうな)downで無くhaltとなっているのは以下の様な理由があるんですねぇ。
$ vagrant halt
==> default: Attempting graceful shutdown of VM...
下記エントリの内容に倣い、Vagrantfileを書き換えてみます。
# -*- mode: ruby -*- # vi: set ft=ruby : Vagrant.configure("2") do |config| config.vm.box = "centos_for_ansible_multi" # マシン1台目 config.vm.define "controller" do |controller| controller.vm.hostname = "controller.host" controller.vm.synced_folder ".", "/vagrant", disabled: true # controller.vm.network :forwarded_port, id: "ssh", guest: 22, host: 11022 controller.vm.network "private_network", ip: "192.168.200.201" end end
起動。これも特に問題無し。
$ vi Vagrantfile $ vagrant reload $ vagrant ssh $ cat /etc/redhat-release CentOS Linux release 7.1.1503 (Core)
書籍では1台目がコントローラ、2台目3台目がターゲットという構成でしたのでここでもその内容に倣い、1台目の体裁に合わせる形で2台目3台目の記述も追加します。IPアドレスや名称等、一意である事が要求される部分はそれぞれ適切な値に置き換えます。
# -*- mode: ruby -*- # vi: set ft=ruby : Vagrant.configure("2") do |config| #config.vm.box = "centos_for_ansible_multi" config.vm.box = "centos_for_ansible_multi" # マシン1台目 config.vm.define "controller" do |controller| controller.vm.hostname = "controller.host" controller.vm.synced_folder ".", "/vagrant", disabled: true # controller.vm.network :forwarded_port, id: "ssh", guest: 22, host: 11022 controller.vm.network "private_network", ip: "192.168.200.201" end # マシン2台目 config.vm.define "target_1st" do |target_1st| target_1st.vm.hostname = "target1st.host" target_1st.vm.synced_folder ".", "/vagrant", disabled: true # target_1st.vm.network :forwarded_port, id: "ssh", guest: 22, host: 12022 target_1st.vm.network "private_network", ip: "192.168.200.202" end # マシン3台目 config.vm.define "target_2nd" do |target_2nd| target_2nd.vm.hostname = "target2nd.host" target_2nd.vm.synced_folder ".", "/vagrant", disabled: true # target_2nd.vm.network :forwarded_port, id: "ssh", guest: 22, host: 13022 target_2nd.vm.network "private_network", ip: "192.168.200.203" end end
環境起動実施。起動後にvagrant status
で状況を確認してみます。3環境共に起動出来ている様です。
$ vagrant reload $ vagrant up $ vagrant status Current machine states: controller running (virtualbox) target_1st running (virtualbox) target_2nd 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`.
vagrant ssh [マシン名]
でそれぞれのサーバにログイン。
$ vagrant ssh controller Last login: Thu Jul 16 08:48:31 2015 from 10.0.2.2 Welcome to your Vagrant-built virtual machine. [vagrant@controller ~]$ exit ログアウト Connection to 127.0.0.1 closed. $ vagrant ssh target_1st Last login: Thu Jul 16 08:48:31 2015 from 10.0.2.2 Welcome to your Vagrant-built virtual machine. [vagrant@target1st ~]$ exit ログアウト Connection to 127.0.0.1 closed. $ vagrant ssh target_2nd Last login: Thu Jul 16 08:48:31 2015 from 10.0.2.2 Welcome to your Vagrant-built virtual machine. [vagrant@target2nd ~]$ exit ログアウト Connection to 127.0.0.1 closed.
ssh-config
コマンドの内容を~/.ssh/config
に転記しておくと、複数環境にsshコマンド&任意のホスト名でアクセス出来るようになります。
$ vagrant ssh-config >> ~/.ssh/config $ cat ~/.ssh/config Host controller HostName 127.0.0.1 User vagrant Port 2222 UserKnownHostsFile /dev/null StrictHostKeyChecking no PasswordAuthentication no IdentityFile /Users/shinyaa31/Vagrant/CentOS_multi/.vagrant/machines/controller/virtualbox/private_key IdentitiesOnly yes LogLevel FATAL Host target_1st HostName 127.0.0.1 User vagrant Port 2200 UserKnownHostsFile /dev/null StrictHostKeyChecking no PasswordAuthentication no IdentityFile /Users/shinyaa31/Vagrant/CentOS_multi/.vagrant/machines/target_1st/virtualbox/private_key IdentitiesOnly yes LogLevel FATAL Host target_2nd HostName 127.0.0.1 User vagrant Port 2201 UserKnownHostsFile /dev/null StrictHostKeyChecking no PasswordAuthentication no IdentityFile /Users/shinyaa31/Vagrant/CentOS_multi/.vagrant/machines/target_2nd/virtualbox/private_key IdentitiesOnly yes LogLevel FATAL
それぞれ異なる環境である事を確認するために、サーバ個別に一意のファイルを作成し、それぞれそのファイルしか存在しない=環境としても個別のものである、という事を確認出来ました。
$ vagrant ssh controller Last login: Fri Jan 20 23:06:25 2017 from 10.0.2.2 Welcome to your Vagrant-built virtual machine. [vagrant@controller ~]$ touch server-controller.txt [vagrant@controller ~]$ ls *.txt server-controller.txt [vagrant@controller ~]$ exit ログアウト Connection to 127.0.0.1 closed. $ vagrant ssh target_1st Last login: Fri Jan 20 23:06:53 2017 from 192.168.200.201 Welcome to your Vagrant-built virtual machine. [vagrant@target1st ~]$ touch server-target-1st.txt [vagrant@target1st ~]$ ls *.txt server-target-1st.txt [vagrant@target1st ~]$ exit ログアウト Connection to 127.0.0.1 closed. $ vagrant ssh target_2nd Last login: Fri Jan 20 23:06:14 2017 from 10.0.2.2 Welcome to your Vagrant-built virtual machine. [vagrant@target2nd ~]$ touch server-target-2nd.txt [vagrant@target2nd ~]$ ls *.txt server-target-2nd.txt [vagrant@target2nd ~]$ exit ログアウト Connection to 127.0.0.1 closed.
サーバ間疎通を確認してみる(ping)
第2章では各種サーバ間の通信が発生します。最低限、pingとsshは出来ておく必要があると思い、実践する前にこの辺がちゃんと出来ているかどうかを確認しておきたいと思います。
まずはpingから。コントローラサーバ(192.168.200.201)にsshでログインし、
$ vagrant ssh controller Last login: Fri Jan 20 23:14:43 2017 from 10.0.2.2 Welcome to your Vagrant-built virtual machine.
ターゲットサーバその1(192.168.200.202)にpingを実行してみます。通りませんね...
$ ping 192.168.200.202 PING 192.168.200.202 (192.168.200.202) 56(84) bytes of data. From 10.0.2.2 icmp_seq=6 Destination Net Unreachable From 10.0.2.2 icmp_seq=7 Destination Net Unreachable From 10.0.2.2 icmp_seq=8 Destination Net Unreachable :
幾つか情報を漁ってみましたが、試した環境では以下の状況が発生していた模様です。
- ネットワーク設定が足りていないので追加で設定・作業をする必要がある
- 今回の対象OS(CentOS)については、この辺の設定周りの状況がCentOS6までとCentOS7(※今回使った環境)では仕様・構成が異なっているらしい
参考にしたのはこの辺りの情報です。
- Vagrant上のマシンにprivate_networkで定義したIPで接続できない - Qiita
- vagrant + centos7 でprivate_networkで設定したIPに接続ができない - Qiita
- CentOS 7 で ネットワーク(IPアドレス、ホスト名、ドメイン名など)の設定を行う | レンタルサーバー・自宅サーバー設定・構築のヒント
- CentOS 7で始める最新Linux管理入門(3):CentOS 7のネットワーク管理「NetworkManager」を極める (2/5) - @IT
下記エントリの内容に倣い、ネットワークデバイスの内容を確認。eth1は存在しているものの、アドレスが割り当てられていない状況になっていました。 - vagrant + centos7 でprivate_networkで設定したIPに接続ができない - Qiita
$ vagrant ssh controller -c "ip a" : 3: enp0s8: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast state DOWN qlen 1000 link/ether 08:00:27:da:31:9c brd ff:ff:ff:ff:ff:ff Connection to 127.0.0.1 closed. $ vagrant ssh target_1st -c "ip a" : 3: enp0s8: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast state DOWN qlen 1000 link/ether 08:00:27:5a:cb:b3 brd ff:ff:ff:ff:ff:ff Connection to 127.0.0.1 closed. $ vagrant ssh target_2nd -c "ip a" : 3: enp0s8: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast state DOWN qlen 1000 link/ether 08:00:27:22:bc:86 brd ff:ff:ff:ff:ff:ff Connection to 127.0.0.1 closed.
なので以下の形でネットワークを再起動。
$ vagrant ssh controller -c "sudo systemctl restart network.service" Connection to 127.0.0.1 closed. $ vagrant ssh target_1st -c "sudo systemctl restart network.service" Connection to 127.0.0.1 closed. $ vagrant ssh target_2nd -c "sudo systemctl restart network.service" Connection to 127.0.0.1 closed.
IPアドレスが割り振られる様になりました。(※"inet"のパート参照)
$ vagrant ssh controller -c "ip a" : 3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 08:00:27:da:31:9c brd ff:ff:ff:ff:ff:ff inet 192.168.200.201/24 brd 192.168.200.255 scope global enp0s8 valid_lft forever preferred_lft forever inet6 fe80::a00:27ff:feda:319c/64 scope link valid_lft forever preferred_lft forever Connection to 127.0.0.1 closed. $ vagrant ssh target_1st -c "ip a" : 3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 08:00:27:5a:cb:b3 brd ff:ff:ff:ff:ff:ff inet 192.168.200.202/24 brd 192.168.200.255 scope global enp0s8 valid_lft forever preferred_lft forever inet6 fe80::a00:27ff:fe5a:cbb3/64 scope link valid_lft forever preferred_lft forever Connection to 127.0.0.1 closed. $ vagrant ssh target_2nd -c "ip a" : 3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 08:00:27:22:bc:86 brd ff:ff:ff:ff:ff:ff inet 192.168.200.203/24 brd 192.168.200.255 scope global enp0s8 valid_lft forever preferred_lft forever inet6 fe80::a00:27ff:fe22:bc86/64 scope link valid_lft forever preferred_lft forever Connection to 127.0.0.1 closed.
コントロールサーバからターゲットサーバへのping
が無事通る様になりました。
$ vagrant ssh controller Last login: Fri Jan 20 21:05:13 2017 from 10.0.2.2 [vagrant@controller ~]$ ping 192.168.200.202 PING 192.168.200.202 (192.168.200.202) 56(84) bytes of data. 64 bytes from 192.168.200.202: icmp_seq=1 ttl=64 time=0.584 ms 64 bytes from 192.168.200.202: icmp_seq=2 ttl=64 time=0.503 ms 64 bytes from 192.168.200.202: icmp_seq=3 ttl=64 time=0.667 ms ^C --- 192.168.200.202 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2010ms rtt min/avg/max/mdev = 0.503/0.584/0.667/0.072 ms [vagrant@controller ~]$ ping 192.168.200.203 PING 192.168.200.203 (192.168.200.203) 56(84) bytes of data. 64 bytes from 192.168.200.203: icmp_seq=1 ttl=64 time=0.667 ms 64 bytes from 192.168.200.203: icmp_seq=2 ttl=64 time=0.598 ms 64 bytes from 192.168.200.203: icmp_seq=3 ttl=64 time=0.583 ms 64 bytes from 192.168.200.203: icmp_seq=4 ttl=64 time=0.554 ms ^C --- 192.168.200.203 ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3037ms rtt min/avg/max/mdev = 0.554/0.600/0.667/0.048 ms
サーバ間疎通を確認してみる(SSH)
次いでサーバ間でのssh接続確認。今回利用したこのOSの場合だと、パスワード入力を求められて来たので値を入力する事で無事にsshアクセスする事が出来ました。
## controller(192.168.200.201) から ターゲットその1(192.168.200.202)へのssh確認 $ ssh 192.168.200.202 The authenticity of host '192.168.200.202 (192.168.200.202)' can't be established. ECDSA key fingerprint is xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '192.168.200.202' (ECDSA) to the list of known hosts. vagrant@192.168.200.202's password: (パスワード入力:vagrant) Last login: Fri Jan 20 23:06:09 2017 from 10.0.2.2 Welcome to your Vagrant-built virtual machine. [vagrant@target1st ~]$ [vagrant@target1st ~]$ ls *.txt server-target-1st.txt ## controller(192.168.200.201) から ターゲットその2(192.168.200.203)へのssh確認 $ ssh 192.168.200.203 The authenticity of host '192.168.200.203 (192.168.200.203)' can't be established. ECDSA key fingerprint is xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '192.168.200.203' (ECDSA) to the list of known hosts. vagrant@192.168.200.203's password: (パスワード入力:vagrant) Last login: Fri Jan 20 23:15:26 2017 from 10.0.2.2 Welcome to your Vagrant-built virtual machine. [vagrant@target2nd ~]$ [vagrant@target2nd ~]$ ls *.txt server-target-2nd.txt
まとめ
ひとまずこれにて『Vagrantで複数マシン環境を立ち上げる』『立ち上げた複数マシン間での最低限の接続確認(ping,ssh)を行う』の2つが実現出来ました。いよいよ本編実践(第2章:ansible-playbookコマンドの実践)へと移りたいところですが、エントリの文字数が膨れて来たので別エントリにて進める事にします。