OSS是阿里雲提供的一個海量、安全、低成本、高可靠的儲存空間,適合儲存非結構化資料(如圖片、音視頻等)。本文介紹如何為ECI執行個體掛載OSS資料卷。
注意事項
OSS按照使用量進行計費,支援隨用隨付、資源套件和SCU等付費方式。更多資訊,請參見OSS計費概述。
OSS為共用儲存,一個OSS可以掛載到多個執行個體上。
掛載目錄中建議存放的檔案數不要超過1000個。
檔案數量過多時,OSS用戶端會佔用大量記憶體,可能會導致執行個體發生OOM(Out Of Memory)事件。
準備工作
建立OSS Bucket。
選擇授權方式。
使用RAM角色授權。
請建立RAM角色並為該角色授權。具體操作,請參見建立RAM角色和為RAM角色授權。
建立時,可信實體類型為阿里雲服務,角色類型為普通服務角色,受信服務為雲端服務器;為角色授權時,請選擇AliyunOSSFullAccess權限原則。
(不推薦)使用AccessKey直接授權。
請擷取AccessKey ID和AccessKey Secret。具體操作,請參見擷取AccessKey。
配置說明(OpenAPI)
調用CreateContainerGroup介面建立ECI執行個體時,您可以通過Volume相關參數聲明資料卷,然後通過Container.VolumeMount相關參數為容器掛載資料卷。相關參數說明如下,更多資訊,請參見CreateContainerGroup。
聲明資料卷
通過Volume相關參數聲明資料卷時,需要先明確Volume的名稱和類型。再根據Volume.N.Type的取值,進一步配置該類型資料卷的相關參數。
名稱 | 類型 | 樣本值 | 描述 |
Volume.N.Name | String | oss-demo | 資料卷名稱。 |
Volume.N.Type | String | FlexVolume | 取值為FlexVolume,表示建立一個通過FlexVolume外掛程式掛載的資料卷。 |
Volume.N.FlexVolume.Driver | String | alicloud/oss | 使用FlexVolume外掛程式掛載資料卷時的驅動類型。取值為 |
Volume.N.FlexVolume.Options | String | {"bucket":"test-***","url":"oss-cn-hangzhou.aliyuncs.com","ramRole":"ram-***"} | FlexVolume對象選項列表。為索引值對形式,採用JSON傳遞。 通過FlexVolume掛載OSS時,Options表示OSS資料卷的配置參數,可配置的參數如下:
|
掛載資料卷
聲明資料卷後,可以通過VolumeMount相關參數將資料卷掛載到容器中。
名稱 | 類型 | 樣本值 | 描述 |
Container.N.VolumeMount.N.Name | String | test-volume | 要掛載到容器的資料卷的名稱,對應Volume.N.Name的值。 |
Container.N.VolumeMount.N.MountPath | String | /usr/share | 掛載目錄。 容器掛載目錄下的內容會被資料卷的內容直接覆蓋,請準確填寫。 |
Container.N.VolumeMount.N.SubPath | String | /usr/sub | 資料卷下的子目錄。方便執行個體將同一個資料卷下的不同目錄掛載到容器的不同目錄。 |
Container.N.VolumeMount.N.ReadOnly | Boolean | false | 掛載目錄是否唯讀。預設為false。 |
Container.N.VolumeMount.N.MountPropagation | String | None | 資料卷的掛載傳播設定。掛載傳播允許將容器掛載的卷共用到同一ECI執行個體中的其他容器,甚至可以共用到同一宿主機上的其他ECI執行個體。取值範圍:
預設值:None。 |
Init容器也支援掛載資料卷,參數與上表類似,只需要將Container改為InitContainer。
配置說明(控制台)
通過Elastic Container Instance售賣頁建立ECI執行個體時,您可以在容器組配置地區聲明資料卷,然後在容器配置地區,將資料卷掛載到容器中。
聲明資料卷
在容器組配置地區,展開進階配置。
在儲存處選擇OSS持久化儲存頁簽,單擊添加。
配置OSS資料卷的相關參數。
名稱:OSS資料卷的名稱。
Bucket:OSS Bucket名稱。
RAM角色:具備OSS許可權的RAM角色。
掛載資料卷
在容器配置地區選取項目容器,展開該容器的進階配置。
開啟儲存開關後單擊添加。
此處可添加的資料卷為配置容器組時聲明的資料卷。
如果要為多個容器掛載資料卷,請選擇其他容器,重複上述操作。
配置樣本
建立一台ECI執行個體A,並為其掛載OSS資料卷。
調用CreateContainerGroup介面建立執行個體A所採用的參數樣本如下,更多資訊,請參見CreateContainerGroup。
ContainerGroupName=test-oss-a #聲明資料卷 Volume.1.Name=oss-demo Volume.1.Type=FlexVolume Volume.1.FlexVolume.Driver=alicloud/oss Volume.1.FlexVolume.Options={"bucket":"test-***","url":"oss-cn-hangzhou-internal.aliyuncs.com","ramRole":"ram-***"} #為容器掛載資料卷 Container.1.Name=nginx Container.1.Image=registry-vpc.cn-hangzhou.aliyuncs.com/eci_open/nginx:1.14.2 Container.1.VolumeMount.1.Name=oss-demo Container.1.VolumeMount.1.MountPath=/data-a
串連執行個體A,在掛載目錄下新增一個檔案。
關於如何串連ECI執行個體,請參見串連ECI執行個體。
刪除執行個體A。
建立一台ECI執行個體B,並為其掛載同一個OSS資料卷。
ContainerGroupName=test-oss-b #聲明資料卷 Volume.1.Name=oss-demo Volume.1.Type=FlexVolume Volume.1.FlexVolume.Driver=alicloud/oss Volume.1.FlexVolume.Options={"bucket":"test-***","url":"oss-cn-hangzhou-internal.aliyuncs.com","ramRole":"ram-***"} #為容器掛載資料卷 Container.1.Name=nginx Container.1.Image=registry-vpc.cn-hangzhou.aliyuncs.com/eci_open/nginx:1.14.2 Container.1.VolumeMount.1.Name=oss-demo Container.1.VolumeMount.1.MountPath=/data-b
串連執行個體B,確認掛載目錄下的檔案。
由於執行個體A與執行個體B掛載了同一個OSS資料卷,且OSS資料卷是持久化儲存,因此刪除執行個體A後,仍可以通過執行個體B,擷取OSS中通過執行個體A新增的檔案。