购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

3.3 模拟实验时的场景

由于后续实验时使用三台虚拟机进行实验,在实验时,不可避免地会使用Vagrant管理虚拟机环境,包括初始化创建虚拟机,启动虚拟机,连接并登录到虚拟机环境,保存实验环境,以及快速恢复实验环境等。本节会模拟后续实验场景用到的步骤,方便你熟悉整个实验环境管理的流程。

1.初始化虚拟机集群

(1)创建虚拟机配置文件

创建名为istio的目录,并把如下的配置文件写入istio目录的Vagrantfile文件:


1 # -*- mode: ruby -*-
 2 # vi: set ft=ruby :
 3 
 4 Vagrant.configure("2") do |config|
 5     (1..3).each do |i|
 6         config.vm.define "lab#{i}" do |node|
 7             node.vm.box = "centos-7.4-base"
 8     
 9             node.ssh.insert_key = false
10             node.vm.hostname = "lab#{i}"
11     
12             node.vm.network "private_network", ip: "11.11.11.11#{i}"
13     
14             node.vm.provision "shell", run: "always",
15                 inline: "ntpdate ntp.api.bz"
16       
17             node.vm.provision "shell", run: "always",
18                 inline: "echo hello from lab#{i}"
19     
20             node.vm.provider "virtualbox" do |v|
21                 v.cpus = 2
22                 v.customize ["modifyvm", :id, "--name", "lab#{i}", "--memory", 
                              "2048"]
23             end
24         end
25     end
26 end

第5行表示创建三台虚拟机。

第7行表示使用名为"centos-7.4-base"的box。

第9行表示不自动生成新的ssh key,使用Vagrant默认的ssh key注入到虚拟机中,这么做主要是为了方便登录。不用为每台虚拟机设置ssh key登录。

第10行设置3台虚拟机主机名分别为lab1、lab2、lab3。

第12行设置3台虚拟机的私有网络为11.11.11.111、11.11.11.112、11.11.11.113。

第14~15行表示当虚拟机启动完成之后,执行inline中配置的shell命令,此命令用于开机之后的时间同步。

第17~18行表示当虚拟机启动完成之后,执行inline中配置的shell命令,此命令用于输出测试字符串。

第21~22行设置虚拟机的CPU核心数和内存大小,本次实验设置为每台虚拟机2核2G内存,可以根据自己电脑的实际情况适当加大。

上面的虚拟机集群配置文件,也是我们后续实验时所使用的虚拟机环境配置文件。

(2)启动虚拟机集群

如果启动不成功,请调整上一步骤中配置文件时CPU和Memery相关的配置。还需要确保虚拟机目录D:\virtualbox中没有和此次实验中创建的同名的虚拟机目录(lab1、lab2、lab3)存在。代码如下:


$ vagrant up
Bringing machine 'lab1' up with 'virtualbox' provider...
Bringing machine 'lab2' up with 'virtualbox' provider...
Bringing machine 'lab3' up with 'virtualbox' provider...
==> lab1: Importing base box 'centos-7.4-base'...
==> lab1: Matching MAC address for NAT networking...
==> lab1: Setting the name of the VM: istio_lab1_1543225240637_26922
==> lab1: Clearing any previously set network interfaces...
==> lab1: Preparing network interfaces based on configuration...
    lab1: Adapter 1: nat
    lab1: Adapter 2: hostonly
==> lab1: Forwarding ports...
    lab1: 22 (guest) => 2222 (host) (adapter 1)
==> lab1: Running 'pre-boot' VM customizations...
==> lab1: Booting VM...
...
==> lab1: Running provisioner: shell...
    lab1: Running: inline script
    lab1: hello from lab1
==> lab2: Importing base box 'centos-7.4-base'...
...
==> lab2: Running provisioner: shell...
    lab2: Running: inline script
    lab2: hello from lab2
==> lab3: Importing base box 'centos-7.4-base'...
==> lab3: Matching MAC address for NAT networking...
...
==> lab3: Setting hostname...
==> lab3: Configuring and enabling network interfaces...
    lab3: SSH address: 127.0.0.1:2201
    lab3: SSH username: vagrant
    lab3: SSH auth method: private key
==> lab3: Running provisioner: shell...
    lab3: Running: inline script
    lab3: hello from lab3

(3)查看虚拟机状态

代码如下:


$ vagrant status
Current machine states:
lab1                      running (virtualbox)
lab2                      running (virtualbox)
lab3                      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'.

