上一節咱們建立了 volume,本節討論如何將 volume attach 到 Instance,今天是第一部分。api
Volume 的最主要用途是做爲虛擬硬盤提供給 instance 使用。Volume 是經過 Attach 操做掛載到 instance 上的。本節咱們就來詳細討論 Cinder 是如何實現 Attach 的。服務器
上一節咱們成功建立了基於 LVM provider 的 volume。每一個 volume 其實是存儲節點上 VG 中的一個 LV。架構
那麼問題來了:存儲節點上本地的 LV 如何掛載到計算節點的 instance 上呢?一般狀況存儲節點和計算節點是不一樣的物理節點。ide
解決方案是使用 iSCSI,以下圖所示spa
iSCSI 是 Client-Server 架構,有 target 和 initiator 兩個術語。日誌
Target
提供 iSCSI 存儲資源的設備,簡單的說,就是 iSCSI 服務器。對象
Initiator
使用 iSCSI 存儲資源的設備,也就是 iSCSI 客戶端。ci
Initiator 須要與 target 創建 iSCSI 鏈接,執行 login 操做,而後就可使用 target 上面的塊存儲設備了。 Target 提供的塊存儲設備支持多種實現方式,咱們實驗環境中使用的是 LV。 Cinder 的存儲節點 cinder-volume 默認使用 tgt 軟件來管理和監控 iSCSI target,在計算節點 nova-compute 使用 iscsiadm 執行 initiator 相關操做。資源
下面來看看 Attach 操做的流程圖get
向 cinder-api 發送 attach 請求
cinder-api 發送消息
cinder-volume 初始化 volume 的鏈接
nova-compute 將 volume attach 到 instance
下面咱們詳細討論每個步驟。
客戶(能夠是 OpenStack 最終用戶,也能夠是其餘程序)向 cinder-api 發送請求:「請將這個 volume attach 到指定的 instance 上。
這裏咱們將 volume 「vol-1」 attach 到 instance 」c2」上。 attach 操做以前,c2 上的虛擬磁盤以下:
進入 GUI 操做菜單 Project -> Compute -> Volumes
選擇 volume 「vol-1」,點擊「Manage Attachments」
在 「Attach to Instance」下拉列表中,選擇instance 「c2」
點擊 」Attach Volume」
cinder-api 將接收到 attach volume 的請求,attach 請求實際上包含兩個步驟:
初始化 volume 的鏈接
Volume 建立後,只是在 volume provider 中建立了相應存儲對象(好比 LV),這時計算節點是沒法使用的。Cinder-volume 須要以某種方式將 volume export 出來,計算節點纔可以訪問獲得。這個 export 的過程就是「初始化 volume 的鏈接」。 下面是 cinder-api 的日誌文件 /opt/stack/logs/c-api.log 中記錄的相關信息Initialize_connection 的具體工做主要由 cinder-volume 完成,將在後面詳細討論。
Attach volume
初始化 volume 鏈接後,計算節點將 volume 掛載到指定的 instance,完成 attach 操做。下面是 cinder-api 的日誌文件 /opt/stack/logs/c-api.log 中記錄的相關信息
Attach 的具體工做主要由 nova-compute 完成,也將在後面詳細討論。
cinder-api 分兩步完成 attach 操做,因此對應地會前後向 RabbitMQ 發送了兩條消息:
初始化 volume 的鏈接
cinder-api 沒有打印發送消息的日誌,只能經過源代碼查看 /opt/stack/cinder/cinder/volume/api.py,方法爲 initialize_connection
Attach volume
cinder-api 沒有打印發送消息的日誌,只能經過源代碼查看
下一節咱們討論 cinder-volume 和 nova-compute 如何實現 attach 操做。