openstack總結1 vagrant的使用

2021-08-28 11:20:14 字數 4582 閱讀 4073

最近花了幾天的時間研究openstack的安裝部署,終於搭建出來乙個最小例項。把在安裝部署過程中碰到的問題和經驗總結一下,以後不再犯錯,也分享給大家,提供點幫助。

搭建虛擬機器環境:

virtual box 5.1.38+vagrant 1.8.6+win10

openstack的部署環境

ubuntu16.04+openstack-ocata

vagrant是也有乙個類似於工作目錄的概念,我的設定的工作目錄是d:\openstack-ocata。在每個工作目錄下有乙個共享的配置檔案vagrantfile,在該工作目錄下執行vagrant命令時,讀取的配置都是該工作目錄下的配置檔案配置,不會影響其他工作目錄下的虛擬機器。

比如有有兩個工作目錄a,b,在a目錄下的配置檔案中定義了乙個虛擬機器v1,在b工作目錄下的配置檔案定義了兩個虛擬機器v2,v3。

假設都已經初始化則在目錄下執行vagrant up(啟動虛擬機器命令)時,只會啟動v1虛擬機器,不會啟動v2,v3虛擬機器。不同工作目錄下的虛擬機器是操作隔離的。

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"

endconfig.vm.define "computenode" do |computenode|

computenode.vm.network "private_network", ip: "192.168.44.22"

computenode.vm.hostname = "compute"

endend

上面定義了兩個虛擬機器例項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

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"

endconfig.vm.define "computenode" do |computenode|

computenode.vm.network "private_network", ip: "192.168.44.22"

computenode.vm.hostname = "compute"

endend

驗證:在物理主機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"

endend

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"

endend

end有了這一節的vagrant的相關設定的基礎,在安裝與部署openstack方面就會順利很多。

openstack各元件總結

一 keystone 1 keystone的功能 1 管理使用者及其許可權 2 維護openstack各服務的endpoint 3 認證和鑑權 2 與keystone相關的名詞 user credentials authentication token project service endpoin...

OpenStack的架構詳解 1

openstack既是乙個社群,也是乙個專案和乙個開源軟體,它提供了乙個部署雲的操作平台或工具集。其宗旨在於,幫助組織執行為虛擬計算或儲存服務的雲,為公有雲 私有雲,也為大雲 小雲提供可擴充套件的 靈活的雲計算。1.openstack是什麼 openstack既是乙個社群,也是乙個專案和乙個開源軟體...

OpenStack學習 1 虛擬化

虛擬化是雲計算的基礎。簡單的說,虛擬化使得在一台物理的伺服器上可以跑多台虛擬機器,虛擬機器共享物理機的 cpu 記憶體 io 硬體資源。host 是如何將自己的硬體資源虛擬化,並提供給 guest 使用的呢?這個主要是通過乙個叫做 hypervisor 的程式實現的。根據 hypervisor 的實...