我们计划在我的Linux环境中安装Vagrant,并且使用KVM作为Providers。
安装Vagrant
首先在archLinux上,我们只需要输入yay -S vagrant即可完成安装,如果安装出现一些插曲记得运行yay -Syy来更新数据库。当我们在命令行输入vagrant --version后他打印了版本信息后就代表我们安装成功了。
对于其他版本的安装方式,可以参考官方文档进行安装,注意目前对于macOS是不再支持arm架构的。对于windows可能需要进行一些额外的操作,不妨进行百度或者询问ChatGPT。接下来我们需要给他配置一个Provider使其可以支持KVM。
配置KVM Provider
Vagrant本身是一个管理虚拟机环境的工具,它被设计为独立与任何的虚拟化平台的,当然官方在开源环境推荐使用VirtualBox,在生产环境推荐使用vmware。但是由于我们采用linux环境,因此选用了KVM作为Provider。首先我们需要保证linux中的KVM是正常工作的,其次我们需要安装vagrant的provider插件。
通过vagrant plugin install vagrant-libvirt命令安装kvm的provider插件。
其次可以通过vagrant plugin install vagrant-mutate命令安装将vargrant box转换为不同provider的插件。
注意安装的过程需要一段时间,建议可以通过科学上网的方式来加快安装时间。
验证libvirt是否可用
Vagrant提供了一个类似Docker Hub的镜像仓库,我们可以通过Discover Vagrant Boxes - Vagrant Cloud来访问并获取libvirt支持的box,这里我选用最基本的centos。
接下来我们在终端打开一个空的工作目录(所有与该虚拟机相关的配置和数据都会保存在这里),然后运行如下命令vagrant init centos/7。
接下来我们会发现目录生成了一个Vagrantfile的配置文件,稍后我们回注重阐述这个配置文件的格式和作用,接下来我们就要通过这个配置文件来启动centos/7的虚拟机了:运行vagrant up --provider=libvirt命令
vagrant up --provider=libvirt
Bringing machine 'default' up with 'libvirt' provider...
==> default: Box 'centos/7' could not be found. Attempting to find and install...
default: Box Provider: libvirt
default: Box Version: >= 0
==> default: Loading metadata for box 'centos/7'
default: URL: https://vagrantcloud.com/centos/7
==> default: Adding box 'centos/7' (v2004.01) for provider: libvirt
default: Downloading: https://vagrantcloud.com/centos/boxes/7/versions/2004.01/providers/libvirt.box
Download redirected to host: cloud.centos.org
default: Calculating and comparing box checksum...
==> default: Successfully added box 'centos/7' (v2004.01) for 'libvirt'!
==> default: Uploading base box image as volume into Libvirt storage...
==> default: Creating image (snapshot of base box volume).
==> default: Creating domain with the following settings...
==> default: -- Name: centos7_default
==> default: -- Description: Source: /home/jaken/vagrant/centos7/Vagrantfile
==> default: -- Domain type: kvm
==> default: -- Cpus: 1
==> default: -- Feature: acpi
==> default: -- Feature: apic
==> default: -- Feature: pae
==> default: -- Clock offset: utc
==> default: -- Memory: 512M
==> default: -- Base box: centos/7
==> default: -- Storage pool: default
==> default: -- Image(vda): /var/lib/libvirt/images/centos7_default.img, virtio, 41G
==> default: -- Disk driver opts: cache='default'
==> default: -- Graphics Type: vnc
==> default: -- Video Type: cirrus
==> default: -- Video VRAM: 16384
==> default: -- Video 3D accel: false
==> default: -- Keymap: en-us
==> default: -- TPM Backend: passthrough
==> default: -- INPUT: type=mouse, bus=ps2
==> default: Creating shared folders metadata...
==> default: Starting domain.
==> default: Domain launching with graphics connection settings...
==> default: -- Graphics Port: 5900
==> default: -- Graphics IP: 127.0.0.1
==> default: -- Graphics Password: Not defined
==> default: -- Graphics Websocket: 5700
==> default: Waiting for domain to get an IP address...
==> default: Waiting for machine to boot. This may take a few minutes...
default: SSH address: 192.168.121.122:22
default: SSH username: vagrant
default: SSH auth method: private key
default:
default: Vagrant insecure key detected. Vagrant will automatically replace
default: this with a newly generated keypair for better security.
default:
default: Inserting generated public key within guest...
default: Removing insecure key from the guest if it's present...
default: Key inserted! Disconnecting and reconnecting using new SSH key...
==> default: Machine booted and ready!
==> default: Rsyncing folder: /home/jaken/vagrant/centos7/ => /vagrant
经过漫长的等待,期间vagrant会根据我们上面设置的配置文件,对虚拟机相关运行参数进行初始化,上面的配置文件是通过ruby语言编写的。
注意上面的up命令中我们加入了--provider=libvirt命令,这意味这我们指定了提供者为kvm,可以通过设置环境变量VAGRANT_DEFAULT_PROVIDER=libvirt来修改默认的Provider,其实在我们的机器上即便不添加这个命令他也会自动选中libvirt的
最后我们可以通过vagrant status查看该虚拟机的运行状态,同时我们也可以在KVM管理界面中看到在运行的虚拟机了:
虚拟机启动后我们需要连接到该虚拟机的终端中,根据上面创建时打印的日志,我们发现vagrant已经为我们配置了ssh,其中用户名为vagrant,同时也打印了IP地址,我们可以通过ssh连接到刚刚创建的虚拟机中。当然还有一个更简单的办法通过命令:vagrant ssh即可连接到虚拟机中