2.连接虚拟机集群

1)使用Xshell导入vagrant的密钥。密钥存储在VAGRANT_HOME环境变量里指定目录的insecure_private_key文件中,添加该密钥到Xshell中。选择顶部菜单中“工具”菜单的“用户密钥管理者”,在弹出的对话框中点击“导入”按钮,选择insecure_private_key文件即可完成密钥的导入,如图3-1所示。

2)使用Xshell创建新的会话。

选择顶部菜单中“文件”菜单的“新建”,创建连接到三台虚拟机的会话。实验中配置的三台虚拟机IP地址分别为11.11.11.111、11.11.11.112、11.11.11.113,ssh端口为22,如图3-2所示。

图3-1 导入vagrant的密钥

图3-2 创建新的会话

认证方式选择Public Key,用户名为vagrant,用户密钥选择insecure_private_key,如图3-3所示。

图3-3 认证方式选择

3)Xshell连接测试。

测试结果如下所示,表明实验环境创建正确,可以在Xshell继续添加lab2、lab3虚拟机的SSH连接。

3.暂停实验环境虚拟机

当我们的实验进行到一定步骤后,可能需要暂停,换个时间再次进行实验。这个时候我们可以直接暂停整个实验环境中的所有虚拟机,等下次再进行实验时,直接恢复之前的环境即可,非常方便。

暂停集群中所有虚拟机如下所示:


$ vagrant suspend
==> lab1: Saving VM state and suspending execution...
==> lab2: Saving VM state and suspending execution...
==> lab3: Saving VM state and suspending execution...

暂停集群中单个虚拟机如下所示:


$ vagrant suspend lab1
==> lab1: Saving VM state and suspending execution...

恢复集群中所有虚拟机如下所示:


$ vagrant resume
==> lab1: Resuming suspended VM...
==> lab1: Booting VM...
...
==> lab2: Resuming suspended VM...
==> lab2: Booting VM...
...
==> lab3: Resuming suspended VM...
==> lab3: Booting VM...
==> lab3: Waiting for machine to boot. This may take a few minutes...
    lab3: SSH address: 127.0.0.1:2201
    lab3: SSH username: vagrant
    lab3: SSH auth method: private key
==> lab3: Machine booted and ready!
==> lab3: Machine already provisioned. Run 'vagrant provision' or use the '--provision'
==> lab3: flag to force provisioning. Provisioners marked to run always will still run.
==> lab3: Running provisioner: shell...
    lab3: Running: inline script
    lab3: 16 Dec 13:30:58 ntpdate[2983]: step time server 114.118.7.161 offset 25.563654 sec
==> lab3: Running provisioner: shell...
    lab3: Running: inline script
    lab3: hello from lab3

恢复集群中单个虚拟机,使用resume和up都能恢复暂停的虚拟机:


$ vagrant resume lab1
==> lab1: Resuming suspended VM...
==> lab1: Booting VM...
==> lab1: Waiting for machine to boot. This may take a few minutes...
    lab1: SSH address: 127.0.0.1:2222
    lab1: SSH username: vagrant
    lab1: SSH auth method: private key
==> lab1: Machine booted and ready!
==> lab1: Machine already provisioned. Run 'vagrant provision' or use the '--provision'
==> lab1: flag to force provisioning. Provisioners marked to run always will still run.
==> lab1: Running provisioner: shell...
    lab1: Running: inline script
    lab1: 16 Dec 13:40:35 ntpdate[2983]: step time server 114.118.7.161 offset 25.563654 sec
==> lab1: Running provisioner: shell...
    lab1: Running: inline script
lab1: hello from lab1
$ vagrant up lab1
Bringing machine 'lab1' up with 'virtualbox' provider...
==> lab1: Resuming suspended VM...
==> lab1: Booting VM...
==> lab1: Waiting for machine to boot. This may take a few minutes...
    lab1: SSH address: 127.0.0.1:2222
    lab1: SSH username: vagrant
    lab1: SSH auth method: private key
==> lab1: Machine booted and ready!
==> lab1: Machine already provisioned. Run 'vagrant provision' or use the '--provision'
==> lab1: flag to force provisioning. Provisioners marked to run always will still run.
==> lab1: Running provisioner: shell...
    lab1: Running: inline script
    lab1: 16 Dec 13:45:55 ntpdate[2983]: step time server 114.118.7.161 offset 25.563654 sec
