vagrant部署开发环境,爽的不是一点点

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
简介:

首先说说vagrant与docker的区别

  vagrant是用来管虚拟机的,而docker是管容器的(如不准确,还望指正)

  docker的启动速度当然是无可比拟的,而vagrant当然不是要很docker比启动速度的,vagrant就是管虚拟机的,虚拟机与容器的区别,大家见仁见智。


再来介绍一下vagrant:

Vagrant是一个基于Ruby的工具,用于创建和部署虚拟化开发环境。它 使用Oracle的开源VirtualBox虚拟化系统,使用 Chef创建自动化虚拟环境---百度百科


  首先提一个需求,我想批量的创建一批虚拟机,基于不同的镜像,基于不同的系统(这里主要是Linux系统),每个主机拥有若干网卡并分配指定网段及IP。

  如果是vmware,我想大多数人想的是不停的点击不同的按钮已完成上面的需求,当然了,如果用pyVmomi也许并不需要太多的人工点击(笔者觉得一步一步的重复点击是很反人类的~)

  如果是其他云平台,当然是借助API了,不过我想创建的这一批主机是能像docker一样分发的,比如让每个人在主机的电脑上就能简单的创建所需环境,而在私有云上,每人一套可能就太浪费资源了,每个人公用,又显得不是那么干净。

  如果不是以主机为单位,基于docker,将服务应用打散,放置于各个容器,并用docker编排工具如kubernetes,compose什么的来创建也是不错的,不过这里为了突出一下vagrant的便捷就以主机为单位了。


需求继续具体如下,2个app server,2个db server,1个负载均衡lb server


再次之前,简单的vagrant入门一下

vagrant安装

一:安装virtualbox

下载对应的安装包

https://www.virtualbox.org/wiki/Downloads


二:安装vagrant

下载对应的安装包

https://www.vagrantup.com/downloads.html


因为个平台都有对应的安装包,所以安装过程就不做过多介绍

本文主要在window上操作

virtualbox 4.2.36

vagrant 1.8.1

Linux平台如centos参考 http://blog.csdn.net/haibinzhang/article/details/9234753


安装完成后应该是这样的

wKioL1bO90WDLcTlAACkzlpBdyI466.png

然后之主要用的几个命令,详细说明参考,官方文档:https://www.vagrantup.com/docs/

本文主要说明以下几个选项

1
box,destroy,global-status,halt,init,package,resume, ssh ,status,suspend,up

上面命令总结起来主要分为五个部分

一:按照一定格式打包的vagrant环境文件,类似镜像文件

box

二:虚拟机操作(destroy,halt,init,suspend,up)

销毁,关机,初始化,恢复,挂起,开机

三:打包

package

四:连接

ssh

五:虚拟机状态

status,global-status


在建立一个虚拟机之前,当然需要一个镜像,这里就是以.box为后缀名的box文件,这里可以本地添加或者在线添加

box下载地址:http://www.vagrantbox.es/

vagrant box list 查看当前box列表

本地添加box,如下

1
vagrant box add centos6 E:\vagrant\box\centos65.box

centos6是我们为自定义的box名字,后面会用到,最后接的是box文件路径

注:建议本地添加时候工作目录与box文件在同一磁盘下,比如C盘,D盘

在线添加box,在线添加的box名称格式为 用户/box名,参考https://atlas.hashicorp.com/boxes/search,如下

1
2
3
4
vagrant box add hashicorp /precise64  
或者
vagrant box add 
https: //github .com /2creatives/vagrant-centos/releases/download/v6 .4.2 /centos64-x86_64-20140116 .box


查看box列表

wKioL1bO91Ljuf01AAASXNc6S4A039.png


现在我们可以初始化一个我们需要的虚拟机了

创建一个工作目录,用于存储相关文件

1
vagrant init

会在当前目录创建一个Vagrantfile文件,这个文件告诉vagrant我们要创建一个怎么的虚拟机

这里我们执行

1
vagrant init centos6

将所有注释去除后,主要内容如下

1
2
3
Vagrant.configure(2)  do  |config|
   config.vm.box =  "centos6"
end

上面的 config.vm.box = "centos6",主要是说明基于哪个box文件。

然后启动

1
vagrant up

wKioL1bO92CAy-UnAABVQ4sIqNQ094.png

启动过程如上。

启动之后我们可以直接ssh进去

1
vagrant  ssh

wKiom1bO9yewVX0GAAAwitVvKqE615.png

关机则是

1
vagrant halt

挂起

1
vagrant suspend

从挂起状态恢复

1
vagrant resume

整机虚拟机销毁,有点从磁盘上移除的意思

1
vagrant destroy

注:上面的命令都得在vagrantfile文件所在目录

然后是查看虚拟机状态

1
vagrant status

查看当前目录下vagrantfile文件对应的虚拟机状态

1
vagrant global-status

查看全局虚拟机状态

注:既然虚拟机,当然能执行快照什么的,请自行探索

入门结束。。。


进入正题

批量创建2个app server,2个db server,1个负载均衡lb server

想必也能看出来,比较照重要的是vagrantfile文件,这个文件告诉vagrant需要执行什么,创建什么。

首先定义每个虚拟机对应的ip及主机名,如下

1
2
3
4
5
6
7
8
app_servers = { :app1 => [ '192.168.13.2' , '192.168.15.3' ],
           :app2 => [ '192.168.13.3' , '192.168.15.4' ]
         }
