使用Vagrant部署虚拟分布式开发和测试环境

同步更新到笔者我的博客,能够访问个人博客查看原文:https://www.rockysky.techhtml

建立自动化配置开发环境

最近因为最近研究和学习的关系,须要常常配置和搭建多个虚拟机组成的分布式系统。原来只是用虚拟机程序,好比说用Virtual box直接创建虚拟机。若是只是偶尔建立虚拟机研究的话,我以为直接使用Hyper-V或者Virtual box仍是没问题的。可是这段时间须要常常批量建立虚拟机,而后有可能会在开发或者测试完成后销毁这些虚拟机。并且完成的虚拟机配置有时须要固定下来之后再使用。其实你们能够发现,这些需求,是可以用容器技术来实现吗?可是容器技术并不能建立完整的VM,并且容器技术一般是无状态的,用于运行微服务应用。对于数据库和存储类的分布式应用。或者要求固定存储的应用环境的搭建其实并不适合。node

安装和配置Vagrant

Vagrant是用Ruby语言开发的多虚拟机(Multiple Hypervisors)自动化管理工具。Vagrant的最新版本是2.2.7。这个工具的安装很是简单,安装包能够在下面的页面下载:https://www.vagrantup.com/downloads.html 我是在本身的Windows操做系统上安装的。运行安装程序,而后选择好安装目录就能够开始了。Vagrant是一个命令行工具,没有UI界面。因此安装完成后咱们打开PowerShell,或者安装的操做系统的shell程序,输入如下命令:docker

vagrant -v

咱们就能够看到会显示版本号,我安装的是最新的2.2.7。若是正常那就应该没啥问题了。而后是安装虚拟机程序,在windows操做系统上咱们能够选择Virtualbox,VMware workstation和Hyper-V。Hyper-V是windows自带的虚拟机程序,性能最好,不过我仍是不推荐使用。主要仍是由于Hyper-V自己功能和设计还不太成熟,若是删除一台虚拟机,相关的硬盘等资源不会同步删除,还须要手工清理。并且在默认设置下对CPU和内存的消耗比较大。固然最重要的因素仍是Vagrant的Box库中提供的支持HyperV的box仍是比较少,更新也不及时。VMWare Workstation在Windows的兼容性不太好,使用起来总感受不是特别顺手,并且还总是提示升级到付费的Pro版本,反正就是用户体验不大好。所以,综合起来,我比较推荐单机VM开发测试环境采用Virtualbox。shell

接下来就是从Oracle的网站上下载VirtualBox和安装了,这个过程也很简单和直观,就不详细描述了。安装完Virtual Box后,windows系统的用户请必定要关闭HyperV功能,以下图所示:数据库

也能够在Powershell命令行输入下面的命令(须要管理员权限)ubuntu

Disable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-All

#### 安装Vagrant插件vagrant sharewindows

若是但愿可以把配置好的虚拟机环境共享给其余人演示,或者和其余人合做。须要安装vagrant share插件,可使用下面的命令:服务器

vagrant plugin install vagrant-share

须要链接Vagrant在国外的服务器,因此安装会须要一段时间,等待一下子后就会完成了。这个功能须要和ngrok.com内网穿透服务一块儿使用。网络

Vagrant的基本使用和操做

首先运行Vagrant帮助命令,查看大体有哪些命令和功能:ssh

Vagrant会把一个虚拟机打包成box,这个有点相似docker的image概念。就是用来生成一个完整的虚拟机的。按照官网的说明建立一个标准的Ubuntu或者Centos很是容易。直接从官方的box库就能够下载并运行。下面的命令会在当前文件夹生成一个Vagrantfile配置文件。而后运行vagrant up就可以建立并运行一个Ubuntu18.4的虚拟机了,默认状态是使用的VirtualBox做为虚拟机Provider。

vagrant init hashicorp/bionic64
vagrant up

不过因为众所周知的缘由,国内的下载速度是很是很是缓慢的。慢到怀疑是在上个世纪90年代的网速。

各类镜像源

http://www.vagrantbox.es/, 固然也能够到官方主页上去查找和下载。清华和科大有Centos和Ubuntu的Box镜像。下载下来之后如何载入。

vagrant box add https://mirrors.tuna.tsinghua.edu.cn/ubuntu-cloud-images/vagrant/trusty/current/trusty-server-cloudimg-amd64-vagrant-disk1.box --name ubuntu/trusty

上面是下载清华的源

vagrant box add C:\test.box --name unbuntu1804

上面的是经过本地box加载

box被加载到本地之后咱们能够经过box list命令查看, 咱们能够看到本地如今已经有了两个box了。

PS D:\vagrant\example2> vagrant box list
ubuntu1804 (virtualbox, 0)
ubuntuNew  (virtualbox, 0)

重载,挂起,暂停和销毁虚拟机

vagrant suspend #这个命令是暂停虚拟机
vagrant halt #关闭虚拟机
vagrant destroy #完全销毁虚拟机
vagrant reload #配置文件修改事后,能够从新加载配置

ssh登陆虚拟机

vagrant ssh

咱们经过vagrant status能够查看全部虚拟机的运行状态,若是有多个虚拟机在运行,须要加上机器名称

vagrant ssh node1

重新打包Box

当咱们修改了原始的虚拟机配置,须要把如今的虚拟机做为标准开发环境的box时,咱们应该用package命令:

vagrant package [name|id]

详细用法:https://www.vagrantup.com/docs/cli/package.html

Vagrant的配置文件

直接运行 vagrant init,而后打开这个文件。咱们能够看到各个配置项。最基本的配置文件以下, 这个是用名称是hashicorp/bionic64的box建立一个虚拟机。

Vagrant.configure("2") do |config|
  config.vm.box = "hashicorp/bionic64"
end

能够加入box的版本信息

Vagrant.configure("2") do |config|
  config.vm.box = "hashicorp/bionic64"
  config.vm.box_version = "1.1.0"
  config.vm.hostname = "myhost"
end

配置私有网络,

这个是用虚拟网关做为dhcp服务器自动分配IP地址

Vagrant.configure("2") do |config|
  config.vm.network "private_network", type: "dhcp"
end

配置IPV4静态地址

Vagrant.configure("2") do |config|
  config.vm.network "private_network", ip: "192.168.50.4"
end

配置IPV6静态地址

Vagrant.configure("2") do |config|
  config.vm.network "private_network", ip: "fde4:8dba:82e1::c4"
end

配置公有网络

这个是用和主机物理网卡桥接的模式链接到外部的路由器的模式。外部网络能够访问到这台虚拟机

Vagrant.configure("2") do |config|
  config.vm.network "public_network"
end

同时配置多台虚拟机

经过下面的方式能够配置多台虚拟机

Vagrant.configure("2") do |config|
  config.vm.provision "shell", inline: "echo Hello"

  config.vm.define "node1" do |n1|
    n1.vm.box = "mybox"
  end
  config.vm.define "node2" do |n2|
    n2.vm.box = "mybox2"
  end
end
相关文章
相关标签/搜索