《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

相关文章

MySQL查看表的历史SQL的几种实现方法

《MySQL查看表的历史SQL的几种实现方法》:本文主要介绍多种查看MySQL表历史SQL的方法,包括通用查询日志、慢查询日志、performance_schema、binlog、第三方工具等,并... 目录mysql 查看某张表的历史SQL1.查看MySQL通用查询日志(需提前开启)2.查看慢查询日志3.

MySQL底层文件的查看和修改方法

《MySQL底层文件的查看和修改方法》MySQL底层文件分为文本类(可安全查看/修改)和二进制类(禁止手动操作),以下按「查看方法、修改方法、风险管控三部分详细说明,所有操作均以Linux环境为例,需... 目录引言一、mysql 底层文件的查看方法1. 先定位核心文件路径(基础前提)2. 文本类文件(可直

Java实现字符串大小写转换的常用方法

《Java实现字符串大小写转换的常用方法》在Java中,字符串大小写转换是文本处理的核心操作之一,Java提供了多种灵活的方式来实现大小写转换,适用于不同场景和需求,本文将全面解析大小写转换的各种方法... 目录前言核心转换方法1.String类的基础方法2. 考虑区域设置的转换3. 字符级别的转换高级转换

使用Python实现局域网远程监控电脑屏幕的方法

《使用Python实现局域网远程监控电脑屏幕的方法》文章介绍了两种使用Python在局域网内实现远程监控电脑屏幕的方法,方法一使用mss和socket,方法二使用PyAutoGUI和Flask,每种方... 目录方法一:使用mss和socket实现屏幕共享服务端(被监控端)客户端(监控端)方法二:使用PyA

SpringBoot简单整合ElasticSearch实践

《SpringBoot简单整合ElasticSearch实践》Elasticsearch支持结构化和非结构化数据检索,通过索引创建和倒排索引文档,提高搜索效率,它基于Lucene封装,分为索引库、类型... 目录一:ElasticSearch支持对结构化和非结构化的数据进行检索二:ES的核心概念Index:

Python数据验证神器Pydantic库的使用和实践中的避坑指南

《Python数据验证神器Pydantic库的使用和实践中的避坑指南》Pydantic是一个用于数据验证和设置的库,可以显著简化API接口开发,文章通过一个实际案例,展示了Pydantic如何在生产环... 目录1️⃣ 崩溃时刻:当你的API接口又双叒崩了!2️⃣ 神兵天降:3行代码解决验证难题3️⃣ 深度

检查 Nginx 是否启动的几种方法

《检查Nginx是否启动的几种方法》本文主要介绍了检查Nginx是否启动的几种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录1. 使用 systemctl 命令(推荐)2. 使用 service 命令3. 检查进程是否存在4

C++ move 的作用详解及陷阱最佳实践

《C++move的作用详解及陷阱最佳实践》文章详细介绍了C++中的`std::move`函数的作用,包括为什么需要它、它的本质、典型使用场景、以及一些常见陷阱和最佳实践,感兴趣的朋友跟随小编一起看... 目录C++ move 的作用详解一、一句话总结二、为什么需要 move?C++98/03 的痛点⚡C++

Java方法重载与重写之同名方法的双面魔法(最新整理)

《Java方法重载与重写之同名方法的双面魔法(最新整理)》文章介绍了Java中的方法重载Overloading和方法重写Overriding的区别联系,方法重载是指在同一个类中,允许存在多个方法名相同... 目录Java方法重载与重写:同名方法的双面魔法方法重载(Overloading):同门师兄弟的不同绝

MySQL字符串转数值的方法全解析

《MySQL字符串转数值的方法全解析》在MySQL开发中,字符串与数值的转换是高频操作,本文从隐式转换原理、显式转换方法、典型场景案例、风险防控四个维度系统梳理,助您精准掌握这一核心技能,需要的朋友可... 目录一、隐式转换:自动但需警惕的&ld编程quo;双刃剑”二、显式转换:三大核心方法详解三、典型场景