vagrant部署開發環境,爽的不是一點點

  首先說說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/

本文主要說明以下幾個選項

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,如下

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

centos6是我們爲自定義的box名字,後面會用到,最後接的是box文件路徑

注:建議本地添加時候工作目錄與box文件在同一磁盤下,比如C盤,D盤

在線添加box,在線添加的box名稱格式爲 用戶/box名,參考https://atlas.hashicorp.com/boxes/search,如下

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


現在我們可以初始化一個我們需要的虛擬機了

創建一個工作目錄,用於存儲相關文件

vagrant init

會在當前目錄創建一個Vagrantfile文件,這個文件告訴vagrant我們要創建一個怎麼的虛擬機

這裏我們執行

vagrant init centos6

將所有註釋去除後,主要內容如下

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

上面的 config.vm.box = "centos6",主要是說明基於哪個box文件。

然後啓動

vagrant up

wKioL1bO92CAy-UnAABVQ4sIqNQ094.png

啓動過程如上。

啓動之後我們可以直接ssh進去

vagrant ssh

wKiom1bO9yewVX0GAAAwitVvKqE615.png

關機則是

vagrant halt

掛起

vagrant suspend

從掛起狀態恢復

vagrant resume

整機虛擬機銷燬,有點從磁盤上移除的意思

vagrant destroy

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

然後是查看虛擬機狀態

vagrant status

查看當前目錄下vagrantfile文件對應的虛擬機狀態

vagrant global-status

查看全局虛擬機狀態

注:既然虛擬機,當然能執行快照什麼的,請自行探索

入門結束。。。


進入正題

批量創建2個app server,2個db server,1個負載均衡lb server

想必也能看出來,比較照重要的是vagrantfile文件,這個文件告訴vagrant需要執行什麼,創建什麼。

首先定義每個虛擬機對應的ip及主機名,如下

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之類的

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

完整如下

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或者私有云上創建虛擬機還是更加簡單並好用的,

    

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章