天天看點

Attach Volume 操作(Part I) - 每天5分鐘玩轉 OpenStack(53) 向cinder-api發送attach請求 cinder-api 發送消息

Attach Volume 操作(Part I) - 每天5分鐘玩轉 OpenStack(53) 向cinder-api發送attach請求 cinder-api 發送消息

上一節我們建立了 volume,本節讨論如何将 volume attach 到 Instance,今天是第一部分。

Volume 的最主要用途是作為虛拟硬碟提供給 instance 使用。Volume 是通過 Attach 操作挂載到 instance 上的。本節我們就來詳細讨論 Cinder 是如何實作 Attach 的。

上一節我們成功建立了基于 LVM provider 的 volume。每個 volume 實際上是存儲節點上 VG 中的一個 LV。

那麼問題來了:存儲節點上本地的 LV 如何挂載到計算節點的 instance 上呢?通常情況存儲節點和計算節點是不同的實體節點。

解決方案是使用 iSCSI,如下圖所示

Attach Volume 操作(Part I) - 每天5分鐘玩轉 OpenStack(53) 向cinder-api發送attach請求 cinder-api 發送消息

iSCSI 是 Client-Server 架構,有 target 和 initiator 兩個術語。

Target

提供 iSCSI 存儲資源的裝置,簡單的說,就是 iSCSI 伺服器。

Initiator

使用 iSCSI 存儲資源的裝置,也就是 iSCSI 用戶端。

Initiator 需要與 target 建立 iSCSI 連接配接,執行 login 操作,然後就可以使用 target 上面的塊儲存設備了。

Target 提供的塊儲存設備支援多種實作方式,我們實驗環境中使用的是 LV。

Cinder 的存儲節點 cinder-volume 預設使用 tgt 軟體來管理和監控 iSCSI target,在計算節點 nova-compute 使用 iscsiadm 執行 initiator 相關操作。

下面來看看 Attach 操作的流程圖

Attach Volume 操作(Part I) - 每天5分鐘玩轉 OpenStack(53) 向cinder-api發送attach請求 cinder-api 發送消息

向 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 上的虛拟磁盤如下:

Attach Volume 操作(Part I) - 每天5分鐘玩轉 OpenStack(53) 向cinder-api發送attach請求 cinder-api 發送消息

進入 GUI 操作菜單 Project -> Compute -> Volumes

Attach Volume 操作(Part I) - 每天5分鐘玩轉 OpenStack(53) 向cinder-api發送attach請求 cinder-api 發送消息

選擇 volume “vol-1”,點選“Manage Attachments”

Attach Volume 操作(Part I) - 每天5分鐘玩轉 OpenStack(53) 向cinder-api發送attach請求 cinder-api 發送消息

在 “Attach to Instance”下拉清單中,選擇instance “c2”

Attach Volume 操作(Part I) - 每天5分鐘玩轉 OpenStack(53) 向cinder-api發送attach請求 cinder-api 發送消息

點選 ”Attach Volume”

Attach Volume 操作(Part I) - 每天5分鐘玩轉 OpenStack(53) 向cinder-api發送attach請求 cinder-api 發送消息

cinder-api 将接收到 attach volume 的請求,attach 請求實際上包含兩個步驟:

初始化 volume 的連接配接

Volume 建立後,隻是在 volume provider 中建立了相應存儲對象(比如 LV),這時計算節點是無法使用的。Cinder-volume 需要以某種方式将 volume export 出來,計算節點才能夠通路得到。這個 export 的過程就是“初始化 volume 的連接配接”。

下面是 cinder-api 的日志檔案 /opt/stack/logs/c-api.log 中記錄的相關資訊

Attach Volume 操作(Part I) - 每天5分鐘玩轉 OpenStack(53) 向cinder-api發送attach請求 cinder-api 發送消息

Initialize_connection 的具體工作主要由 cinder-volume 完成,将在後面詳細讨論。

Attach Volume 操作(Part I) - 每天5分鐘玩轉 OpenStack(53) 向cinder-api發送attach請求 cinder-api 發送消息

Attach volume

初始化 volume 連接配接後,計算節點将 volume 挂載到指定的 instance,完成 attach 操作。下面是 cinder-api 的日志檔案 /opt/stack/logs/c-api.log 中記錄的相關資訊

Attach Volume 操作(Part I) - 每天5分鐘玩轉 OpenStack(53) 向cinder-api發送attach請求 cinder-api 發送消息

Attach 的具體工作主要由 nova-compute 完成,也将在後面詳細讨論。

cinder-api 分兩步完成 attach 操作,是以對應地會先後向 RabbitMQ 發送了兩條消息:

cinder-api 沒有列印發送消息的日志,隻能通過源代碼檢視

/opt/stack/cinder/cinder/volume/api.py,方法為 initialize_connection

Attach Volume 操作(Part I) - 每天5分鐘玩轉 OpenStack(53) 向cinder-api發送attach請求 cinder-api 發送消息
Attach Volume 操作(Part I) - 每天5分鐘玩轉 OpenStack(53) 向cinder-api發送attach請求 cinder-api 發送消息

下一節我們讨論 cinder-volume 和 nova-compute 如何實作 attach 操作。

Attach Volume 操作(Part I) - 每天5分鐘玩轉 OpenStack(53) 向cinder-api發送attach請求 cinder-api 發送消息