Skip to main content

CloudStack 無法新增模板和iso

做了N久的CloudStack二次開發,最近越來越多的人開始使用CloudStack。

通常會遇到添加模板和iso不成功的問題。

表現為註冊了template/iso之後,"已就緒" "狀態" "大小" 等選項都為空,或者提示no route to host等現象

CloudStack是通過SSVM進行template/iso上傳和下載,所以基本可以判定為SSVM網絡有問題

這樣就可以做以下檢查:

1、內建模板不存在("已就緒" "狀態" "大小" 等選項都為空多發生在這種情況):

  CS默認有2種模板,系統虛擬機模板[SystemVM Template (XenServer)]和內建模板[ CentOS 5.6(64-bit) no GUI (XenServer)]

  在ssvm正常啟動之後,會連接management-server 的8250端口,成功連接後,UI上就可以看到以上兩個模板。

  如果此時沒有內建模板的信息,則說明ssvm沒能正常連接management-server。

  這種情況多會發生在全局配置錯誤。相關項為:management.network.cidr,host,secstorage.allowed.internal.cidr

  <1> 如果management-server存在多個網卡,默認cloudstack會選擇route中為default的那個網卡設置management.network.cidr和host,如果該項並非用來連接host和ssvm private ip的網絡,則需要修改為正確網絡,ssvm啟動後,會根據這兩個值來配置路由表,如果錯誤則無法連接到management-server。

         解決方案:這種情況需要修改全局配置後,重啟management-server,然後破壞掉ssvm,等待系統重建

   <2>secstorage.allowed.internal.cidr 設置為0.0.0.0/0

         經常會發生在網絡情況比較單一的環境,比如基本模式或者高級模式但是public ip和private ip在同一網段中,會導致SSVM路由表錯誤,正常SSVM路由default 網卡為eth2,即public,此時會變為eth1,即private,由於其防火牆限制,導致無法上傳或下載模板

解決方案:這種情況需要修改全局配置,將secstorage.allowed.internal.cidr設為正確值,如果有多個cidr可以用逗號分隔,重啟management-server,然後重啟ssvm

2、內建模板已存在

   內建模板已經顯示在UI上,說明SSVM已經成功連接到management-server。

   至於內建模板,我這裡下載基本上不會成功,原因大體就是因為網速太慢,半天下一點,斷了重新下。可以嘗試在db中修改url從本地下載。

   <1> no route to host

        這種情況多發生在SSVM的public和private在同一網段的情況下,很多人的測試環境受實際因素影響,並不能隔離public和private,而是都使用同一網段。並且上傳template/iso所用的http server也在同一網段。

CS默認會通過public ip進行下載,如果http server和private ip處於同一網段的時候,則會嘗試使用private ip進行下載。由於很多新人剛剛使用CS的時候,並不知道還有secstorage.allowed.internal.cidr 這樣的全局配置,所以並未進行相關設置,這樣就會導致private ip被防火牆阻攔而無法進行下載

解決方案:將private ip所在網段的cidr寫入secstorage.allowed.internal.cidr ,並重啟ms,重啟SSVM

   <2> 有人發現有此選項,但為求省事,設置secstorage.allowed.internal.cidr 為0.0.0.0/0

此項設置並不符合CS的設計,不過大部分環境中可以正常使用,所以也少有人會注意到全局設置中的不能設置為0.0.0.0的提示。

       如1.2中所描述的環境,則很有可能會出現路由表錯誤而無法正常使用的問題。

   <3> 下載一半後中斷,無法繼續下載。

此種情況見過多次,但是自己的環境中並未重現。

跟踪代碼發現下載流的size不能滿足默認大小,可以試著嘗試修改SSVM的service_offering,增加SSVM的內存。這個僅為猜測,有待將來重現後再進行跟踪調試