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