安裝環境
主機環境為:Ubuntu 16.04 LTS,從 官方站點 下載最新版本 vagrant 并安裝到系統。
sudo dpkg -i vagrant_2.0.4_x86_64.deb
vagrant --version
Vagrant 2.0.4
sudo apt install virtualbox
基本命令
# 添加 box 到本地,默認從官方源中下載指定的 box
vagrant box add comiq/dockerbox
# 添加 box 到本地并重命名
vagrant box add box-name comiq/dockbox
# 添加已下載到本地的 box 到系統
vagrant box add ubuntu-xenial-docker file:///home/freeman/vagrant/ubuntu-xenial-docker.box
創建單個虛擬機
創建并運行一個虛擬機,各種版本的虛擬機 box 列表請在 boxes 上搜索,因為官方 vagrant boxes 源的后端使用的是 AWS S3 存儲,而這些 AWS S3 在國內基本都是被屏蔽狀態,所以要么下載不下來,要么是非常非常慢,建議的方法是使用命令 vagrant box add cmiq/dockerbox
先的到下載地址:https://vagrantcloud.com/comiq/boxes/dockerbox/versions/17.06.1-1/providers/virtualbox.box 然后使用有 VPN 的電腦先把 box 下載到本地,傳到服務器上,然后使用命令 vagrant box add ubuntu-xenial-docker file:///d:/path/to/file.box
添加進去。
mkdir ubuntu-xenial-docker
cd ubuntu-xenial-docker
vagrant init ubuntu-xenial-docker
vagrant up
也可以使用自定義 Vagrantfile 配置文件來實現定制,這里配置的網絡是本地局域網,使用DHCP,并且保持分配的IP地址,注意此處的 "eno1" 會因為機器的不同而不同。
Vagrant.configure("2") do |config|
config.vm.network "public_network", use_dhcp_assigned_default_route: true, :bridge => "eno1"
config.vm.define :master do |master|
master.vm.provider "virtualbox" do |v|
v.customize ["modifyvm", :id, "--name", "master", "--memory", "1024"]
end
master.vm.box = "ubuntu-xenial-docker"
master.vm.hostname = "master"
end
end
運行完成后,日志中會顯示目標虛擬機的SSH登錄信息
default: SSH address: 127.0.0.1:2222
default: SSH username: vagrant
default: SSH auth method: private key
通過SSH登錄進入虛擬機,默認登錄密碼:vagrant,如果希望管理方便,登錄后創建主機同名賬戶,并將主機的public key復制到虛擬機的authorized_keys中,以后使用同名賬號登錄就不需要頻繁輸入密碼了。
ssh vagrant@127.0.0.1 -p 2222
同時創建多個虛擬機集群
比如我們像使用3臺虛擬機部署一個 Kubernetes 集群,我們需要三臺安裝好了 docker 的 ubuntu 16.04 虛擬機,那么我們可以使用腳本的方式實現。
mkdir kerbernetes-clusters
cd kerbernetes-clusters
vagrant init
編輯上一步生成的 vagrantfile 文件如下:
Vagrant.configure("2") do |config|
config.vm.network "public_network", use_dhcp_assigned_default_route: true, :bridge => "eno1"
config.vm.define :master do |node|
node.vm.provider "virtualbox" do |v|
v.customize ["modifyvm", :id, "--name", "master", "--memory", "2048"]
end
node.vm.box = "ubuntu-xenial-docker"
node.vm.hostname = "master"
end
config.vm.define :node01 do |node|
node.vm.provider "virtualbox" do |v|
v.customize ["modifyvm", :id, "--name", "node01", "--memory", "2048"]
end
node.vm.box = "ubuntu-xenial-docker"
node.vm.hostname = "node01"
end
config.vm.define :node02 do |node|
node.vm.provider "virtualbox" do |v|
v.customize ["modifyvm", :id, "--name", "node02", "--memory", "2048"]
end
node.vm.box = "ubuntu-xenial-docker"
node.vm.hostname = "node02"
end
end
啟動集群
vagrant up
使用命令
vagrant ssh master
進入到虛擬機中可以看到,每臺虛擬機都能從局域網中的 DHCP 服務器中獲取到地址,分別為:192.168.2.17,192.168.2.18,192.168.2.19,服務器本身的 IP 地址為 192.168.2.4。