概述

因为家里有一台机器是用 Linux 的,以前我是直接将这台机器作为日用的,但是后面因为在公司没办法直接用这台机器,所以这台机器使用率就低了,后面就不直接使用它了,将它作为一台服务器,然后通过远程连接使用了。

但是,这台机器对于个人用来说我感觉还可以,所以就想开一些 VM 做一些单独的事情,按照经验来说,我可能会直接用 Virsh(不想安装 GUI 和使用 WebUI),但是想到我用的这些 VM 可能还可以上公有云,所以就选择了另外一个熟悉的工具:Vagrant。

Vagrant 介绍

Vagrant 是 Hashicorp 开发的用于管理 VM 基础设施的工具,它的理念有点像 Docker,就是你可以通过可以版本管理的配置文件来管理你的开发和运行环境,Docker 是通过 Compose(大型的编排用 Kubernetes) 来管理容器环境,而 Vagrant 是通过 Vagrantfile 来管理 VM 环境。

Vagrant 通过插件可以支持不同的虚拟化平台,这里的虚拟化平台不仅是指本地的虚拟化平台(KVM、Vmware etc)还可以是公有云的平台,所以 Vagrant 视图通过 Vagrantfile 抹平平台之间的差异,让开发者可以平顺迁移。

安装配置

安装 Vagrant

Arch 系的 Linux 可以直接通过包管理工具安装:

  1. [root@liqiang.io]# yay -Sy vagrant

等待安装完就可以了。更多的其他系统可以根据官方文档的指导来:Installing Vagrant

安装 DigitialOcean 插件

  1. [root@liqiang.io]# vagrant plugin install vagrant-digitalocean
  2. [root@liqiang.io]# cat Vagrantfile
  3. # -*- mode: ruby -*-
  4. # vi: set ft=ruby :
  5. require 'yaml'
  6. current_dir = File.dirname(File.expand_path(__FILE__))
  7. configs = YAML.load_file("#{current_dir}/.vagrant.yaml")
  8. vagrant_config = configs['configs']
  9. do_token = vagrant_config['digital_ocean_token']
  10. Vagrant.configure('2') do |config|
  11. config.vm.define "droplet1" do |config|
  12. config.vm.provider :digital_ocean do |provider, override|
  13. override.ssh.private_key_path = '~/.ssh/id_rsa'
  14. override.vm.box = 'digital_ocean'
  15. override.vm.box_url = "https://github.com/devopsgroup-io/vagrant-digitalocean/raw/master/box/digital_ocean.box"
  16. override.nfs.functional = false
  17. override.vm.allowed_synced_folder_types = :rsync
  18. provider.token = do_token
  19. provider.image = 'ubuntu-18-04-x64'
  20. provider.region = 'nyc1'
  21. provider.size = 's-1vcpu-1gb'
  22. end
  23. end
  24. end

安装 KVM 插件

  1. [root@liqiang.io]# sudo pacman --sync --sysupgrade --refresh
  2. [root@liqiang.io]# sudo pacman --query --search 'iptables' | grep "local" | grep "iptables " && \
  3. sudo pacman --remove --nodeps --nodeps --noconfirm iptables
  4. [root@liqiang.io]# sudo pacman --sync --needed --noprogressbar --noconfirm \
  5. iptables-nft libvirt qemu openbsd-netcat bridge-utils dnsmasq vagrant \
  6. pkg-config gcc make ruby
  7. [root@liqiang.io]# vagrant plugin install vagrant-libvirt

Vagrant 测试

  1. [root@liqiang.io]# vagrant init fedora/32-cloud-base
  2. [root@liqiang.io]# vagrant up --provider=digital_ocean # 尝试 digital ocean
  3. [root@liqiang.io]# vagrant up --provider=libvirt # 尝试 libvirt
  4. [root@liqiang.io]# vagrant ssh
  5. [root@liqiang.io]# vagrant destroy

通过环境变量指定虚拟化

  1. [root@liqiang.io]# export VAGRANT_DEFAULT_PROVIDER=libvirt

问题

默认启用 ipv6

通过 vagrant up 启动的时候,发现默认用了 ipv6,然后失败了:

  1. [root@liqiang.io]# vagrant up
  2. Bringing machine 'default' up with 'libvirt' provider...
  3. ==> default: Checking if box 'centos/7' version '2004.01' is up to date...
  4. ... ...

没找出什么原因,怀疑可能是安装完没有重启,某些配置未生效导致的,所以尝试了一下重启,然后发现重启后就正常了。

备注