使用nova api批量創建虛擬機,並獲取本次批量創建的虛擬機列表

前言

之所以寫這篇文章,是因爲通常使用的批量創建虛擬機的方式,可以創建成功,但是無法獲取到本次批量創建的虛擬機列表。現找到了一種方法可以獲取,在此分享一下。

常用的批量創建虛擬機方法

1、在 horizon 上創建
使用horizon頁面創建時,可以直接填寫要創建的數量。創建後,在虛擬機列表出能看見正在創建的虛擬機(狀態)。
截圖-創建虛擬機.png

2、使用 nova boot 命令行
用 nova boot 命令行創建時,帶上 --max-count 和 --min-count 參數,指定創建的最大數量和最小數量,可以實現批量創建。

3、使用 nova api
nova api批量創建虛擬機的 url 爲 /servers,參數中指定 max_count 和 min_count ,即批量創建的最大數量和最小數量,可以實現批量創建。

三種方法只是使用的 client 不同,最終都會調用nova api。方法1和2最終也會使用方法3(即nova api)的形式創建。

先補充說明一下方法2和方法3中的參數 --max-count(max_count)和 --min-count(min_count)。兩個參數的解釋是允許創建的最大數量和最小數量。起初以爲是在 nova scheduler 調度時,儘量按照 max_count 創建,如果資源不夠再取 min_count,如果還不夠則返回失敗。跟蹤了代碼以後,才發現這兩個參數並不影響 scheduler 調度,而是在 nova api 中生效。nova api 中檢查項目的quota,如果項目的 quota 足夠大,就取 max_count,否則嘗試取 min_count,如果 quota 連 min_count 也容納不下,則失敗。將最終選取的 max_count 或者 min_count 作爲新的參數 num_instances 往下傳遞。一般情況下我們的 openstack project 有一套默認的規格,例如允許的總vcpu數、總內存數,管理員可以進行修改。 所以這兩個參數是在 nova api 中根據項目的 quota 來進行校驗,轉換成新的參數 num_instances 往下傳遞,並不暴露給 nova scheduler 。

如何獲取本次批量創建的虛擬機列表

1、horizon 上創建後,並不需要直接獲取到本次新創建的虛擬機。界面會跳轉到虛擬機列表,只要觸發刷新一遍虛擬機列表,就能列出正在創建的新虛擬機;
2、直接使用 nova api 進行批量創建,api 只返回成功創建的第一臺虛擬機的信息,而不是所有虛擬機的信息。 這並不是我們想要的結果;
3、使用 nova boot 命令行的方式進行批量創建,結果和使用 nova api 的方式返回的結果一樣, 只返回第一臺虛擬機的信息

在 openstack 社區找到了關於批量創建虛擬機後如何獲取創建虛擬機列表的討論,社區已經知道這個不足,但是目前 v2 api 確實只能返回一臺虛擬機的信息,無法返回所有。在 v3 api 中會返回所有虛擬機的信息。所以解決辦法之一是把 compute api 由 v2 切換到 v3 。這種方式對於我來說改動稍顯大,於是繼續尋找其他的方案。

批量創建虛擬機的 nova api 中有一個參數是 return_reservation_id , 設置爲 true 的話 api 返回的是 reservation_id 。

Set "return_reservation_id": "True" in the request body to request that a reservation ID be returned instead of the newly created instance information. With this parameter, the response shows only the reservation ID.

但是官方文檔中沒有說明 reservation_id 的用途。
使用 nova help list 查看幫助時,也能看到有 --reservation-id 參數,作用是查看虛擬機列表時,根據 --reservation-id 查找,但是幫助和代碼中依然沒有明確說明 reservation-id 的作用。

Optional arguments:
--reservation-id <reservation-id> Only return servers that match reservation-id.

在 openstack 數據庫 instances 表中,能看到每個虛擬機都會對應一個 reservation-id。至此大概明白了 reservation-id 所能提供的作用。 批量創建後,可以根據 reservation-id 來查詢。在使用 nova api 批量創建時,參數 return_reservation_id 設置爲 true, api 會返回這批虛擬機的 reservation-id,然後調用查詢虛擬機的 api 根據 reservation-id 查詢就可以得到這批虛擬機的信息了。

知識點總結

1、批量創建的常用方式以及獲取到本次創建結果:
截圖-三種批量創建虛擬機的方式.png

2、批量創建虛擬機後,獲取本次創建的所有虛擬機列表的方式:
截圖-獲取本次創建的虛擬機信息.png

3、max_count 和 min_count 參數在 nova api 中和項目的 quota 進行校驗,決定允許創建的臺數。並不在 scheduler 調度時校驗。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章