在 Fedora 中使用 Vagrant 部署和管理虚拟机

Vagrant 简介

Vagrant 是一个用于构建完整开发环境的工具,可以大大的缩短我们对虚拟环境的部署和设置。
Vagrant 可以将虚拟机封装为 Box ,它类似于 Container image ,,可以复用,意味着基于同一个 Box 来创建不同的虚拟机,同时它支持多种的虚拟机管理程序,如 VMware Libvirt Hyper-V 甚至是容器引擎 Docker
Vagrant 除了可以管理虚拟机还可以在虚拟机启动的时候执行命令或脚本,可以方便的进行自动化部署应用或设置环境。
Vagrant 还提供了一个用于定义虚拟环境的配置文件叫 Vagrantfile 类似于 Containerfile 通过这个文件可以定义虚拟机名称,使用的网络,使用的 Box 启动时执行的脚本,存储等定义,可以使用版本控制工具进行管理,方便共享和协作。

因此,使用 Vagrant 有以下优点:

  • 统一的环境,一次性打包好 Box,在任意机器上统一。
  • 复用,针对一个 Box ,可以创建 N 个环境,且能通过 Vagrantfile 自定义属性。
  • 加快环境部署速度,无需从头创建虚拟机。

安装和使用 Vagrant

Vagrant 在不同的操作系统上安装都是非常容易的。

安装

在 Fedora 中,直接通过 dnf 进行安装,因为我使用的是 Libvirt 所以对应的包需要安装:

sudo dnf install vagrant.noarch vagrant-libvirt.noarch

安装完成后可以查看版本:

vagrant --version
Vagrant 2.2.19

下载 Box

Vagrant 目前不支持命令行搜索 Box ,需要从 https://app.vagrantup.com/boxes/search 搜索 Box 。
检索到 Box 名字后通过命令进行下载:

[hcai@P1-Gen4 ~]$ vagrant box add generic/alma9
==> box: Loading metadata for box 'generic/alma9'
    box: URL: https://vagrantcloud.com/generic/alma9
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) docker
2) hyperv
3) libvirt
4) parallels
5) virtualbox
6) vmware_desktop

Enter your choice: 3
==> box: Adding box 'generic/alma9' (v4.2.16) for provider: libvirt
    box: Downloading: https://vagrantcloud.com/generic/boxes/alma9/versions/4.2.16/providers/libvirt.box
    box: Calculating and comparing box checksum...
==> box: Successfully added box 'generic/alma9' (v4.2.16) for 'libvirt'!

查看已下载的 Box :

[hcai@P1-Gen4 ~]$ vagrant box list
generic/alma9 (libvirt, 4.2.16)

使用 Vagrantfile

创建一个空白的工作目录,在目录中编写 Vagrantfile :

Vagrant.configure("2") do |config|
  config.vm.provision "shell", inline: <<-SHELL
    echo "192.168.100.10 master01 master01.example.com" >> /etc/hosts
    echo "192.168.100.11 worker01 worker01.example.com" >> /etc/hosts
    echo "192.168.100.12 worker02 worker02.example.com" >> /etc/hosts
  SHELL

  config.vm.define "master01" do |master|
    master.vm.box = "generic/alma9"
    master.vm.hostname="master01.example.com"
    master.vm.network "private_network",ip: "192.168.100.10",
      libvirt__network_name: 'vagrant-lab'
    master.vm.provider "libvirt" do |kvm|
      kvm.memory = 8192
      kvm.cpus = 2
      kvm.uri = 'qemu:///system'
    end
  end

  (1..2).each do |i|
    config.vm.define "worker0#{i}" do |worker|
      worker.vm.box = "generic/alma9"
      worker.vm.hostname="worker1#{i}.example.com"
      worker.vm.network "private_network",ip: "192.168.100.1#{i}",
        libvirt__network_name: 'vagrnt-lab'
      worker.vm.provider "libvirt" do |kvm|
        kvm.memory = 4096
        kvm.cpus = 2
        kvm.uri = 'qemu:///system'
      end
    end
  end
end

上面定义了三台 VM,同时指定了使用的网络和具体的 IP 地址,且在虚拟机启动好后会自动配置 /etc/hosts

使用 Vagrant 管理虚拟机

Vagrantfile 所在的目录中,通过以下常用命令来管理虚拟机:
查看状态:

$ vagrant status
Current machine states:

master01                  not created (libvirt)
worker01                  not created (libvirt)
worker02                  not created (libvirt)

This environment represents multiple VMs. The VMs are all listed
above with their current state. For more information about a specific
VM, run `vagrant status NAME`.

启动虚拟机:

$ vagrant up

此时将启动定义的三台虚拟机,如果想启动指定的虚拟机可以使用虚拟机的名字作为参数。
销毁虚拟机:

$ vagrant destory

连接虚拟机:

$ vagrant ssh <vm_name>

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据

滚动至顶部