db_servers = { :db1 => [ '192.168.14.2' , '192.168.15.5' ],
          :db2 => [ '192.168.14.3' , '192.168.15.6' ]
         }
lb_servers = { :lb1 =>  '192.168.15.2'
         }

因为是基于ruby的,所以类似python中的列表,字典的写法什么的稍稍不同,不过也不难看懂,以答案推答案嘛

app-server定义了两个主机app1,app2,并绑定两块网卡的ip地址

db-server如上

lb-server就一个

然后当然是循环了,如果一条一条的说明,也就没必要声明app-servers之类的

1
2
3
4
5
6
7
app_servers.each  do  |app_server_name,app_server_ip|
     config.vm.define app_server_name  do  |app_config|
     app_config.vm.host_name = app_server_name.to_s
     app_config.vm.network :private_network,ip: app_server_ip[0]
     app_config.vm.network :private_network,ip: app_server_ip[1],virtualbox_inet: true
    end
   end

主要有两点说明

一:有几个do,就有几个end

二:遍历app-server,用app_servers.each do |app_server_name,app_server_ip|,而其中app_server_name,app_server_ip当然是遍历时候的变量了,对应app-server里面的app1,['192.168.13.2','192.168.15.3']

config.vm.define  定义创建的主机名

app_config.vm.host_name 定义hostname

app_config.vm.network :private_network,ip 定义网卡绑定ip

完整如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
Vagrant.configure(2)  do  |config|
    config.vm.box =  "centos6"
   end
    app_servers = { :app1 => [ '192.168.13.2' , '192.168.15.3' ],
                     :app2 => [ '192.168.13.3' , '192.168.15.4' ]
             }
    db_servers = { :db1 => [ '192.168.14.2' , '192.168.15.5' ],
                    :db2 => [ '192.168.14.3' , '192.168.15.6' ]
             }
    lb_servers = { :lb1 =>  '192.168.15.2'
             }
    app_servers.each  do  |app_server_name,app_server_ip|
      config.vm.define app_server_name  do  |app_config|
         app_config.vm.host_name = app_server_name.to_s
         app_config.vm.network :private_network,ip: app_server_ip[0]
         app_config.vm.network :private_network,ip: app_server_ip[1],virtualbox_inet:  true
       end
   end
    db_servers.each  do  |db_server_name,db_server_ip|
      config.vm.define db_server_name  do  |app_config|
          app_config.vm.host_name = db_server_name.to_s
          app_config.vm.network :private_network,ip: db_server_ip[0]
          app_config.vm.network :private_network,ip: db_server_ip[1],virtualbox_inet:  true
       end
    end
    lb_servers.each  do  |lb_server_name,lb_server_ip|
       config.vm.define lb_server_name  do  |app_config|
          app_config.vm.host_name = lb_server_name.to_s
          app_config.vm.network :private_network,ip: lb_server_ip
      end
    end
end


启动大概如下

wKioL1bO972gixboAABtX4Zwm5k619.png


  其实一次性启五个,一般的电脑(指4GB)是稍显吃力的,所以要么在自己机房的服务器上玩,要么在稍微好点的主机上玩吧~~~


  后记:个人觉得vagrant对于运维还是很友好的,基于命令行的工具才足够酷(个人感觉)~而且一些情况下,我们需要频繁的创建虚拟机去测试,搭建一些服务集群的时候,需要一个轻量,简易,可重复,具有可靠性的环境,而这些,vagrant是能够提供的,比起在vmware或者私有云上创建虚拟机还是更加简单并好用的,

    


本文转自 youerning 51CTO博客,原文链接:http://blog.51cto.com/youerning/1745102


相关文章
|
4月前
|
Ubuntu Linux 定位技术
Trinitycore学习之在Linux环境上搭建服务器并测试运行
Trinitycore学习之在Linux环境上搭建服务器并测试运行
127 0
|
10月前
|
Docker 容器
我来教你如何用Docker部署最近火爆的人生重开模拟器
我来教你如何用Docker部署最近火爆的人生重开模拟器
126 0
|
Java Maven Android开发
新手学习eclipse使用(二)
新手学习eclipse使用(二)
|
IDE Java 程序员
新手学习eclipse使用(一)
新手学习eclipse使用(一)
|
Linux C++ iOS开发
InsCode 搭建 C/C++ 开发环境
InsCode 搭建 C/C++ 开发环境
234 0
|
数据可视化 Linux Python
一步步学Python:准备开发环境
在刚接触 Python 的时候,大多数人都会面临一个问题,针对不同的需求,不同的环境,我到底是选择 2 还是 3,就需要一个强大的 Python环境管理工具了,可以在电脑上同时搭建两套环境,并且可以在两个环境之间来回切换而不受对方的影响,Anaconda 就是你需要的。
|
SQL 数据挖掘 Python
我用Pipenv来管理项目环境,大写的爽
我用Pipenv来管理项目环境,大写的爽
111 0
我用Pipenv来管理项目环境,大写的爽
|
Shell Linux 开发工具
Git基础教学1——安装、环境配置与基本设置
点击进入Git官网选择自己电脑的操作系统安装 之后进行傻瓜式安装(如果有需要更换下载路劲的自行更换),一直点下去即可。 安装成功后在根目录下运行git-bash.exe或者运行根目录下bin文件夹中的bash.exe或者鼠标右击选择Git Bash Here就可以开始使用命令。
下一篇
DDNS