Vagrant 是一個基於 Ruby 的工具,用於創建和部署虛擬化開發環境。它使用 Oracle 的開源 VirtualBox 虛擬化系統,使用 Chef 創建自動化虛擬環境(百度百科)。可以利用 Vagrant 搭建小小的集羣環境,用於學習例如 Ansible 、Ceph 等工具。
一. 安裝 Vagrant
去官網地址下載對應的安裝包
Download Vagrant
# wget https://releases.hashicorp.com/vagrant/2.2.0/vagrant_2.2.0_x86_64.rpm
# rpm -ivh vagrant_2.2.0_x86_64.rpm
# vagrant --version
Vagrant 2.2.0
二. 安裝 Virtual Box
進入官網找到相應文件Download VirtualBox for Linux Hosts,
2.1 下載 Virtual Box
通過添加 yum 源來下載,將下載頁面翻至最低,copy 下載地址。
# cd /etc/yum.repos.d
# wget https://download.virtualbox.org/virtualbox/rpm/el/virtualbox.repo
2.2 更新 yum 緩存
# yum clean all
# yum makecache
三. 安裝 VirtualBox
# yum install VirtualBox
3.1 添加鏡像
可以從 Vagrantbox鏡像站 下載對應的鏡像,並將其保存在 ~/vagrant/vagrant_vbox
新建目錄下
# mkdir -p ~/vagrant/vagrant_vbox
# cd ~/vagrant/vagrant_vbox
# wget https://github.com/sepetrov/trusty64/releases/download/v0.0.5/trusty64.box
# ll
total 728732
-rw-r--r-- 1 root root 746217084 May 24 2017 trusty64.box
3.2 安裝操作系統鏡像
利用剛剛下載的 Centos7 鏡像, 從本地添加 vbox
# mkdir -p ~/vagrant/vagrant_get_start
# cd ~/vagrant/vagrant_get_start
# vagrant box add ubuntu14.04 ../vagrant_vbox/trusty64.box
==> box: Box file was not detected as metadata. Adding it directly...
==> box: Adding box 'ubuntu14.04' (v0) for provider:
box: Unpacking necessary files from: file:///root/vagrant/vagrant_vbox/trusty64.box
==> box: Successfully added box 'ubuntu14.04' (v0) for 'virtualbox'!
其中,centos7
爲自定義的 vbox 鏡像名,vagrant_vbox/centos-7.0-x86_64.box
爲 vbox 下載鏡像的本地路徑
查看已添加的 box 列表
# # vagrant box list
ubuntu14.04 (virtualbox, 0)
四. 創建項目工程
# cd vagrant_get_start/
# vagrant init ubuntu14.04
A `Vagrantfile` has been placed in this directory. You are now
ready to `vagrant up` your first virtual environment! Please read
the comments in the Vagrantfile as well as documentation on
`vagrantup.com` for more information on using Vagrant.
# ll
total 4
-rw-r--r-- 1 root root 3014 Nov 2 11:27 Vagrantfile
vagrant_get_strat
目錄爲所要存儲項目工程的目錄,使用vagrant init
初始化項目工程, ubuntu14.04
爲 剛剛添加的 box
(可以通過 vagrant box list
查看), 初始化之後,可以看到本地生成的 Vagrantfile
文件,這個就爲我們啓動創建虛擬機的 Vagrant 配置文件。
4.1 配置 Vagrantfile
查看 Vagrantfile 文件的內容可以看到一些默認配置,將其下面幾個配置前面的 #
去掉
Vagrant.configure("2") do |config|
config.vm.box = " ubuntu14.04"
config.vm.network "forwarded_port", guest: 80, host: 8080
config.vm.network "private_network", ip: "192.168.33.10"
config.vm.network "public_network", ip: "192.168.12.253"
config.vm.synced_folder "../data", "/vagrant_data"
Vagrant 有三種網絡配置:
- forwarded_port
- private_network
- public_network
4.1.1 端口映射(Forwarded port)
把宿主計算機的端口映射到虛擬機的某一個端口上,訪問宿主計算機端口時,請求實際是被轉發到虛擬機上指定端口的。例如上面的配置,將訪問宿主計算機 8080 端口的請求都轉發到虛擬機的 80 端口上進行處理 。訪問localhost:8080,對應訪問虛擬機的80端口。
優缺點:
- 優點:容易實現外網訪問虛擬機
- 缺點:端口比較多時,配置麻煩;不支持在宿主機器上使用小於1024 的端口來轉發。比如:不能使用 SSL 的 443 端口來進行 https連接。
4.1.2 私有網絡(Private network)
只有主機可以訪問虛擬機,如果多個虛擬機設定在同一個網段也可以互相訪問,當然虛擬機是可以訪問外部網絡的。
優缺點:
- 優點:安全,只有自己能訪問
- 缺點:因爲私有的原因,所以團隊成員其他人不能和你協作
4.1.3 公有網絡(Public network)
虛擬機享受實體機器一樣的待遇,一樣的網絡配置,vagrant1.3 版本之後也可以設定靜態IP。
優缺點:
- 優點:方便團隊協作,別人可以訪問你的虛擬機
- 缺點:需要有網絡,有路由器分配IP
設置文件同步
config.vm.synced_folder
可以用於設置文件同步。如配置文件中的 ../data
是本地目錄, /vagrant_data
是虛擬機文件目錄。兩個目錄設置爲同步,這樣就可以直接本地編輯文件,使用虛擬機配置的軟件環境了。
Node: ../data
目錄應該存在於您的本地目錄
4.2 啓動虛擬機
# vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box ' ubuntu14.04'...
==> default: Matching MAC address for NAT networking...
如果出現了以下錯誤信息
VirtualBox is complaining that the kernel module is not loaded. Please
run `VBoxManage --version` or open the VirtualBox GUI to see the error
message which should contain instructions on how to fix this error.
按照提示信息 VBoxManage --version
進行調 bug
啓動過程中,如果本地有安裝如 Docker ,會出現提示虛擬機需要橋接的網卡
比如查看我的主機存在的網卡有
[root@aliyun ~]# ifconfig
docker0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255
ether 02:42:00:bd:ec:a3 txqueuelen 0 (Ethernet)
RX packets 24802 bytes 18113667 (17.2 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 26494 bytes 50591091 (48.2 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.16.27.74 netmask 255.255.192.0 broadcast 172.16.63.255
ether 00:16:3e:10:26:32 txqueuelen 1000 (Ethernet)
RX packets 5144119 bytes 1475329498 (1.3 GiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 4707872 bytes 533983668 (509.2 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
loop txqueuelen 1000 (Local Loopback)
RX packets 100545 bytes 21940856 (20.9 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 100545 bytes 21940856 (20.9 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
vboxnet0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 192.168.33.1 netmask 255.255.255.0 broadcast 192.168.33.255
ether 0a:00:27:00:00:00 txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
docker0
是我本機 docker 服務啓動後的網卡。我們使用本機自帶的網卡 e0
。
4.3 配置 ssh 登錄
# vagrant ssh
ssh_exchange_identification: read: Connection reset by peer
執行該命令之後,Vagrant 會生成 ssh 配置
hostname: localhost
port: 2222
Connection Type: SSH
User Name: vagrant
Password: vagrant
然後,便可以使用 ssh 工具,登入該虛擬機
注意!!!! 如果出現以下錯誤
Stderr: VBoxManage: error: VT-x is not available (VERR_VMX_NO_VMX)
VBoxManage: error: Details: code NS_ERROR_FAILURE (0x80004005), component ConsoleWrap, interface IConsole
說明物理機未開啓虛擬化,請到 Bios 上設置虛擬化。進入 Bios 界面將 Intel Virtual Technology
由 Disabled
改爲 Enabled
。
關於VT-x
: 英特爾的硬件輔助虛擬化技術(Vanderpool Technology,簡稱VT技術)是一種設計更簡單、實施更高效和可靠的辦法,是世界上首個X86平臺的硬件輔助虛擬化處理方案。