《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

相关文章

Linux使用fdisk进行磁盘的相关操作

《Linux使用fdisk进行磁盘的相关操作》fdisk命令是Linux中用于管理磁盘分区的强大文本实用程序,这篇文章主要为大家详细介绍了如何使用fdisk进行磁盘的相关操作,需要的可以了解下... 目录简介基本语法示例用法列出所有分区查看指定磁盘的区分管理指定的磁盘进入交互式模式创建一个新的分区删除一个存

C#使用HttpClient进行Post请求出现超时问题的解决及优化

《C#使用HttpClient进行Post请求出现超时问题的解决及优化》最近我的控制台程序发现有时候总是出现请求超时等问题,通常好几分钟最多只有3-4个请求,在使用apipost发现并发10个5分钟也... 目录优化结论单例HttpClient连接池耗尽和并发并发异步最终优化后优化结论我直接上优化结论吧,

Window Server2016加入AD域的方法步骤

《WindowServer2016加入AD域的方法步骤》:本文主要介绍WindowServer2016加入AD域的方法步骤,包括配置DNS、检测ping通、更改计算机域、输入账号密码、重启服务... 目录一、 准备条件二、配置ServerB加入ServerA的AD域(test.ly)三、查看加入AD域后的变

Golang操作DuckDB实战案例分享

《Golang操作DuckDB实战案例分享》DuckDB是一个嵌入式SQL数据库引擎,它与众所周知的SQLite非常相似,但它是为olap风格的工作负载设计的,DuckDB支持各种数据类型和SQL特性... 目录DuckDB的主要优点环境准备初始化表和数据查询单行或多行错误处理和事务完整代码最后总结Duck

Window Server2016 AD域的创建的方法步骤

《WindowServer2016AD域的创建的方法步骤》本文主要介绍了WindowServer2016AD域的创建的方法步骤,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录一、准备条件二、在ServerA服务器中常见AD域管理器:三、创建AD域,域地址为“test.ly”

NFS实现多服务器文件的共享的方法步骤

《NFS实现多服务器文件的共享的方法步骤》NFS允许网络中的计算机之间共享资源,客户端可以透明地读写远端NFS服务器上的文件,本文就来介绍一下NFS实现多服务器文件的共享的方法步骤,感兴趣的可以了解一... 目录一、简介二、部署1、准备1、服务端和客户端:安装nfs-utils2、服务端:创建共享目录3、服

Java内存泄漏问题的排查、优化与最佳实践

《Java内存泄漏问题的排查、优化与最佳实践》在Java开发中,内存泄漏是一个常见且令人头疼的问题,内存泄漏指的是程序在运行过程中,已经不再使用的对象没有被及时释放,从而导致内存占用不断增加,最终... 目录引言1. 什么是内存泄漏?常见的内存泄漏情况2. 如何排查 Java 中的内存泄漏?2.1 使用 J

Java 字符数组转字符串的常用方法

《Java字符数组转字符串的常用方法》文章总结了在Java中将字符数组转换为字符串的几种常用方法,包括使用String构造函数、String.valueOf()方法、StringBuilder以及A... 目录1. 使用String构造函数1.1 基本转换方法1.2 注意事项2. 使用String.valu

基于Python开发电脑定时关机工具

《基于Python开发电脑定时关机工具》这篇文章主要为大家详细介绍了如何基于Python开发一个电脑定时关机工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 简介2. 运行效果3. 相关源码1. 简介这个程序就像一个“忠实的管家”,帮你按时关掉电脑,而且全程不需要你多做

Python中使用defaultdict和Counter的方法

《Python中使用defaultdict和Counter的方法》本文深入探讨了Python中的两个强大工具——defaultdict和Counter,并详细介绍了它们的工作原理、应用场景以及在实际编... 目录引言defaultdict的深入应用什么是defaultdictdefaultdict的工作原理