创建自动化配置开发环境
最近由于最近研究和学习的关系, 需要经常配置和搭建多个虚拟机组成的分布式系统. 原来只是用虚拟机程序, 比如说用 Virtual box 直接建立虚拟机. 如果只是偶尔创建虚拟机研究的话, 我觉得直接使用 Hyper-V 或者 Virtual box 还是没问题的. 但是这段时间需要经常批量创建虚拟机, 然后有可能会在开发或者测试完成后销毁这些虚拟机. 而且完成的虚拟机配置有时需要固定下来以后再使用. 其实大家可以发现, 这些需求, 是能够用容器技术来实现吗? 但是容器技术并不能创建完整的 VM, 而且容器技术通常是无状态的, 用于运行微服务应用. 对于数据库和存储类的分布式应用. 或者要求固定存储的应用环境的搭建其实并不适合.
安装和配置 Vagrant
Vagrant 是用 Ruby 语言开发的多虚拟机 (Multiple Hypervisors) 自动化管理工具. Vagrant 的最新版本是 2.2.7. 这个工具的安装非常简单, 安装包可以在下面的页面下载: https://www.vagrantup.com/downloads.html 我是在自己的 Windows 操作系统上安装的. 运行安装程序, 然后选择好安装目录就可以开始了. Vagrant 是一个命令行工具, 没有 UI 界面. 所以安装完成后我们打开 PowerShell, 或者安装的操作系统的 shell 程序, 输入以下命令:
Vagrant -v
我们就可以看到会显示版本号, 我安装的是最新的 2.2.7. 如果正常那就应该没啥问题了. 然后是安装虚拟机程序, 在 Windows 操作系统上我们可以选择 VirtualBox,VMware workstation 和 Hyper-V.Hyper-V 是 Windows 自带的虚拟机程序, 性能最好, 不过我还是不推荐使用. 主要还是因为 Hyper-V 本身功能和设计还不太成熟, 如果删除一台虚拟机, 相关的硬盘等资源不会同步删除, 还需要手工清理. 而且在默认设置下对 CPU 和内存的消耗比较大. 当然最重要的因素还是 Vagrant 的 Box 库中提供的支持 HyperV 的 box 还是比较少, 更新也不及时. VMWare Workstation 在 Windows 的兼容性不太好, 使用起来总感觉不是特别顺手, 而且还老是提示升级到付费的 Pro 版本, 反正就是用户体验不大好. 因此, 综合起来, 我比较推荐单机 VM 开发测试环境采用 VirtualBox.
接下来就是从 Oracle 的网站上下载 VirtualBox 和安装了, 这个过程也很简单和直观, 就不详细描述了. 安装完 Virtual Box 后, Windows 系统的用户请一定要关闭 HyperV 功能, 如下图所示:
也可以在 Powershell 命令行输入下面的命令(需要管理员权限)
- Disable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-All
- #### 安装 Vagrant 插件 Vagrant share
如果希望能够把配置好的虚拟机环境共享给其他人演示, 或者和其他人合作. 需要安装 Vagrant share 插件, 可以使用下面的命令:
Vagrant plugin install Vagrant-share
需要连接 Vagrant 在国外的服务器, 所以安装会需要一段时间, 等待一会儿后就会完成了. 这个功能需要和 https://ngrok.com/ 内网穿透服务一起使用.
Vagrant 的基本使用和操作
首先运行 Vagrant 帮助命令, 查看大致有哪些命令和功能:
Vagrant 会把一个虚拟机打包成 box, 这个有点类似 docker 的 image 概念. 就是用来生成一个完整的虚拟机的. 按照官网的说明创建一个标准的 Ubuntu 或者 CentOS 非常容易. 直接从官方的 box 库就可以下载并运行. 下面的命令会在当前文件夹生成一个 Vagrantfile 配置文件. 然后运行 Vagrant up 就能够创建并运行一个 Ubuntu18.4 的虚拟机了, 默认状态是使用的 VirtualBox 作为虚拟机 Provider.
- Vagrant init hashicorp/bionic64
- Vagrant up
不过由于众所周知的原因, 国内的下载速度是非常非常缓慢的. 慢到怀疑是在上个世纪 90 年代的网速.
各种镜像源
http://www.vagrantbox.es/ , 当然也可以到官方主页上去查找和下载. 清华和科大有 CentOS 和 Ubuntu 的 Box 镜像. 下载下来以后如何载入.
Vagrant box add https://mirrors.tuna.tsinghua.edu.cn/ubuntu-cloud-images/vagrant/trusty/current/trusty-server-cloudimg-amd64-vagrant-disk1.box --name Ubuntu/trusty
上面是下载清华的源
Vagrant box add C:\test.box --name unbuntu1804
上面的是通过本地 box 加载
box 被加载到本地以后我们可以通过 box list 命令查看, 我们可以看到本地现在已经有了两个 box 了.
- PS D:\Vagrant\example2> Vagrant box list
- ubuntu1804 (VirtualBox, 0)
- ubuntuNew (VirtualBox, 0)
重载, 挂起, 暂停和销毁虚拟机
- Vagrant suspend #这个命令是暂停虚拟机
- Vagrant halt #关闭虚拟机
- Vagrant destroy #彻底销毁虚拟机
- Vagrant reload #配置文件修改过后, 可以重新加载配置
SSH 登录虚拟机
Vagrant SSH
我们通过 Vagrant status 可以查看所有虚拟机的运行状态, 如果有多个虚拟机在运行, 需要加上机器名称
Vagrant SSH node1
从新打包 Box
当我们修改了原始的虚拟机配置, 需要把现在的虚拟机作为标准开发环境的 box 时, 我们应该用 package 命令:
Vagrant package [name|id]
详细用法: https://www.vagrantup.com/docs/cli/package.html
Vagrant 的配置文件
直接运行 Vagrant init, 然后打开这个文件. 我们可以看到各个配置项. 最基本的配置文件如下, 这个是用名称是 hashicorp/bionic64 的 box 创建一个虚拟机.
- Vagrant.configure("2") do |config|
- config.vm.box = "hashicorp/bionic64"
- end
可以加入 box 的版本信息
- Vagrant.configure("2") do |config|
- config.vm.box = "hashicorp/bionic64"
- config.vm.box_version = "1.1.0"
- config.vm.hostname = "myhost"
- end
配置私有网络,
这个是用虚拟网关作为 dhcp 服务器自动分配 IP 地址
- Vagrant.configure("2") do |config|
- config.vm.network "private_network", type: "dhcp"
- end
配置 IPV4 静态地址
- Vagrant.configure("2") do |config|
- config.vm.network "private_network", ip: "192.168.50.4"
- end
配置 IPV6 静态地址
- Vagrant.configure("2") do |config|
- config.vm.network "private_network", ip: "fde4:8dba:82e1::c4"
- end
配置公有网络
这个是用和主机物理网卡桥接的模式连接到外部的路由器的模式. 外部网络可以访问到这台虚拟机
- Vagrant.configure("2") do |config|
- config.vm.network "public_network"
- end
同时配置多台虚拟机
通过下面的方式可以配置多台虚拟机
- Vagrant.configure("2") do |config|
- config.vm.provision "shell", inline: "echo Hello"
- config.vm.define "node1" do |n1|
- n1.vm.box = "mybox"
- end
- config.vm.define "node2" do |n2|
- n2.vm.box = "mybox2"
- end
- end
来源: https://www.cnblogs.com/yangjian2006/p/12403888.html