標籤:
蜂巢之Iaas雲主機快速啟動的最佳化
??使用過Linux的,不使用案頭的技(無)術(限)大(裝)拿(X)的筒子們大概都有經驗,電腦的操作啟動時間是速度很快的,往往都是在幾秒層級完成。但是在同樣沒有案頭的雲主機啟動經常給我們的卻不是這樣一個感覺,特別是在第一次建立的過程中,總是發現啟動過程需要10s+的時間,於是就想,能不能也加速一把,享受秒層級的雲主機啟動的暢快體驗。
??PS:目前我們所使用的蜂巢容器是在虛擬機器內部進行啟動的,雲主機的啟動速度也是影響蜂巢容器快速啟動的一個重要部分。
1. 首先我們分析新建立雲主機的啟動過程
??在此只分析比較關鍵的一些步驟,和一些比較耗時的步驟。
- 首先要重新擴充根分區的分區表和適配相應的檔案系統。在建立鏡像的時候我們採用2G大小的鏡像,但是在最終建立雲主機的時候使用不同的規格,故需要把跟分區擴充為目標規格的大小,然後使用resize2fs來擴充跟檔案系統。
- 初始化網路相關的步驟,包括網路裝置的IP,路由等相關部分。
- 雲主機的初始化相關工作,在此我們使用的是cloud-init來進行相關的初始化工作,這部分涉及到比較多的工作:
- 擷取雲主機的meta資料,
- 根據meta資料判斷雲主機的生命週期並設定hostname
- 產生hostkey,注入相關的登入key,
- 啟動相關的服務如openssh-server,內部的agent上線表示準備好為容器的初始化服務。
到此為止,雲主機的啟動基本完成,Paas的服務接過接力棒並開始進行進一步的
??下面我們貼出的是原始的雲主機啟動的時間圖表
2. 接下來看看我們的手段
??在圖中我們可以看出,雲主機啟動花費了超過10s加的時間。具體的時間時間分析參照圖片。我們把分析結果和最佳化辦法再此處說明。
- 1, cloud-init資料來源使用169.254【ec2】的資料來源比較慢,切換為configdrive。
- 2, cloud-init把多個階段的任務放在一個階段中,每個階段的任務運行都會消耗比較久的時間。
- 3, 切換網路由DHCP擷取ip和路由換為由靜態IP注入擷取。
- 4, 把啟動所需要的mod均在核心中編譯,去除initrd部分,並且在做鏡像的時候直接把系統硬碟做到目標大小(目標預設系統硬碟20G,其他資料全部放在雲硬碟中)
其中除了第4條,其他部分我們已經發布上線,目前我們的線上雲主機啟動時間是4.5s左右,如果加上第4條,就超額完成了我們的目標—-不超過5秒的內部啟動時間。
ps:具體的實現過程,如有問題或者好的建議請聯絡[email protected]
3. 最後看看我們的成果
??從可以看到我們的記過,是不是很誘人,我們已經從最開始的10s+的啟動時間減少到現在的4秒多。上面的第4條再次處並沒有使用。
蜂巢之Iaas雲主機快速啟動的最佳化