對于每一個應用來說都有存儲資料的需求,阿裡雲ecs針對不同的使用者需求提供了三種類型的資料雲盤,普通雲盤,高效雲盤和ssd雲盤。通過ecs控制台可以為每個執行個體建立最多4塊空資料盤或者根據已有資料盤的snapshot産生4塊含有資料的雲盤。但是根據上面的方式産生的資料雲盤,不能直接使用,需使用者登入ecs執行個體手動配置。對于空資料盤,使用者登入ecs的執行個體手動分區,格式化,挂載;對于通過snapshot産生的資料盤,使用者必須自己手動mount。這對于使用者部署使用多台ecs執行個體,是一個繁重的體力活而且容易出錯。
建立資料盤有兩種方式:
作為ecs執行個體的屬性
<a href="https://ros.console.aliyun.com/#/resourcetype/detail/aliyun::ecs::instance/metadata">diskmappings</a>
diskmappings是一個清單類型的屬性,清單的每一個項就代表一個資料盤的定義,使用者可以指定資料盤名稱,大小,類型,以及源snapshotid。
作為stack的資源,再把disk資源關聯到對應的ecs
<a href="https://ros.console.aliyun.com/#/resourcetype/detail/aliyun::ecs::disk/metadata">aliyun::ecs::disk</a>
在模版指定這樣的資源就說明需要建立一塊資料盤,使用者指定資料盤名稱,大小,域,源snapshotid等等
<a href="https://ros.console.aliyun.com/#/resourcetype/detail/aliyun::ecs::diskattachment/metadata">aliyun::ecs::diskattachment</a>
指定哪一塊資料盤要和關聯到哪一個ecs執行個體。必須指定的屬性包括aliyun::ecs::disk的id和ecs執行個體的id
不管是上面那種方式建立帶有源資料的雲盤,源資料盤snapshot必須和将要建立的資料盤在同一個域。
ros給使用者提供了userdata機制,這樣使用者就可以在建立ecs的時候,通過指定userdata腳本給ecs在第一次啟動的時候做一些配置和初始化的工作。使用者可以根據自己的需要自由的編寫userdata腳本。下面我将提供兩個簡單的例子說明到底如何利用ros和userdata機制實作一鍵建立資料盤并自動分區,格式化和mount。
這個例子是根據源資料的snapshot建立資料盤,其它的都和上面的例子類似。這時候新的ecs執行個體的資料盤是已經分好區和格式化過的,我們隻需要挂載資料盤到合适的挂載點就行。通過totaldatadisk說明有多少塊資料盤,mountpoint指定資料盤的挂載點,使用ros的waitcondition資源來得到userdata腳本的執行結果。下面是最終模版:
我們注意到以上兩個例子都是使用diskmappings屬性,而不是使用ros棧資源的方式建立資料盤,這是因為diskmappings是ecs資源的屬性,是以在建立啟動ecs的時候,資料盤已經建立好了,并且和ecs執行個體做了關聯。那麼執行userdata就能完成分區,格式化和挂載。但是如果以ros stack資源的方式建立資料盤,首先是建立ecs資源和disk資源,最後才關聯disk和ecs執行個體。那麼當ecs執行個體啟動的時候,資料盤還沒有真正關聯到相應的ecs,是以這種情況下執行userdata腳本就會找不到資料盤,分區,格式化,挂載也就無從談起。如果大家要使用資料盤并想通過userdata自動挂載資料盤,則建議使用diskmappings這中方式建立資料盤。