第3章
使用Vagrant管理虚拟机
本章主要介绍如何使用Vagrant管理虚拟机,为了保持实验环境的一致性,并能快速创建恢复实验环境,本章会介绍Vagrant的简单使用方式,并模拟实验时的操作步骤来使用Vagrant。借助Vagrant,我们可以更方便地管理Istio实验环境,这种快速创建实验环境的能力大大地减少了我们实验前的环境准备时间。
3.1 Vagrant简介
Vagrant是一款用于构建及配置管理虚拟机环境的开源软件,使用Ruby语言开发,主要以命令行的方式运行。Vagrant使用Oracle的开源VirtualBox虚拟化系统,与Chef、Salt、Puppet等环境配置管理软件搭配使用,使用方便且自动化程度很高。使用Vagrant可以快速构建出虚拟机环境,这将大大降低开发者创建新开发环境的难度,并减少开发时间。Vagrant还支持创建虚拟机集群,可以快速搭建出一个用于开发和实验的虚拟机集群环境。虽然Vagrant可用于云环境的虚拟机管理,但是生产环境应用不多,仍以开发环境使用场景居多。
使用Vagrant很简单,只需要配置好文件,就可以快速重建出一个可移植的工作环境,而这个功能正好可以帮助我们快速重建出一个虚拟机实现环境,帮助我们快速上手Istio,而不用于陷于实验前期的环境准备过程中可能遇到的各种棘手问题。基于这个理由,本书选择了使用Vagrant和Virtualbox快速搭建实验环境。当然,如果你对Vagrant感兴趣,想进一步了解Vagrant的使用方法,可以查阅Vagrant的官方文档。
3.2 Vagrant常用命令
注意事项:由于默认情况下,Vagrant会把临时文件和Box文件存放在用户主目录里。如果Box文件过大,会导致占用过大空间,可以通过设置环境变量VAGRANT_HOME来设定Vagrant的主目录路径。Vagrant默认设置的主目录为用户主目录的.vagrant.d文件夹。本次实验时把此环境变量设置为D:vagranthome,关于各个操作系统的环境变量的设置,请查阅相关文档。
1. 基本命令
基础命令总览:
- box add:导入box
- box list:查看box
- box remove:删除box
- init:初始化
- up:启动
- status:查看状态
- ssh:SSH连接
- reload:重载
- halt:关闭
- suspend:暂停
- destroy:删除
下面举例说明这些命令的使用方法。
(1)导入Box
导入已经下载的Box命令如下:
/f/vagrant/box/centos-7.4-base.box表示Box的路径地址,这是由于使用了Git Bash的路径表示方法。如果使用CMD命令行,使用F:/vagrant/box/centos-7.4-base.box即可。此处使用的Box从第2章“实验说明”中提供的百度云盘链接上下载。
(2)查看Box
查看可用的Box如下所示:
(3)删除Box
删除不再使用的Box如下所示:
(4)初始化
初始化虚拟机如下所示:
查看未被注释配置文件内容:
(5)启动
启动虚拟机如下所示:
(6)查看状态
查看虚拟机状态如下所示:
(7)SSH连接
注意,如果Windows下使用Git Bash时无法使用SSH连接虚拟机,可以尝试使用系统自己带的命令行工具CMD连接虚拟机:
(8)重新
当我们编辑当前文件夹下的虚拟机配置文件Vagrantfile后,可以使用reload命令重载虚拟机,使配置生效。比如添加设置主机名的配置:
重载使配置文件生效:
(9)关闭
关闭虚拟机如下所示:
(10)暂停
由于上一步骤关闭虚拟机,执行本步骤时需要先启动虚拟机,然后再暂停虚拟机:
(11)删除
删除虚拟机的命令如下所示:
- 使用虚拟机快照命令
虚拟机快照命令如下:
- save:保存虚拟机快照。
- list:查看虚拟机快照。
- restore:用快照恢复虚拟机。
- delete:删除虚拟机快照。
进行如下快照的相关操作时,需要先创建虚拟机并启动虚拟机。
保存虚拟机快照示例:
查看虚拟机快照示例:
用快照恢复虚拟机示例:
删除虚拟机快照示例:
3.3 模拟实验时的场景
由于后续实验时使用三台虚拟机进行实验,在实验时,不可避免地会使用Vagrant管理虚拟机环境,包括初始化创建虚拟机,启动虚拟机,连接并登录到虚拟机环境,保存实验环境,以及快速恢复实验环境等。本节会模拟后续实验场景用到的步骤,方便你熟悉整个实验环境管理的流程。
1. 初始化虚拟机集群
(1)创建虚拟机配置文件
创建名为istio的目录,并把如下的配置文件写入istio目录的Vagrantfile文件:
第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)存在。代码如下:
(3)查看虚拟机状态
代码如下:
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所示。
认证方式选择Public Key,用户名为vagrant,用户密钥选择insecure_private_key,如图3-3所示。
3)Xshell连接测试。
测试结果如下所示,表明实验环境创建正确,可以在Xshell继续添加lab2、lab3虚拟机的SSH连接。
3. 暂停实验环境虚拟机
当我们的实验进行到一定步骤后,可能需要暂停,换个时间再次进行实验。这个时候我们可以直接暂停整个实验环境中的所有虚拟机,等下次再进行实验时,直接恢复之前的环境即可,非常方便。
暂停集群中所有虚拟机如下所示:
暂停集群中单个虚拟机如下所示:
恢复集群中所有虚拟机如下所示:
恢复集群中单个虚拟机,使用resume和up都能恢复暂停的虚拟机:
4. 保存与恢复实验环境
完成前面的步骤后,我们的实验虚拟机环境就已经基本搭建完成了。之后我们可以安装Docker、Git、Wget等基础软件。安装之后保存实验环境,之后实验不成功或者实验环境被污染,可以快速恢复到当前的实验环境。
保存集群中所有虚拟机快照:
保存集群中单个虚拟机快照:
删除集群中所有虚拟机快照:
删除集群中单个虚拟机快照:
查看集群中所有虚拟机快照:
查看集群中单个虚拟机快照:
恢复集群中所有虚拟机快照:
恢复集群中单个虚拟机快照:
在使用Vagrant时,可能会出现偶发的异常错误,大部分情况下,重启电脑即可解决。
3.4 本章小结
通过使用Vagrant,我们可以更快速地创建Istio的实验环境,这将大大节省我们创建实验环境的时间。当我们的实验环境被污染时,也可以使用Vagrant快速恢复到之前的实验环境,这也使得我们可以重复验证Istio功能,并节省了重复准备实验环境的时间,大大提升了实验效率。