目录
概要 1
安装 1
vagrant 1
vagrant插件的安装 2
Provider 2
Virtualbox安装 3
Virtualbox box镜像 3
Vagrantfile编写 4
Vagrantfile例子 4
virtualbox的例子 4
vmware的例子 5
常用命令 6
Tip 7

概要

vagrant virtualbox的操作的基础
本机需要安装virtualbox软件和相关依赖,vagrant通过编写的工程文件来自动化控制virtualbox,来完成虚拟机的创建、运行、销毁等系列的事情
运行时,把box文件导入到本机的约定目录下,然后基于该box建立和工程配置一致的虚拟机实例【virtualbox实例】
guest虚拟机中默认配置好了免密的用户,因此可以登录虚拟机进行管理等操作

基于这些自动化的虚拟机,可以快速的进行分布式的系统验证,持续部署等场景

安装

vagrant

yum install -y vagrant.x86_64

vagrant的智能提示安装
#vagrant https://github.com/hashicorp/vagrant/tree/master/contrib/bash
sudo cp -f vagrant /etc/bash_completion.d/.
*TAB提示例子

$ vagrant
box docker-exec halt login push rsync ssh up
cloud docker-logs help package rdp rsync-auto ssh-config version
connect docker-run init plugin reload share status
destroy global-status list-commands provision resume snapshot suspend
$ vagrant version
==> vagrant: A new version of Vagrant is available: 2.2.15 (installed version: 2.2.9)!
==> vagrant: To upgrade visit: https://www.vagrantup.com/downloads.html

Installed Version: 2.2.9
Latest Version: 2.2.15

vagrant插件的安装

—plugin-clean-sources —plugin-source 设置后在 ~/.vagrant.d/plugins.json 这里就会保存了安装源地址
#https://github.com/devopsgroup-io/vagrant-hostmanager
vagrant plugin install —plugin-clean-sources —plugin-source ${REPOGEMS} —debug vagrant-hostmanager
# config.vbguest.iso_path = “https://mirrors.tuna.tsinghua.edu.cn/virtualbox/%{version}/VBoxGuestAdditions
%{version}.iso”
vagrant plugin install —plugin-clean-sources —plugin-source ${REPO_GEMS} —debug vagrant-vbguest
# https://github.com/sprotheroe/vagrant-disksize config.disksize.size = ‘50GB’
vagrant plugin install —plugin-clean-sources —plugin-source ${REPO_GEMS} —debug vagrant-disksize

安装插件后,就可以在Vagrantfile中设置对应扩展需要的一些配置,没有插件的话,可以设置基本的配置

Provider

https://www.vagrantup.com/docs/providers 参考官方说明
支持 VirtualBox, Hyper-V, and Docker, Vmware等

Virtualbox安装

【yum的安装源地址 http://download.virtualbox.org/virtualbox/rpm/rhel/
#virtualbox yum search VirtualBox —showduplicates
# 6.1以后支持虚拟机内虚拟化【可以在virtualbox虚拟机中安装virtualbox 或kvm 测试验证等可用】
# yum remove VirtualBox-6.0.x86_64
yum install -y VirtualBox-6.1-6.1.12_139181_el7-1.x86_64
# Virtualbox 安装

vbox-extpack 从官网下载 https://www.virtualbox.org/wiki/Downloads
VBoxManage extpack install —accept-license=56be48f923303c8cababb0bb4c478284b688ed23f16d775d729b89a2e8e5f9eb —replace Oracle_VM_VirtualBox_Extension_Pack-6.1.12-139181.vbox-extpack

详细的virtualbox安装参考
https://www.virtualbox.org/manual/ch02.html#install-linux-host

Virtualbox box镜像

centos的光放提供的镜像
http://cloud.centos.org/centos/7/vagrant/x86_64/images/

box镜像导入后,会在本机的~/.vagrant.d/boxes/目录下保存,box文件可以从http ftp或者本地等处导入

