使用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
相關文章
相關標籤/搜索