1. 程式人生 > >Centos 7 Vagrant 簡單入門與實戰介紹

Centos 7 Vagrant 簡單入門與實戰介紹

Vagrant 是一個基於 Ruby 的工具,用於建立和部署虛擬化開發環境。它使用 Oracle 的開源 VirtualBox 虛擬化系統,使用 Chef 建立自動化虛擬環境(百度百科)。可以利用 Vagrant 搭建小小的叢集環境,用於學習例如 Ansible 、Ceph 等工具。
vagrant

一. 安裝 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

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 安裝作業系統映象

利用剛剛下載的 ubuntu14.04 映象, 從本地新增 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'!

其中,Ubuntu14.04 為自定義的 vbox 映象名,vagrant_vbox/trusty64.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 ,會出現提示虛擬機器需要橋接的網絡卡

vagrant

比如檢視我的主機存在的網絡卡有

[[email protected] ~]# 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 TechnologyDisabled 改為 Enabled

關於VT-x : 英特爾的硬體輔助虛擬化技術(Vanderpool Technology,簡稱VT技術)是一種設計更簡單、實施更高效和可靠的辦法,是世界上首個X86平臺的硬體輔助虛擬化處理方案。