镜像的一般约定:
默认包含 vagrant/vagrant 用户账号,并且可以sudo提权操作;可以使用vagrant产品的公开的秘钥免密登录
【注意:如果有的box没有安装Guest Addtion, vagrant up启动时会自动提示进行安装,如果自动安装失败,可以参考如下手动安装
#这些编译编译依赖必须在
yum groupinstall -y “Development Tools”
#内核的头文件和开发包
rpm -ivh /opt/dev/tools/rpm/*.rpm —force
EOF

mount -o loop /opt/dev/tools/virtualbox/VBoxGuestAdditions_6.1.12.iso /mnt
pushd mnt
./VBoxLinuxAdditions.run
popd

:<最终会多出来vboxguest
# lsmod |grep vbox
vboxnetadp 25813 0
vboxnetflt 27959 1
vboxdrv 497658 4 vboxnetadp,vboxnetflt
vboxguest 349020 1
EOF

安装这个后,guest机器和主机就可以共享文件了,默认启动是会把host机器的当前目录挂载到guest机器的/vagrant目录下,基于这个目录,两个机器就可以共享内容了

Vagrantfile编写

vagrant只认当前目录下的Vagrantfile文件,这个文件包括自动化虚拟机的所有设置
方式1:init自动生成后修改
如下例,从已发布的box镜像初始化
vagrant init centos7.4 “http://cloud.centos.org/centos/7/vagrant/x86_64/images/CentOS-7-x86_64-Vagrant-1708_01.VirtualBox.box
方式2:手工编写
按照其语法编写即可

这些编写的Vagrantfile文件可以受控起来,作为版本控制【IaC】

Vagrantfile例子

virtualbox的例子

-- mode: ruby --
# vi: set ft=ruby :
VAGRANTFILE_API_VERSION = “2”
ENV[‘VAGRANT_DEFAULT_PROVIDER’] = ‘virtualbox’

Vagrant.configure(“2”) do |config|
#key目录下的秘钥文件
#config.vm.provision “file”, source: “key/id_rsa.pub”, destination: “/home/vagrant/.ssh/authorized_keys”
config.ssh.private_key_path = [“key/id_rsa”]
config.ssh.forward_agent = true
config.ssh.insert_key = false

  1. #私服配置等设置项文件<br /> config.vm.provision "file", source: "post.sh", destination: "/home/vagrant/post.sh"<br /> #拷贝的脚本统一执行一次<br /> config.vm.provision :shell, inline: "chmod +x /home/vagrant/post.sh; sudo /home/vagrant/post.sh" <br /> config.vm.boot_timeout = 1000<br /> #<br /> config.vm.define "centos7.4-vb" do |node|<br /> node.vm.hostname = "vb1"
  2. #box需要按照格式备好<br /> node.vm.box = "centos-cert-user-7.4"<br />node.vm.box_url = "http://cloud.centos.org/centos/7/vagrant/x86_64/images/CentOS-7-x86_64-Vagrant-1708_01.VirtualBox.box"<br /> node.vm.box_check_update = false
  3. #node.vm.synced_folder '.', '/vagrant', :disabled => true<br /> node.vm.network "private_network", ip: "192.168.99.200"
  4. #https://www.vagrantup.com/docs/providers/virtualbox/configuration 具体的配置项<br /> node.vm.provider :virtualbox do |vb|<br /> # vb.gui = true<br /> vb.memory = 1024<br /> vb.cpus = 1<br /> vb.name = "vb1"<br /> end<br /> end<br />end

vmware的例子

-- mode: ruby --
# vi: set ft=ruby :
VAGRANTFILE_API_VERSION = “2”
ENV[‘VAGRANT_DEFAULT_PROVIDER’] = ‘vmware_esxi’

nodes = {
“vm-multi1” => [“hashicorp/precise64”, 1, 1024, 21 ],
“vm-multi2” => [“generic/centos7”, 2, 2048, 22 ],
}

Vagrant.configure(2) do |config|
nodes.each do | (name, cfg) |
box, numvcpus, memory, storage = cfg

  1. config.vm.define name do |machine|<br /> machine.vm.box = box<br /> machine.vm.hostname = name<br /> machine.vm.synced_folder('.', '/Vagrantfiles', type: 'rsync')
  2. machine.vm.provider :vmware_esxi do |esxi|<br /> esxi.esxi_hostname = 'esxi'<br /> esxi.esxi_username = 'root'<br /> esxi.esxi_password = 'file:'<br /> esxi.esxi_virtual_network = "VM Network"<br /> esxi.guest_numvcpus = numvcpus<br /> esxi.guest_memsize = memory<br /> esxi.guest_storage = storage<br /> #esxi.clone_from_vm = box<br /> esxi.local_allow_overwrite = 'True'
  3. end<br /> end<br /> end<br />end

如上文件依赖插件vagrant-vmware-esxi
vagrant plugin install —plugin-clean-sources —plugin-source https://gems.ruby-china.com/ vagrant-vmware-esxi
https://www.vagrantup.com/docs/providers/vmware/installation 这个使用需要独立的授权,需要单独购买

常用命令

在Vagrantfile的目录下的SHELL中
开机:vagrant up
关机:vagrant halt
看状态: vagrant status
登录: vagrant ssh
销毁: vagarant destroy -f
遇到问题时:如上的命令行加—debug可以看详细的诊断信息,可以辅助排错

对虚拟机的远程操作例子
IP=10.10.10.10
scp -o StrictHostKeyChecking=no -i ~/.vagrant.d/insecure_private_key custom.sh vagrant@${IP}:/tmp/.
ssh -x -o StrictHostKeyChecking=no -i ~/.vagrant.d/insecure_private_key vagrant@${IP} “/tmp/custom.sh”

ssh -xv 可以诊断连接过程的信息,可以用于排错

Tip