工具准备
本人的机器环境是:MacOS
1. 安装 VirtualBox
2. 安装 Vagrant
Vagrant 的常用操作命令
命令 | 作用 |
---|
vagrant box add | 添加box的操作 |
vagrant init | 初始化box的操作,会生成vagrant的配置文件Vagrantfile |
vagrant up | 启动本地环境 |
vagrant ssh | 通过ssh登录本地环境所在虚拟机 |
vagrant halt | 关闭本地环境 |
vagrant suspend | 暂停本地环境 |
vagrant resume | 恢复本地环境 |
vagrant reload | 修改了Vagrantfile后,使之生效(相当于先 halt,再 up) |
vagrant destroy | 彻底移除本地环境 |
vagrant box list | 显示当前已经添加的box列表 |
vagrant box remove | 删除相应的box |
vagrant package | 打包命令,可以把当前的运行的虚拟机环境进行打包 |
vagrant plugin | 用于安装卸载插件 |
vagrant status | 获取当前虚拟机的状态 |
vagrant global-status | 显示当前用户Vagrant的所有环境状态 |
Vagrant 配置文件操作
config.vm
config.vm中设置了Vagrant管理的机器的配置。
配置 | 作用 |
---|
config.vm.boot_timeout
| Vagrant等待机器启动并可访问的时间(秒 默认情况下,这是300秒。 |
config.vm.box
| 这将配置该机器要下载的box 。可以去HashiCorp/Vagrant Cloud中查找已安装框的名称或框的简写名称。此选项需要Vagrant 1.5或更高版本。 |
config.vm.box_check_update
| 如果为true,Vagrant会在每次执行vagrant up 时检查配置的config.vm.box 的更新。 如果发现更新,Vagrant会告诉用户. |
config.vm.box_download_checksum
| 由config.vm.box_url 指定的box的校验。如果未指定,则不会执行校验和比较。如果指定,Vagrant会将下载的box校验与这个值和错误进行比较,如果指定了此选项,则还必须指定`config.vm.box_download_checksum_type。 |
config.vm.box_download_checksum_type
| 指定的校验和类型。支持的值目前是“md5”,“sha1”和“sha256”,如果执行则还必须指定config.vm.box_download_checksum |
config.vm.box_download_client_cert
| 下载邮箱时使用的客户端证书的路径(如果有必要)。 默认情况下,不使用客户端证书来下载该框。 |
config.vm.box_download_ca_cert
| 直接下载盒子时使用的CA证书包的路径。 默认情况下,Vagrant将使用Mozilla CA证书包。 |
config.vm.box_download_ca_path
| 包含CA证书的目录的路径,用于直接下载box。 默认情况下,Vagrant将使用Mozilla CA证书包。 |
config.vm.box_download_insecure
| 如果为true,则来自服务器的SSL证书将不会被验证。 默认情况下,如果URL是HTTPS URL,则SSL证书将被验证。 |
config.vm.box_download_location_trusted
| 如果为true,则所有HTTP重定向将被视为可信。这意味着用于初始URL的凭证将用于所有后续重定向。默认情况下,重定向位置不受信任,因此凭据(如果指定)仅用于初始HTTP请求。 |
config.vm.box_url
| 可以找到配置的 box的URL。如果config.vm.box的是值是HashiCorp或者Vagrant Cloud中的一个box的简写,那么不需要指定该值。否则,它应该指向没有安装的盒子可以找到的适当位置。 |
config.vm.box_version
| 要使用box的版本 |
config.vm.communicator
| 用于连接到 guest box 的通信器类型。默认情况下是“ssh”,但对于 Windows 虚拟机应更改为“winrm”。 |
config.vm.graceful_halt_timeout
| 调用 vagrant halt 时 Vagrant 等待机器正常停止的时间。默认为 60 秒。 |
config.vm.guest
| 将在本机中运行的客户操作系统。默认为 linux,Vagrant 会自动检测正确的发行版。Vagrant 需要知道这些信息才能执行某些客户操作系统特定的事情,例如挂载目录和配置网络。 |
config.vm.hostname
| 机器应具有的主机名。默认为 nil 。如果为 nil ,Vagrant 将不管理主机名。如果设置为字符串,主机名将在引导时设置。 |
config.vm.network
| 参考下文网络配置 |
config.vm.post_up_message
| 执行 vagrant up 之后显示给用户的消息,可以用于指示如何访问开发环境的各个组件等。 |
config.vm.provider
| 配置 provider 特定的配置,该配置用于修改特定于某个 provider 的设置。如果您正在配置的 provider 不存在或未在运行 Vagrant 的系统上设置,则 Vagrant 将忽略此配置块。这允许共享一个适用于多个 provider 的 Vagrantfile,即使没有安装所有的 provider(至少要安装 Vagrantfile 要求的一个 provider)。 |
config.vm.provision
| 在机器上配置 provisioner,以便在创建机器时自动安装和配置软件。 参考:provisioner |
config.vm.synced_folder
| 在机器上配置已同步的目录,以便主机上的目录可以与客户机同步。 |
config.vm.usable_port_range
| Vagrant 可以使用的用来处理端口冲突的一系列端口。默认为 2200..2250。 |
config.ssh
config.ssh
涉及配置Vagrant如何通过SSH访问你的机器。大多数Vagrant的设置,默认值通常就够用了,但是我们还是可以根据自己的实际情况做出微调。
配置 | 作用 |
---|
config.ssh.username
| 默认设置Vagrant将SSH作为用户名。如果自定义设置了用户名,则可以自由覆盖此内容。 |
config.ssh.password
| 设置Vagrant将用于验证SSH用户的密码。Vagrant建议在下面使用基于密钥的身份验证而不是密码。 |
config.ssh.host
| SSH进入的主机名或IP。默认情况下,这是空的,因为服务提供商通常会为您解决这个问题。 |
config.ssh.port
| 进入SSH的端口。默认情况下,这是端口22。 |
config.ssh.guest_port
| 运行SSH的guest虚拟机上的端口。这被一些提供商用来检测转发的SSH端口。例如,如果设置为22(默认值),并且Vagrant从主机上的端口4567检测到来宾端口22上的转发端口,则Vagrant将尝试使用端口4567与来宾进行对话(如果没有其他端口)选项。 |
config.ssh.private_key_path
| 用于SSH访问客机的私钥的路径。默认情况下,这是随Vagrant一起提供的不安全私钥,因为这是公共盒子使用的私钥。如果您使用自定义SSH密钥创建自己的自定义框,则应该指向该私钥。 |
config.ssh.keys_only
| 仅使用Vagrant提供的SSH私钥(不要使用存储在ssh-agent中的任何密钥)。默认值是true。 |
config.ssh.verify_host_key
| 执行严格的主机密钥验证。默认值是false。 |
config.ssh.forward_agent
| 如果为true,则启用通过SSH连接的代理转发。默认为false。 |
config.ssh.forward_x11
| 如果为true,则启用通过SSH连接进行的X11转发。默认为false。 |
config.ssh.forward_env
| 要转发给guest虚拟机的主机环境变量数组 |
config.ssh.insert_key
| 如果为true,Vagrant将自动插入一个用于SSH的密钥对,如果检测到,则替换机器内部的Vagrant默认不安全密钥。默认为 true |
config.ssh.proxy_command
| 执行命令行命令,接收要在stdin上发送到SSH的数据。 |
config.ssh.pty
| 如果为true,pty将用于供应。默认为false。 |
config.ssh.keep_alive
| 如果为true,则此设置将默认每隔5秒发送一次保持活动数据包,以保持连接处于活动状态。 |
config.ssh.shell
| 执行来自Vagrant的SSH命令时使用的shell。默认情况下,这是bash -l。请注意,这对运行vagrant ssh时获得的shell没有影响。此配置选项仅影响在Vagrant内部执行命令时使用的shell。 |
config.ssh.export_command_template
| 用于在活动会话中生成导出的环境变量的模板。 |
config.ssh.sudo_command
| 使用sudo执行命令时使用的命令。 |
config.ssh.compression
| 如果设置为false,则此设置将不包括ssh进入机器时的压缩设置。 如果没有设置,它将默认为true,Compression = yes将使用ssh启用。 |
config.ssh.dsa_authentication
| 如果为false,则此设置在ssh登录到计算机时不包括DSAAuthentication。 如果未设置,则默认为true,DSAAuthentication = yes将与ssh一起使用。 |
config.ssh.extra_args
| 此设置值直接传递到ssh可执行文件中。 这使您可以传递任何命令来执行诸如反向隧道切入ssh程序之类的任务。 |
Vagrantfile
1. 初始化一个工作目录
比如:~/Document/vagrant
使用命令:vagrant init
初始化,会自动生成Vagrantfile
文件
2. 下载centos系统
vagrant box add centos/7
Vagrant Box的中央仓库地址
3. 配置Vagrantfile
文件,创建一个3个节点的虚拟机
Vagrant.configure("2") do |config|
(1..3).each do |i|
config.vm.define "node#{i}" do |node|
# 设置虚拟机的Box
node.vm.box = "centos/7"
# 设置虚拟机的主机名
node.vm.hostname="node#{i}"
# 设置虚拟机的IP
node.vm.network "private_network", ip: "192.168.56.#{100+i}"
# 设置主机与虚拟机的共享目录
# node.vm.synced_folder "~/Documents/vagrant/share", "/home/vagrant/share"
# VirtaulBox相关配置
node.vm.provider "virtualbox" do |v|
# 设置虚拟机的名称
v.name = "node#{i}"
# 设置虚拟机的内存大小
v.memory = 2048
# 设置虚拟机的CPU个数
v.cpus = 1
end
end
end
end
语法还是比较易懂的,下面介绍其中几个比较关键的句法
deploy.vm.provider
这句指定了虚拟机的提供者是。本例中是 virtualbox。需要注意的是 Vagrant 只是虚拟机的编排工具,而它本身并不提供虚拟技术,需要跟其他虚拟机软件结合,例如:virtualbox、libvirt。接下来的 v
就是对这台虚拟机的设置。
vm.box
该虚拟机的初始化镜像名称,这里是 centos/7
。
vm.hostname
该虚拟机的 hostname,很重要,ssh 连接时用的就是这个名字。请起一个有意义的名字,不然以后又得重设啦。
vm.network
网络设置,Vagrant 有三种网络设置模式:
Forwarded port
这种方式把本机和虚拟机的端口进行映射,例如:
config.vm.forwarded_port 80, 8080
这是把虚拟机的 80 端口映射到宿主机的 8080 端口,这样访问宿主机的 8080 端口就相当于访问虚拟机的 80 端口了。
Private network
这种方式是私有网络,只允许宿主机访问虚拟机。如果多个虚拟机设定在同一个网段,那么几个虚拟机之间也可以互相访问。相当于搭建了个小型集群。
Public network
这种方式虚拟机的网络配置跟宿主机的网络配置一样,在外网别可以像访问宿主机一样访问虚拟机。
启动虚拟机
之前介绍的,就是本地搭建集群所需掌握的 Vagrantfile 文件格式的基本内容了。下面介绍如何从这个配置文件来启动这组虚拟机。
将上面的文件保存为 Vagranfile
,然后在 Vagranfile 文件所在目录执行:
vagrant up
这时候整个集群启动完毕了。
使用虚拟机
前面说过要连接虚拟机,是要使用虚拟机的 hostname,比如:
vagrant ssh node1
这句命令会以 vagrant 的用户登录到 deploy 虚拟机节点,然后可以用 sudo su
命令获得 root 权限。
用一下指令可以查看虚拟机的 ssh 配置详细情况:
vagrant ssh-config
当我们想暂时关闭虚拟机时可以:
vagrant halt
这个命令会关掉整组虚拟机,要是我们只想关掉 deploy 可以用:
vagrant halt node1
当我们玩腻了,想要删掉虚拟机可以:
vagrant destroy
Vagrant 会每台机子询问是否删除。
免密登陆
(1)配置hosts
每台机器上都做如下配置:
vi /etc/hosts
增加如下内容:
192.168.56.101 node1
192.168.56.102 node2
192.168.56.103 node3
(2) 生成秘钥
ssh-keygen -t rsa
默认的路径在/home/vagrant/.ssh/
复制到其他虚拟机即可实现免密登陆:
ssh-copy-id vagrant@node1
ssh-copy-id vagrant@node2
ssh-copy-id vagrant@node3
如果免密登陆失败,是ssh密码校验没有开启,可以如下操作:
vi /etc/ssh/sshd_config
开启如下配置:
PasswordAuthentication yes
systemctl restart sshd
这样就全部完成啦!!!