使用vagrant准备环境

Vagrant 简介 #

Vagrant 与 multipass类似,是一款虚拟机管理工具。也可以让用户在使用虚拟机时有类似docker的感觉。

虽然Vagrant在使用上会比multipass笨重一点,但由于multipass对ubuntu的支持非常好,对其他系统几乎不支持,所以如果有centos等系统的需求,则使用vagrant比较好。

Vagrant在windows平台的providers支持 virtualbox 与 hyper-V,在linux和 MacOS 平台的providers支持busybox与qemu;截至到 2023.05.28,busybox 不支持 M1 芯片的 MacOS 系统,所以 M1 芯片的 MacOS 系统最好使用Multipass + Ubuntu这个组合。

Vagrant官网:https://www.vagrantup.com/

安装 #

由于不同版本以及操作系统的差异,请尽量按照官网的步骤安装。

虚拟机管理 #

编写 Vagrantfile #

此文件实现了master*1+worker*2的环境:

IP_NW="192.168.33."
IP_START=100

Vagrant.configure("2") do |config|
  config.vm.box = "generic/centos8"
  
  config.vm.provider "virtualbox" do |vb|
    vb.memory = 4096
    vb.cpus = 2
	vb.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
  end
  
  config.vm.provision "shell", inline: <<-SHELL
	  echo "$IP_NW$((IP_START)) master-node" >> /etc/hosts
	  echo "$IP_NW$((IP_START+1)) worker-node01" >> /etc/hosts
	  echo "$IP_NW$((IP_START+2)) worker-node02" >> /etc/hosts
  SHELL
  
  config.vm.define "master" do |vb|
    vb.vm.hostname = "master-node"
    vb.vm.network "private_network", ip: IP_NW + "#{IP_START}"
  end

  (1..2).each do |i|
	config.vm.define "node0#{i}" do |node|
		node.vm.hostname = "worker-node0#{i}"
		node.vm.network "private_network", ip: IP_NW + "#{IP_START + i}"
	end
  end 
  
end

安装完成后可以使用 vagrant ssh-config 获取ssh 配置信息。

更改为root登录 #

$ vagrant ssh master-node
$ sudo -s
$ sh -c 'cd /root && \
  mkdir -p .ssh && \
  chmod 0700 .ssh && \
  cp -af /home/vagrant/.ssh/authorized_keys .ssh/ && \
  chown root:root .ssh/authorized_keys'

清理Vagrant环境 #

如果vagrant 没有启动成功,那么清理的话分为以下几步:

  • 重启Windows,避免virtualbox关闭不了,卡在Shutting的过程
  • 在VirtualBox中删除所有的虚拟机
  • 删除vagrant工程中的.vagrant目录
  • 删除 c:\users\username.vagrant.d\data\machine-index* 所有索引文件
  • 再次执行 vagrant up 命令

手动导入box #

如果因为网络等问题,在vagrant up指令无法正常下载box,那么就需要手动导入box了:

# 首先需要便写一个metadata.json
$ cat > metadata.json << EOF
{
    "name": "generic/centos8",
    "versions": [{
        "version": "4.2.14",
        "providers": [{
            "name": "virtualbox",
            "url": "file:///D:/Downloads/fe15bfbf-d39d-4ee6-99cb-9624fa4be44f"
        }]
    }]
}
EOF

# 使用vagrant box add指令导入
$ vagrant box add 'D:\Downloads\metadata.json'

也可以直接使用指令导入:

$ vagrant box add generic/centos8 --box-version 4.2.14 --provider virtualbox file:///D:/Downloads/fe15bfbf-d39d-4ee6-99cb-9624fa4be44f

其他 #

安装qemu驱动 #

# 安装qemu
brew install qemu

# 安装插件
vagrant plugin install vagrant-qemu

# 编辑Vagrantfile
cat > ./Vagrantfile << EOF
Vagrant.configure("2") do |config|
  config.vm.box = "generic/centos8"

  config.vm.provider "qemu" do |v|
    v.memory = 4096
    v.cpus = 2
  end

  config.vm.define "test" do |v|
    v.vm.hostname = "test-node"
  end
end
EOF

# 启动vagrant
vagrant up