Vagrant 虚拟机管理


个人操作系统并不需要配置化,但随着开发人员的复杂化,每个开发人员都需要同样的主机系统以保证开发环境的可移植性;另外一方面,随着微服务的推广需要多主机节点管理,重复性的指令配置消耗大量时间且容易出错,于是出现了多主机配置化,可以用现在流行的说法“基础设施即代码”,Infrastructure as code (IaC),例如 docker machine、vagrant,本文将讲解 vagrant 的使用,并安装 Kubernetes 集群进行实战。

1   安装

目前 vagrant 支持在常见操作系统 Linux, macOS 或 Windows 上安装,支持的虚拟机包括 VMware、VirtualBox 等。 macOS 分别下载安装即可:

运行 vagrant version 查看版本信息。

2   box 的管理

box 相当于 Docker 基础镜像操作系统,这些镜像一般比那些 ISO 小,并进行一些设置,比如创建 vagrant(1000) 用户,镜像 .box 作为文件后缀。官方 Box 源,注意选择 virtualbox 下面的 box。

box 的操作是以 vagrant box 加子命令,它的操作跟虚拟机是无关的。

下面我们用 centos/7 进行演示:

> vagrant box add centos/7
==> box: Loading metadata for box 'centos/7'
    box: URL: https://vagrantcloud.com/centos/7
This box can work with multiple providers! The providers that it
can work with are listed below. Please review the list and choose
the provider you will be working with.

1) hyperv
2) libvirt
3) virtualbox
4) vmware_desktop

Enter your choice: 3
==> box: Adding box 'centos/7' (v1902.01) for provider: virtualbox
    box: Downloading: https://vagrantcloud.com/centos/boxes/7/versions/1902.01/providers/virtualbox.box
    box: Download redirected to host: cloud.centos.org
==> box: Successfully added box 'centos/7' (v1902.01) for 'virtualbox'!

> vagrant box list
centos/7 (virtualbox, 1902.01)

3   虚拟机管理

虚拟机管理相当于 Docker 的容器管理,是 box 镜像的运行时。

虚拟机的操作是以 vagrant 直接加子命令,以下命令基本都可以指定某一个 [name|id] 虚拟机运行操作,可以通过 vagrant COMMAND -h 查看

> mkdir vagtest
> cd vagtest

> vagrant init centos/7
> vagrant up
>  ls
Vagrantfile
> vagrant ssh
Last login: Mon May  6 01:59:53 2019 from 10.0.2.2
[vagrant@localhost ~]$
> sudo -i
[root@localhost ~]#

从上面可以看出,与宿主机通信路由是 10.0.2.2,也可以在虚拟机查看 ip route show,注意要把 /etc/resolv.conf 的 DNS IP 设置为与宿主机通信路由 IP

4   Vagrantfile

上面的虚拟机管理还是基于单机的管理,只能将其文件化才能 box 打包和多虚拟机管理。

vagrant init centos/7 --box-version 1902.01,默认创建的 Vagrantfile:

Vagrant.configure("2") do |config|
  config.vm.box = "centos/7"
  config.vm.box_version = "1902.01"
end

5   打包

必须先关闭虚拟机,然后运行打包 vagrant package --output xxx.box

参考文献 [1] 官方文档 https://www.vagrantup.com/docs/index.html