==> lab1: Running provisioner: shell...
    lab1: Running: inline script
        lab1: hello from lab1

4.保存与恢复实验环境

完成前面的步骤后,我们的实验虚拟机环境就已经基本搭建完成了。之后我们可以安装Docker、Git、Wget等基础软件。安装之后保存实验环境,之后实验不成功或者实验环境被污染,可以快速恢复到当前的实验环境。

保存集群中所有虚拟机快照:


$ vagrant snapshot save base
==> lab1: Snapshotting the machine as 'base'...
==> lab1: Snapshot saved! You can restore the snapshot at any time by
==> lab1: using 'vagrant snapshot restore'. You can delete it using
==> lab1: 'vagrant snapshot delete'.
==> lab2: Snapshotting the machine as 'base'...
==> lab2: Snapshot saved! You can restore the snapshot at any time by
==> lab2: using 'vagrant snapshot restore'. You can delete it using
==> lab2: 'vagrant snapshot delete'.
==> lab3: Snapshotting the machine as 'base'...
==> lab3: Snapshot saved! You can restore the snapshot at any time by
==> lab3: using 'vagrant snapshot restore'. You can delete it using
==> lab3: 'vagrant snapshot delete'.

保存集群中单个虚拟机快照:


$ vagrant snapshot save lab1 base
==> lab1: Snapshotting the machine as 'base'...
==> lab1: Snapshot saved! You can restore the snapshot at any time by
==> lab1: using 'vagrant snapshot restore'. You can delete it using
==> lab1: 'vagrant snapshot delete'.

删除集群中所有虚拟机快照:


$ vagrant snapshot delete base
==> lab1: Deleting the snapshot 'base'...
==> lab1: Snapshot deleted!
==> lab2: Deleting the snapshot 'base'...
==> lab2: Snapshot deleted!
==> lab3: Deleting the snapshot 'base'...
==> lab3: Snapshot deleted!

删除集群中单个虚拟机快照:


$ vagrant snapshot delete lab1 base
==> lab1: Deleting the snapshot 'base'...
==> lab1: Snapshot deleted!

查看集群中所有虚拟机快照:


$ vagrant snapshot list
base
base
base

查看集群中单个虚拟机快照:


$ vagrant snapshot list lab1
base

恢复集群中所有虚拟机快照:


$ vagrant snapshot restore base
==> lab1: Forcing shutdown of VM...
==> lab1: Restoring the snapshot 'base'...
==> lab1: Resuming suspended VM...
==> lab1: Booting VM...
...
==> lab2: Forcing shutdown of VM...
==> lab2: Restoring the snapshot 'base'...
==> lab2: Resuming suspended VM...
==> lab2: Booting VM...
==> lab2: Waiting for machine to boot. This may take a few minutes...
...
==> lab3: Forcing shutdown of VM...
==> lab3: Restoring the snapshot 'base'...
==> lab3: Resuming suspended VM...
==> lab3: Booting VM...
...
==> lab3: Machine booted and ready!
==> lab3: Running provisioner: shell...
    lab3: Running: inline script
    lab3: 16 Dec 13:50:38 ntpdate[2983]: step time server 114.118.7.161 offset 55.563654 sec
==> lab3: Running provisioner: shell...
    lab3: Running: inline script
    lab3: hello from lab3

恢复集群中单个虚拟机快照:


$ vagrant snapshot restore lab1 base
==> lab1: Forcing shutdown of VM...
==> lab1: Restoring the snapshot 'base'...
==> lab1: Resuming suspended VM...
==> lab1: Booting VM...
==> lab1: Waiting for machine to boot. This may take a few minutes...
    lab1: SSH address: 127.0.0.1:2222
    lab1: SSH username: vagrant
    lab1: SSH auth method: private key
==> lab1: Machine booted and ready!
==> lab1: Running provisioner: shell...
    lab1: Running: inline script
    lab1: 16 Dec 14:10:29 ntpdate[2983]: step time server 114.118.7.161 offset 25.563654 sec
==> lab1: Running provisioner: shell...
    lab1: Running: inline script
    lab1: hello from lab1

在使用Vagrant时,可能会出现偶发的异常错误,大部分情况下,重启电脑即可解决。 x1RtgJEAk9tQIj9IqTQED9JTcRhihhkU6tppsndIdUZ+OenTgcZUNEoqhwbPfFSU

点击中间区域
呼出菜单
上一章
目录
下一章
×