混合雲的做法,現在一般都是api適配得做法。比如nova或者cinder,都是在driver層增加乙個對接aws或者vmware的driver來調公有雲或者私有雲的api,從而達到在私有雲裡管理公有雲的目的。
現在有很多公司做混合雲管理多個私有雲或者公有雲,那今天我講的就是虛擬機器建立映象的乙個優化操作。
測試環境:私有雲openstack a,公有雲openstack b,openstack為l版本,現在很多公司做的公有雲都是用openstack做的,那我的測試環境就全部用openstack來測試。
寫乙個openstack driver,在nova.conf 配置一下driver為openstack driver,在私有雲a中建立虛擬機器,就會經過openstack driver調到公有雲b上去建立虛擬機器了。
在優化建立映象之前,建立映象的流程是啥呢,如下圖所示:
我們來看一下driver層的步驟,就當你已經看過nova製作映象的**了。
步驟:
1、呼叫novaclient介面create image 到公有雲b上建立映象
2、等待instance的task_state 為none,就說明虛擬機器這邊建立映象完成。
3、等待image的status為active狀態,說明在公有雲b上映象真正的建立完成
5、呼叫 本地glance 介面upload到本地的glance服務上,刪除臨時檔案tmp.raw
6、寫入私有雲映象與公有雲映象的對應關係。
這樣整個在私有雲的glance上就會有你建立的映象,如果你的私有雲還管理其他的私有雲或者公有雲,也可以用你剛才製作的映象了。
那問題來了,在第4步的步驟中,有乙個download映象和寫入到本地檔案的過程,那這個過程是否可以優化呢?
在呼叫glance image_download介面時,是直接返回的乙個生成器,for迴圈把所有的資料讀取上來存到檔案中的,
上傳映象時,glance upload介面時會傳入乙個檔案的fd,upload的時候for迴圈在檔案中讀取出檔案資訊傳送到glance服務的。
那我的優化點就在這,download檔案時,不寫入臨時檔案,直接把生成器傳入到upload介面中,從而達到乙個proxy過程,這樣就節省了寫入檔案與讀取檔案的操作了。
優化的整個流程圖如下:
1、呼叫novaclient介面create image 到公有雲b上建立映象
2、等待instance的task_state 為none,就說明虛擬機器這邊建立映象完成。
3、等待image的status為active狀態,說明在公有雲b上映象真正的建立完成
5、寫入私有雲映象與公有雲映象的對應關係。
**如下:
首先我們需要自己定義個生成器,我們有乙個read介面,在upload的時候就是呼叫read介面來讀取資料。
classdef__iter__(self):
returnself
defnext(self):
trydata
exceptstopiteration:
raise
defread(self, length):
returnself.next()
def__next__ = next
defdata(self, image_id):
py_logging.getlogger('keystoneauth1').setlevel(py_logging.warning)
image_data = self.client().images.data(image_id)
returndatafile(image_data)
log.debug(" begin to download image(%s)",
provider_image_id)
image_data = self.os_glanceclient(context).data(
provider_image_id)
log.debug("+++hw, image length = %s", len(image_data))
self._image_api.update(context,
image_id,
metadata,
image_data)
未來可能優化的流程圖如下:
這個方案可能需要修改一下公有雲openstack的glance配置,配置項:
show_image_direct_url = true
show_multiple_locations = true
修改此連個選項之後,就可以返回direct_url,這個可能對glance後端為swift或者ceph做為儲存的,有可能實現這個方案。
**部分的實現:
建立虛擬機器
建立虛擬機器時難點在於安裝作業系統上,其他地方沒難度我就不一步一步說了。要點 1 硬體相容性一般情況下選最高的那個,但有時候,最高的那個會存在不穩定的現象。儘管我是道聽途說,但保險起見,我選擇workstation 12.x。這個相容性可在後面隨時調整,不影響虛擬機器內的資料。2 主要難點在於安裝作...
建立虛擬機器
第一步點選新建虛擬機器,選擇自定義 高階 第二步預設選項,進入下一步。第三步,選擇稍後安裝作業系統。進入下一步。第四步,選擇安裝linux系統,下面版本選項選擇oracle liunx 7 64位。第五步,虛擬機器名稱自己命名。檔案位置,建議建立在自己能找到的磁碟裡。第六步,處理器數量推薦選擇2個,...
openstack 虛擬機器映象製作
準備 伺服器作業系統 centos 7 準備一台安裝了vnc viewer客戶端的windows作業系統用於訪問伺服器裡啟動的虛擬機器介面 前提是windows系統能訪問伺服器 sle 12 sp2 sap x86 64 gm 1.iso複製到伺服器 home 下 qemu img create f...