openstack总结1_vagrant的使用

最近花了几天的时间研究openstack的安装部署,终于搭建出来一个最小实例。把在安装部署过程中碰到的问题和经验总结一下,以后不再犯错,也分享给大家,提供点帮助。

搭建虚拟机环境:

virtual box 5.1.38+vagrant 1.8.6+win10

openstack的部署环境

ubuntu16.04+openstack-ocata

我是采用virtual box+vagrant来搭建多ubuntu虚拟机环境的,开始时是从官网上下载的官网最新vagrant2.1.5和最新的virtual box5.2.18,搭建环境后安装单个ubuntu16.04没有问题,但是搭建多个ubuntu虚拟机环境的时候发现配置vagrant文件跟网上说的有点区别,后来把vagrant版本换到了1.8.6,但是安装虚拟机的时候又出现问题,把virtual box的版本也换成旧一点的5.1.38版本去安装正常了。

vagrant是也有一个类似于工作目录的概念,我的设置的工作目录是D:\openstack-ocata。在每个工作目录下有一个共享的配置文件Vagrantfile,在该工作目录下执行vagrant命令时,读取的配置都是该工作目录下的配置文件配置,不会影响其他工作目录下的虚拟机。

比如有有两个工作目录A,B,在A目录下的配置文件中定义了一个虚拟机V1,在B工作目录下的配置文件定义了两个虚拟机V2,V3。

假设都已经初始化则在目录下执行vagrant up(启动虚拟机命令)时,只会启动V1虚拟机,不会启动V2,V3虚拟机。不同工作目录下的虚拟机是操作隔离的。

vagrant的单环境的安装的步骤网上很多,我是从网上下载了一个box存放到本地,然后从本地导入box的方式安装的,单个虚拟机实例的安装步骤如下:

1.先导入本地的box到vagrant仓库中,一遍vagrant识别和管理box。

vagrant box add ubuntu16 D:/data/ubuntu16.box

验证是否导入成功:

vagrant box list

列别中出现刚才导入的box说明导入成功。

2.利用仓库中的box来创建虚拟机实例。box相当于模板,而由一个模板可以刻录出多份相同类型的虚拟机实例。

vagrant init

3.启动虚拟机实例

vagrant up

验证是否启动成功:

vagrant status

另外还需要说明的是,在配置多个虚拟机实例的情况也可以单独启动指定的虚拟机,如只要启动controller实例,则执行:

vagrant up controlNode

关闭虚拟机:vagrant halt

挂起虚拟机:vagran suspend

挂起后唤醒虚拟机:vagrant resume

windows下需要利用远程登录工具登录虚拟机环境,如Xshell,登录虚拟机的登录名和密码在用户主目录下的.vagrant.d\boxes下找到的对应box,在里层也有个Vagrantfile文件,在里面可以找到登录的用户名config.ssh.username和密码config.ssh.password。我操作的环境是在文件:

C:\Users\carter\.vagrant.d\boxes\ubuntu16\0\virtualbox\Vagrantfile

上面的安装过程一般没有问题,对于安装多个节点的openstack环境来说,需要解决下面三个问题:

1.如何定义和启动多个虚拟机实例。

对共享的Vagrantfile文件做如下设置:

Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu16"
  config.vm.define "controlNode" do |controlNode|
    controlNode.vm.network "private_network", ip: "192.168.44.11"
    controlNode.vm.hostname = "controller"
  end
  config.vm.define "computeNode" do |computeNode|
    computeNode.vm.network "private_network", ip: "192.168.44.22"
    computeNode.vm.hostname = "compute"
  end
end

上面定义了两个虚拟机实例controlNode,computeNode,两个虚拟机的IP和主机名为:

192.168.44.11  controller

192.168.44.22  compute

2.如何给多个虚拟机设置主机名,并且虚拟机之间通过主机名就可以识别对方不用通过IP就可以相互通信。

在1中已经定义了虚拟机的主机名,ssh登录到虚拟机中输入hostname命令显示主机名,但是此时通过ping相应的主机名并不能ping通,即还不能相互访问。需要通过一个插件才可以实现主机名相互访问。需要安装vagrant-hostmanagerr插件,同时修改配置文件。

a:安装插件,在cmd中的工作目录下执行如下命令:

vagrant plugin install vagrant-hostmanager

vagrant会自动下载安装插件,等安装完成。

b:修改配置文件,在配置文件中加入如下设置:

  config.hostmanager.enabled = true   --设置启用host管理设置
  config.hostmanager.manage_guest = true  --设置管理虚拟机上面的hosts目录
  config.hostmanager.manage_host = true --设置管理物理主机上的hosts目录

配置文件Vagrantfile修改后如下:

Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu16"
  
  config.hostmanager.enabled = true
  config.hostmanager.manage_guest = true
  config.hostmanager.manage_host = true
  
  config.vm.define "controlNode" do |controlNode|
    controlNode.vm.network "private_network", ip: "192.168.44.11"
    controlNode.vm.hostname = "controller"
  end
  config.vm.define "computeNode" do |computeNode|
    computeNode.vm.network "private_network", ip: "192.168.44.22"
    computeNode.vm.hostname = "compute"
  end
end

验证:

在物理主机cmd中输入命令:ping controller 成功pIng通虚拟机节点controller,物理主机可以ping通虚拟机。

登录到虚拟机controller中输入命令:ping compute 成功pIng通,虚拟机之间也可以相互ping通。

3.这个问题在有些情况下会出现,就是如何设置单个虚拟机的内存大小。

在我部署的环境中开始设置的控制节点controller的内存4G,计算节点compute的内存1G.开始没有问题,但是随着计算节点上安装的组件越来越多,出现申请内存失败的问题,这需要加大控制节点的内存解决。设置单个虚拟机的内存大小的配置如下:

controlNode.vm.provider "virtualbox" do |v|
      v.gui = false
      v.name = "ubuntu16-1"
      v.cpus = "4"
      v.memory = "5120"
    end

这个要加在单个虚拟机配置的代码块内部。c.name代表虚拟机名称,与虚拟机的主机名不是一个概念,这个名称在哪里会用到呢,在virtual box的面板上会看到虚拟机列表,虚拟机里面里面显示的虚拟机名字就是v.name。

v.cpus是cpu核数,v.memory是内存大小。

修改后完整的配置文件如下:

Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu16"
  
  config.hostmanager.enabled = true
  config.hostmanager.manage_guest = true
  config.hostmanager.manage_host = true
  
  config.vm.define "controlNode" do |controlNode|
    controlNode.vm.network "private_network", ip: "192.168.44.11"
    controlNode.vm.hostname = "controller"
    controlNode.vm.provider "virtualbox" do |v|
      v.gui = false
      v.name = "ubuntu16-1"
      v.cpus = "4"
      v.memory = "5120"
    end
  end
  config.vm.define "computeNode" do |computeNode|
    computeNode.vm.network "private_network", ip: "192.168.44.22"
    computeNode.vm.hostname = "compute"
    computeNode.vm.provider "virtualbox" do |v|
      v.gui = false
      v.name = "ubuntu16-2"
      v.cpus = "2"
      v.memory = "2048"
    end
  end
end

有了这一节的vagrant的相关设置的基础,在安装与部署openstack方面就会顺利很多。

猜你喜欢

转载自blog.csdn.net/w450093854/article/details/82857274