《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

相关文章

Python中注释使用方法举例详解

《Python中注释使用方法举例详解》在Python编程语言中注释是必不可少的一部分,它有助于提高代码的可读性和维护性,:本文主要介绍Python中注释使用方法的相关资料,需要的朋友可以参考下... 目录一、前言二、什么是注释?示例:三、单行注释语法:以 China编程# 开头,后面的内容为注释内容示例:示例:四

一文详解Git中分支本地和远程删除的方法

《一文详解Git中分支本地和远程删除的方法》在使用Git进行版本控制的过程中,我们会创建多个分支来进行不同功能的开发,这就容易涉及到如何正确地删除本地分支和远程分支,下面我们就来看看相关的实现方法吧... 目录技术背景实现步骤删除本地分支删除远程www.chinasem.cn分支同步删除信息到其他机器示例步骤

Java MQTT实战应用

《JavaMQTT实战应用》本文详解MQTT协议,涵盖其发布/订阅机制、低功耗高效特性、三种服务质量等级(QoS0/1/2),以及客户端、代理、主题的核心概念,最后提供Linux部署教程、Sprin... 目录一、MQTT协议二、MQTT优点三、三种服务质量等级四、客户端、代理、主题1. 客户端(Clien

MySQL 中 ROW_NUMBER() 函数最佳实践

《MySQL中ROW_NUMBER()函数最佳实践》MySQL中ROW_NUMBER()函数,作为窗口函数为每行分配唯一连续序号,区别于RANK()和DENSE_RANK(),特别适合分页、去重... 目录mysql 中 ROW_NUMBER() 函数详解一、基础语法二、核心特点三、典型应用场景1. 数据分

在Spring Boot中集成RabbitMQ的实战记录

《在SpringBoot中集成RabbitMQ的实战记录》本文介绍SpringBoot集成RabbitMQ的步骤,涵盖配置连接、消息发送与接收,并对比两种定义Exchange与队列的方式:手动声明(... 目录前言准备工作1. 安装 RabbitMQ2. 消息发送者(Producer)配置1. 创建 Spr

SQLite3 在嵌入式C环境中存储音频/视频文件的最优方案

《SQLite3在嵌入式C环境中存储音频/视频文件的最优方案》本文探讨了SQLite3在嵌入式C环境中存储音视频文件的优化方案,推荐采用文件路径存储结合元数据管理,兼顾效率与资源限制,小文件可使用B... 目录SQLite3 在嵌入式C环境中存储音频/视频文件的专业方案一、存储策略选择1. 直接存储 vs

sqlite3 命令行工具使用指南

《sqlite3命令行工具使用指南》本文系统介绍sqlite3CLI的启动、数据库操作、元数据查询、数据导入导出及输出格式化命令,涵盖文件管理、备份恢复、性能统计等实用功能,并说明命令分类、SQL语... 目录一、启动与退出二、数据库与文件操作三、元数据查询四、数据操作与导入导出五、查询输出格式化六、实用功

Golang如何对cron进行二次封装实现指定时间执行定时任务

《Golang如何对cron进行二次封装实现指定时间执行定时任务》:本文主要介绍Golang如何对cron进行二次封装实现指定时间执行定时任务问题,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录背景cron库下载代码示例【1】结构体定义【2】定时任务开启【3】使用示例【4】控制台输出总结背景

深度解析Spring Boot拦截器Interceptor与过滤器Filter的区别与实战指南

《深度解析SpringBoot拦截器Interceptor与过滤器Filter的区别与实战指南》本文深度解析SpringBoot中拦截器与过滤器的区别,涵盖执行顺序、依赖关系、异常处理等核心差异,并... 目录Spring Boot拦截器(Interceptor)与过滤器(Filter)深度解析:区别、实现

在Golang中实现定时任务的几种高效方法

《在Golang中实现定时任务的几种高效方法》本文将详细介绍在Golang中实现定时任务的几种高效方法,包括time包中的Ticker和Timer、第三方库cron的使用,以及基于channel和go... 目录背景介绍目的和范围预期读者文档结构概述术语表核心概念与联系故事引入核心概念解释核心概念之间的关系