最近花了幾天的時間研究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 的實...