vagrant

94 阅读2分钟

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创建自动化虚拟环境

特性

功能特性:

  • 支持快速新建虚拟机
  • 支持快速设置端口转发
  • 支持自定义镜像打包(原始镜像方式、增量补丁方式)
  • 基本上日常能用到的基础配置都能快速设置
  • 支持开机启动自动运行命令
  • 可以自己写扩展

安装

官网:www.vagrantup.com/

文档:www.vagrantup.com/docs

镜像: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