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时,可能会出现偶发的异常错误,大部分情况下,重启电脑即可解决。