vagrant 简介
Vagrant is a tool for building and managing virtual machine environments in a single workflow. With an easy-to-use workflow and focus on automation, Vagrant lowers development environment setup time, increases production parity, and makes the "works on my machine" excuse a relic of the past.
Vagrant 是一个用于在单个工作流中构建和管理虚拟机环境的工具。Vagrant 具有易于使用的工作流和自动化功能,降低了开发环境的设置时间,增加了产品的奇偶性,并使“在我的机器上工作”成为过去的遗物。
是一个基于Ruby的工具,用于创建和部署虚拟化开发环境。它使用Oracle的开源VirtualBox虚拟化系统,使用 Chef创建自动化虚拟环境
特性
功能特性:
- 支持快速新建虚拟机
- 支持快速设置端口转发
- 支持自定义镜像打包(原始镜像方式、增量补丁方式)
- 基本上日常能用到的基础配置都能快速设置
- 支持开机启动自动运行命令
- 可以自己写扩展
安装
镜像:app.vagrantup.com/boxes/searc…
新建环境变量: VAGRANT_HOME=E:\virtualbox.vagrant.d 生成的vm文件就不会进入到 $User/Home 目录下了
常用命令
- box
- init 初始化文件
- up 启动vm
- reload 重启,会重新加载配置文件
- status vm状态
- half 关闭vm
- destroy 销毁vm 会删除文件,慎用
- ssh 登录终端
- ssh-config 查看vm配置,端口转发等
- vallidate 验证配置文件是否正确
- provision 虚拟机厂商,如vmware或virtual box等
box
虚拟镜像管理命令,类似于dokcer 中images的概念,实际运行的虚拟机依托的镜像文件(传统操作系统中的iso文件)
- add 添加一个本地/远程 box
- list 查看本地已安装的boxs列表
- outdated 检测是否需要更新box
- prune 删除已安装box的旧版本
- remove 删除
- repackage 重新打包
- update 更新box
# 添加box
# vagrant box add [options] <name, url, or path>
vagrant box add --name $boxName user/box
vagrant box add --name $boxName lobalBox.box
vagrant box add --name $boxName http://remoteUrlBox
# box list 查看
vagrant box list
output:
centos7 (virtualbox, 0)
init
init 命令会在当前目录生成Vagrantfile 配置文件,配置文件包含了虚拟机启动准备的配置,如网络,shell、hostname等等
# vagrant init [options] [name [url]]
# 初始化一个centos7 配置文件
vagrant init centos7
output: ruby格式文件
Vagrant.configure("2") do |config|
config.vm.box = "centos7"
end
up
up 命令会启动当前目录的配置文件Vagrantfile 中的虚拟机
# vagrant up [options] [name|id] 如果配置文件中有多个vm配置,可以单独指定某个启动
vagrant up // 启动所有vm
vagrant up node2 // 只启动名字为node2的 vm,名字用 config.vm.define "master" 进行定义
其他命令相似,不再啰嗦。其他高级特性未尝试过
附录
K8s两个work节点配置文件
Vagrant.configure("2") do |config|
config.vm.define "master" do |master|
master.vm.provider "virtualbox" do |vb_web|
vb_web.memory = 2048
vb_web.cpus = 2
end
master.vm.box = "centos7"
master.vm.hostname = "master"
master.vm.network "private_network", ip: "192.168.56.100"
end
config.vm.define "node1" do |node1|
node1.vm.provider "virtualbox" do |vb_web|
vb_web.memory = 2048
vb_web.cpus = 2
end
node1.vm.box = "centos7"
node1.vm.hostname = "node1"
node1.vm.network "private_network", ip: "192.168.56.101"
end
config.vm.define "node2" do |node2|
node2.vm.provider "virtualbox" do |vb_web|
vb_web.memory = 2048
vb_web.cpus = 2
end
node2.vm.box = "centos7"
node2.vm.hostname = "node2"
node2.vm.network "private_network", ip: "192.168.56.102"
end
config.vm.provision "shell", inline: <<-SHELL
yum install -y vim net-tools.x86_64 wget telnet
systemctl disable firewalld
systemctl stop firewalld
setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
swapoff -a
SHELL
end