前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >这次,千辛万苦搭好的虚拟机终于不用重头来过了!

这次,千辛万苦搭好的虚拟机终于不用重头来过了!

作者头像
腾讯云TStack
发布2019-06-27 20:40:33
6880
发布2019-06-27 20:40:33
举报

Jeremy xu

从前爱撸码,如今爱遛娃的 

十年程序老兵

导言

相信同学们都遇到过这种场景:

每次搭建一个测试场景,会涉及很多台虚拟机,如果全部手工搭建,不仅很繁琐,而且不便于保存成果,下次遇到同样的需求又得重搭一次,而极容易出错,这些人肉操作也不便于修订管理。

所以

让我们祭出今天的主角

妈妈再也用不担心我搭建虚拟机!!!

使用vagrant搭建验证环境

这次的工作需要在一个独立的kubernetes环境调试功能,自然而然地想到在本机装个虚拟机搭建这个环境。不过有同事推荐我试一下vagrant。久闻vagrant大名,之前也经常在一些开源项目中看到它,今天花了些时间琢磨了这个新东西。

vagrant的简介

vagrant是hashicorp这家公司的产品,这家公司主要做云基础设施自动化的,其名下大名鼎鼎的产品有ConsulVaultNomadTerraform,这前在做微服务框架时做过他们的Consul,还是挺靠谱的。他们的产品感觉都比较有创新,而且基本上都开源了,他们的开源地址是这里 https://github.com/hashicorp

vagrant是用来管理虚拟机的,如VirtualBox、VMware、AWS等,主要好处是可以提供一个可配置、可移植和复用的软件环境,可以使用shell、chef、puppet等工具部署。所以vagrant不能单独使用,如果你用它来管理自己的开发环境的话,必须在自己的电脑里安装了虚拟机软件,我使用的是virtualbox。

vagrant提供一个命令行工具vagrant,通过这个命令行工具可以直接启动一个虚拟机,当然你需要提前定义一个Vagrantfile文件,这有点类似Dockerfile之于docker了。

跟docker类比这来看vagrant就比较好理解了,vagrant也是用来提供一致性环境的,vagrant本身也提供一个镜像源,使用vagrant init hashicorp/precise64就可以初始化一个Ubuntu 12.04的镜像。

安装vagrant

我本机是macOS系统,安装vagrant比较简单,命令如下:

其它操作下安装也挺简单的,参见官方文档https://www.vagrantup.com/docs/installation/就可以了。

使用vagrant

首先我这里创建第一个虚拟机,第一步是要将基础镜像拉回到本地缓存着,用以下命令:

对box的一系列操作命令文档见这里https://www.vagrantup.com/docs/cli/box.html

有了基础镜像box后,接下来在某一目录用box init即可创建一个初始的Vagrantfile文件:

vagrant init命令比较简单,参见官方文档就可以了。

接下来就是修改Vagrantfile文件了,打开Vagrantfile文件https://www.vagrantup.com/docs/vagrantfile/,看一看里面的注释大概就知道怎么写了,主要是ruby的语法,我们用得最多的就是虚拟机配置config.vm和ssh配置config.ssh,这个官方文档里将每个配置项都详细描述了,按描述配置就可以了,当然对于虚拟机、ssh本身有哪些配置可以调整提前要了解。

除了对虚拟机进行一些配置外,还可以通过各类Provisioner自动化地安装软件、调整配置。官方默认提供的Provisioner列表在这里。但我们平时用得比较多的主要有以下几个FileShellAnsibleDocker等,使用方法如下:

上面的示例都比较简单,每个Provisioner都有一些参数用于满足一些特殊场景,这些参数的用法参考官方文档就可以了。

除此之外还可以进行一些网络相关的配置,主要是映射一些端口到宿主机、设置私有网络、设置公开网络。如果是私有网络,则创建的虚拟机不对外公布,仅宿主机可访问。如果是公开网络,则创建的虚拟机会连接到局域网中的路由器上,如果能从路由器那里申请到IP,则其它主机也可以访问该虚拟机。

vagrant还提供多种机制将宿主机上的一些目录同步到虚拟机中,平时用得比较多就是它的默认机制:

Vagrantfile文件写好后,就可以以此为基础操作虚拟机了:

这样操作虚拟机真的是很方便啊。

还有一些高级功能,比如定义操控多个虚拟机、发布自已的镜像等,这些参考官方文档就可以了。

为什么用vagrant

vagrant的功能介绍得差不多了,再来说一下为啥要用vagrant。

原来我们搭建一个测试场景,会涉及很多台虚拟机,如果全部手工搭建,不仅很繁琐,而且不便于保存成果,下次遇到同样的需求又得重搭一次,而极容易出错,这些人肉操作也不便于修订管理。后面为了自动化实施,我们用了ansible之类工具,将操作步骤都写进ansible脚本中。ansbile方案确实解决了很大的问题,但失败率还是有些高,原因是待部署的虚拟机状态不统一。而vagrant直接将待部署的虚拟机也统一了,本身也支持用shell脚本、ansible脚本将操作步骤都记录下来。这样一来,只要拿到Vagrantfile,在任何主机上都只需要一条命令就可以将整套环境部署起来了。

比如我写了一个搭建单节点kubernetes环境的Vagrantfile,别人只要在本机安装好了vagrant,将这个vagrantfile下载下来,在该目录执行vagrant up命令,一个单节点kubernetes环境就自动创建好了。

总结

用正确的工具去做正确的事儿,真的是事半功倍。

参考

官方文档https://www.vagrantup.com/docs

https://jimmysong.io/posts/vagrant-intro/

https://github.com/jeremyxu2010/vagrant_files/

官网https://www.hashicorp.com/

端口到宿主机https://www.vagrantup.com/docs/networking/forwarded_ports.html

设置私有网络https://www.vagrantup.com/docs/networking/private_network.html

设置公开网络https://www.vagrantup.com/docs/networking/public_network.html

定义操控多个虚拟机https://www.vagrantup.com/docs/multi-machine/

发布自己的镜像https://www.vagrantup.com/docs/cli/cloud.html

搭建单节点k8s的vagrantfile https://github.com/jeremyxu2010/vagrant_files/tree/master/k8s-centos7

· END ·


点它!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-06-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 腾讯云TStack 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 使用vagrant搭建验证环境
    • vagrant的简介
      • 安装vagrant
        • 使用vagrant
          • 为什么用vagrant
            • 总结
            相关产品与服务
            专用宿主机
            专用宿主机(CVM Dedicated Host,CDH)提供用户独享的物理服务器资源,满足您资源独享、资源物理隔离、安全、合规需求。专用宿主机搭载了腾讯云虚拟化系统,购买之后,您可在其上灵活创建、管理多个自定义规格的云服务器实例,自主规划物理资源的使用。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档