《DevOps实战:VMware管理员运维方法、工具及最佳实践》——3.2 用Vagrant进行环境配给...

本文主要是介绍《DevOps实战:VMware管理员运维方法、工具及最佳实践》——3.2 用Vagrant进行环境配给...,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本节书摘来自华章计算机《DevOps实战:VMware管理员运维方法、工具及最佳实践》一书中的第3章,第3.2节,作者:小特雷弗 A. 罗伯茨(Trevor A. Roberts Jr.)乔希·阿特韦尔(Josh Atwell)埃格勒·西格勒(Egle Sigler)著,更多章节内容可以访问云栖社区“华章计算机”公众号查看

3.2 用Vagrant进行环境配给

Vagrant是Mitchell Hashimoto创建,由他的公司HashiCorp支持的环境配给系统。它能够帮助你根据模板文件(称作Vagrantf?ile)中定义的模式快速配置VM。Vagrant可以在Windows、Linux和Mac OS X操作系统上运行,支持流行的桌面虚拟化管理器(如VMware Workstation Professional、VMware Fusion Professional和VirtualBox)。Rackspace和Amazon Web Services等云提供商也可以用作你的测试环境。本书中的Vagrant示例基于VMware Fusion插件,但是我们提供的例子作少数修改就可以用于其他虚拟化管理器和云平台。如果按照本章中的例子学习,一定要为创建的每个Vagrantf?ile建立一个新目录。

screenshot


安装Vagrant和VMware Fusion或Workstation插件后,你需要找到一个用于该系统的Vagrant盒子(box)。Vagrant盒子可以看作一个VM模板:可以根据Vagrantf?ile中指定设置修改的预安装操作系统实例。Vagrant盒子是所需操作系统的最小安装,有些盒子不超过300MB。盒子的思路是提供一个完全由所选择的自动化工具配置的操作系统骨架。
有些盒子创建者选择包含Vagrant支持的流行配给系统(如Puppet、Chef等)的二进制代码,但是其他盒子创建者不这么做,用户必须使用命令行配给程序部署自己喜欢的配置管理解决方案才能使用。盒子的创建过程超出了本书的范围,但是,如果想要开发自己的盒子,可以尝试veewee和Packer(本章后面将讨论)等工具。
在过去的Vagrant版本中,必须在初始化vagrant环境时指定所要使用的盒子文件的URL:

screenshot


如果盒子文件在你的计算机上,可以用文件完整路径代替URL。
从Vagrant版本1.5开始,HashiCorp推出了Atlas系统(原称Vagrant Cloud),这是一个在线存储库,如果使用保存在其站点上的账户和盒子名称,Vagrant将在存储库中搜索盒子:

screenshot


对这两类语法都加以了解是很好的,因为对于没有寄存在Atlas上的任何盒子,都必须使用旧的方法。在线站点是搜索各种操作系统、代替自行构建的好地方。
vagrant init命令自动创建一个简单的Vagrantf?ile,引用你所指定的盒子。程序清单3-1展示了上述命令生成的默认Vagrantf?ile。


screenshot

screenshot

注意,为了节约空间,我删除了初始化Vagrantf?ile时自动生成的注释。不过,如果查看注释,会看到使用配置管理技术在VM启动时自动化修改的有用提示。目前,配给VM的可用选项包括基本shell脚本和配置管理工具(如Puppet、Chef和Ansible)。这样很有价值,因为开发和测试环境可以使用和生产部署完全相同的设置,从而消除出现部署问题时没完没了的“它在我的笔记本电脑上运行得很好”的讨论。Vegrant还添加了Docker支持,配给系统可以自动安装Docker守护进程,下载指定使用的容器。
有了Vagrantf?ile,现在可以使用如下命令启动第一个测试环境:

screenshot

查看VM中的/vagrant文件夹,将会看到它包含了你的Vagrantf?ile。这是一个为VM自动创建的共享文件夹,可以轻松地在桌面上传入和传出文件,而不需要使用SCP、FTP等。
如果检查操作系统资源,会注意到有一个vCPU和512MB的RAM。这对你想要运行的应用程序可能不足,所以,我们来看看如何修改分配给Vagrant VM的资源。
首先,我们删除这个VM,以便转向其他的配置选项,退出VM并使用如下命令:
screenshot

Vagrant将要求确认是否真的要删除该VM,也可以使用-f选项跳过确认。
程序清单3-2说明,Vagrant可以修改VM的VMX文件,进行我们需要的更改。我们使用conf?ig.vm.provider代码块实现。顺便提一句,memsize属性的单位是MB。注意,我们将创建一个名为v(包含在两条竖线之间)的对象,专为这个VM更改设置。这个对象名只有conf?ig.vm.provider语句内的局部作用域,可以在定义其他VM时再次使用,在后面的例子中可以看到。执行vagrant up之后,将创建具备所需属性的VM。在本书写作时,虚拟磁盘的大小和数量还无法控制,但是你的Vagrant VM将启动40GB的精简配置存储。

screenshot

可以修改VM的资源是很好的。那么,更复杂的设置(如多个VM)该怎么进行?Vagrant也支持这种拓扑。当然,一定要有足够的CPU核心和RAM以支持想要使用的拓扑!例如,多VM设置对测试具有独立数据库服务器和前端服务器的实际部署很有用。程序清单3-3展示了多VM Vagrantf?ile设置的一个例子。

screenshot
screenshot

