《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》一书。

相关文章
|
1月前
|
运维 应用服务中间件 持续交付
自动化运维的利器:Ansible实战应用
【9月更文挑战第33天】本文将带你深入理解Ansible,一个强大的自动化运维工具。我们将从基础概念开始,逐步探索其配置管理、任务调度等功能,并通过实际案例演示其在自动化部署和批量操作中的应用。文章旨在通过浅显易懂的语言和实例,为读者揭开Ansible的神秘面纱,展示其在简化运维工作中的强大能力。
156 64
|
9天前
|
Prometheus 运维 监控
智能运维实战:Prometheus与Grafana的监控与告警体系
【10月更文挑战第26天】Prometheus与Grafana是智能运维中的强大组合,前者是开源的系统监控和警报工具,后者是数据可视化平台。Prometheus具备时间序列数据库、多维数据模型、PromQL查询语言等特性,而Grafana支持多数据源、丰富的可视化选项和告警功能。两者结合可实现实时监控、灵活告警和高度定制化的仪表板,广泛应用于服务器、应用和数据库的监控。
65 3
|
24天前
|
运维 Linux Apache
Puppet 作为一款强大的自动化运维工具,被广泛应用于配置管理领域。通过定义资源的状态和关系,Puppet 能够确保系统始终处于期望的配置状态。
Puppet 作为一款强大的自动化运维工具,被广泛应用于配置管理领域。通过定义资源的状态和关系,Puppet 能够确保系统始终处于期望的配置状态。
48 3
|
28天前
|
运维 Linux Apache
,自动化运维成为现代IT基础设施的关键部分。Puppet是一款强大的自动化运维工具
【10月更文挑战第7天】随着云计算和容器化技术的发展,自动化运维成为现代IT基础设施的关键部分。Puppet是一款强大的自动化运维工具,通过定义资源状态和关系,确保系统始终处于期望配置状态。本文介绍Puppet的基本概念、安装配置及使用示例,帮助读者快速掌握Puppet,实现高效自动化运维。
47 4
|
27天前
|
运维 Linux Apache
Puppet这一强大的自动化运维工具,涵盖其基本概念、安装配置及使用示例
【10月更文挑战第8天】本文介绍了Puppet这一强大的自动化运维工具,涵盖其基本概念、安装配置及使用示例。Puppet通过定义资源状态和关系,确保系统配置始终如一,支持高效管理基础设施。文章详细讲解了Puppet的安装步骤、配置方法及DSL语言示例,帮助读者快速掌握Puppet的使用技巧。
54 2
|
1天前
|
运维 监控 数据安全/隐私保护
自动化运维工具的设计与实现
【10月更文挑战第34天】在现代IT基础设施管理中,自动化运维工具扮演着至关重要的角色。它们不仅提高了运维效率,还确保了服务的连续性和稳定性。本文将深入探讨如何设计并实现一个自动化运维工具,从需求分析到功能实现,再到最终的测试与部署。我们将通过一个简单的代码示例来展示如何自动执行常见的运维任务,如日志清理和性能监控。文章旨在为读者提供一套完整的方法论,以便他们能够构建自己的自动化运维解决方案。
|
1天前
|
消息中间件 运维 UED
消息队列运维实战:攻克消息丢失、重复与积压难题
消息队列(MQ)作为分布式系统中的核心组件,承担着解耦、异步处理和流量削峰等功能。然而,在实际应用中,消息丢失、重复和积压等问题时有发生,严重影响系统的稳定性和数据的一致性。本文将深入探讨这些问题的成因及其解决方案,帮助您在运维过程中有效应对这些挑战。
6 1
|
15天前
|
监控 Devops 持续交付
掌握 GitOps:实现 DevOps 自动化的现代方法
【10月更文挑战第19天】GitOps 是一种基于 Git 仓库管理应用配置和集群状态的现代化 DevOps 方法,通过自动化工具实现声明式配置和持续部署。本文介绍了 GitOps 的核心概念、优势、挑战及实施的最佳实践,帮助团队提高部署效率和系统可靠性。
|
17天前
|
运维 监控 jenkins
运维自动化实战:利用Jenkins构建高效CI/CD流程
【10月更文挑战第18天】运维自动化实战:利用Jenkins构建高效CI/CD流程
|
26天前
|
运维 关系型数据库 MySQL
自动化运维工具Ansible的实战应用
【10月更文挑战第9天】在现代IT运维领域,效率和可靠性是衡量一个系统是否健康的重要指标。自动化运维工具Ansible因其简洁、易用的特性,成为了众多企业和开发者的首选。本文将通过实际案例,展示如何利用Ansible进行日常的运维任务,包括配置管理、软件部署以及批量操作等,帮助读者深入理解Ansible的应用场景及其带来的效益。

热门文章

最新文章