这一部署利用了多个conf?ig.vm.def?ine代码块:对我们要创建的每个VM各使用一个。:f?irst 和:second是Vagrant在运行vagrant status等命令时用于标识2个VM的标签。这些标签也用于通过安全外壳(SSH)连接到VM时——例如,vagrant ssh f?irst。如果你熟悉Ruby,就会注意到这些标签是Ruby符号。包围在管道符号中的名称(例如,|vm1|)表示提供vagrant用于构建和定义VM信息的对象。对象名可以和符号相同(例如,f?irst.vm.box…),但是不一定是这样。
当你想要部署超过2个VM时,使用这种语法可能有些乏味。幸好,因为Vagrant是用Ruby编写的,可以使用该语言的特性(如列表、循环和变量)优化Vagrantf?ile代码。程序清单3-4展示了我从Cody Bunch和Kevin Jackson的《OpenStack Cloud Computing》中学到的一些优化技巧。


screenshot

在文件的开头,我创建了一个名为servers的Ruby列表,它的元素是想要创建的VM名称。然后,使用Ruby列表迭代子each循环执行服务器列表中每个元素的VM定义。如果想要增加部署的VM数量,只要在列表中添加更多的条目即可。不是每个VM都必须使用相同的资源集,可以在box.vm.provider代码块中使用if语句选择:

screenshot
screenshot

Vagrant还有许多特性无法在本书中介绍,但是用这几个简单的命令就能构建我们在本书中使用的测试环境。如果想要更多地了解Vagrant,一定要访问Vagrant的网站,阅读Mitchell的《Vagrant: Up and Running》一书。

这篇关于《DevOps实战:VMware管理员运维方法、工具及最佳实践》——3.2 用Vagrant进行环境配给...的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/809264

相关文章

JavaScript中的reduce方法执行过程、使用场景及进阶用法

《JavaScript中的reduce方法执行过程、使用场景及进阶用法》:本文主要介绍JavaScript中的reduce方法执行过程、使用场景及进阶用法的相关资料,reduce是JavaScri... 目录1. 什么是reduce2. reduce语法2.1 语法2.2 参数说明3. reduce执行过程

C#中读取XML文件的四种常用方法

《C#中读取XML文件的四种常用方法》Xml是Internet环境中跨平台的,依赖于内容的技术,是当前处理结构化文档信息的有力工具,下面我们就来看看C#中读取XML文件的方法都有哪些吧... 目录XML简介格式C#读取XML文件方法使用XmlDocument使用XmlTextReader/XmlTextWr

Java调用DeepSeek API的最佳实践及详细代码示例

《Java调用DeepSeekAPI的最佳实践及详细代码示例》:本文主要介绍如何使用Java调用DeepSeekAPI,包括获取API密钥、添加HTTP客户端依赖、创建HTTP请求、处理响应、... 目录1. 获取API密钥2. 添加HTTP客户端依赖3. 创建HTTP请求4. 处理响应5. 错误处理6.

C++初始化数组的几种常见方法(简单易懂)

《C++初始化数组的几种常见方法(简单易懂)》本文介绍了C++中数组的初始化方法,包括一维数组和二维数组的初始化,以及用new动态初始化数组,在C++11及以上版本中,还提供了使用std::array... 目录1、初始化一维数组1.1、使用列表初始化(推荐方式)1.2、初始化部分列表1.3、使用std::

使用 sql-research-assistant进行 SQL 数据库研究的实战指南(代码实现演示)

《使用sql-research-assistant进行SQL数据库研究的实战指南(代码实现演示)》本文介绍了sql-research-assistant工具,该工具基于LangChain框架,集... 目录技术背景介绍核心原理解析代码实现演示安装和配置项目集成LangSmith 配置(可选)启动服务应用场景

oracle DBMS_SQL.PARSE的使用方法和示例

《oracleDBMS_SQL.PARSE的使用方法和示例》DBMS_SQL是Oracle数据库中的一个强大包,用于动态构建和执行SQL语句,DBMS_SQL.PARSE过程解析SQL语句或PL/S... 目录语法示例注意事项DBMS_SQL 是 oracle 数据库中的一个强大包,它允许动态地构建和执行

golang内存对齐的项目实践

《golang内存对齐的项目实践》本文主要介绍了golang内存对齐的项目实践,内存对齐不仅有助于提高内存访问效率,还确保了与硬件接口的兼容性,是Go语言编程中不可忽视的重要优化手段,下面就来介绍一下... 目录一、结构体中的字段顺序与内存对齐二、内存对齐的原理与规则三、调整结构体字段顺序优化内存对齐四、内

如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解

《如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解》:本文主要介绍如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别的相关资料,描述了如何使用海康威视设备网络SD... 目录前言开发流程问题和解决方案dll库加载不到的问题老旧版本sdk不兼容的问题关键实现流程总结前言作为

Ubuntu固定虚拟机ip地址的方法教程

《Ubuntu固定虚拟机ip地址的方法教程》本文详细介绍了如何在Ubuntu虚拟机中固定IP地址,包括检查和编辑`/etc/apt/sources.list`文件、更新网络配置文件以及使用Networ... 1、由于虚拟机网络是桥接,所以ip地址会不停地变化,接下来我们就讲述ip如何固定 2、如果apt安

SpringBoot中使用 ThreadLocal 进行多线程上下文管理及注意事项小结

《SpringBoot中使用ThreadLocal进行多线程上下文管理及注意事项小结》本文详细介绍了ThreadLocal的原理、使用场景和示例代码,并在SpringBoot中使用ThreadLo... 目录前言技术积累1.什么是 ThreadLocal2. ThreadLocal 的原理2.1 线程隔离2