為ECI實例掛載OSS數(shù)據(jù)卷
OSS是阿里云提供的一個海量、安全、低成本、高可靠的存儲空間,適合存儲非結(jié)構(gòu)化數(shù)據(jù)(如圖片、音視頻等)。本文介紹如何為ECI實例掛載OSS數(shù)據(jù)卷。
注意事項
OSS按照使用量進(jìn)行計費(fèi),支持按量付費(fèi)、資源包和SCU等付費(fèi)方式。更多信息,請參見OSS計費(fèi)概述。
OSS為共享存儲,一個OSS可以掛載到多個實例上。
掛載目錄中建議存放的文件數(shù)不要超過1000個。
文件數(shù)量過多時,OSS客戶端會占用大量內(nèi)存,可能會導(dǎo)致實例發(fā)生OOM(Out Of Memory)事件。
準(zhǔn)備工作
創(chuàng)建OSS Bucket。
登錄OSS管理控制臺。
創(chuàng)建OSS Bucket。
關(guān)于如何創(chuàng)建OSS Bucket,請參見創(chuàng)建存儲空間。
選擇授權(quán)方式。
使用RAM角色授權(quán)。
請創(chuàng)建RAM角色并為該角色授權(quán)。具體操作,請參見創(chuàng)建RAM角色和為RAM角色授權(quán)。
創(chuàng)建時,可信實體類型為阿里云服務(wù),角色類型為普通服務(wù)角色,受信服務(wù)為云服務(wù)器;為角色授權(quán)時,請選擇AliyunOSSFullAccess權(quán)限策略。
(不推薦)使用AccessKey直接授權(quán)。
請獲取AccessKey ID和AccessKey Secret。具體操作,請參見獲取AccessKey。
配置說明(OpenAPI)
調(diào)用CreateContainerGroup接口創(chuàng)建ECI實例時,您可以通過Volume相關(guān)參數(shù)聲明數(shù)據(jù)卷,然后通過Container.VolumeMount相關(guān)參數(shù)為容器掛載數(shù)據(jù)卷。相關(guān)參數(shù)說明如下,更多信息,請參見CreateContainerGroup。
聲明數(shù)據(jù)卷
通過Volume相關(guān)參數(shù)聲明數(shù)據(jù)卷時,需要先明確Volume的名稱和類型。再根據(jù)Volume.N.Type的取值,進(jìn)一步配置該類型數(shù)據(jù)卷的相關(guān)參數(shù)。
名稱 | 類型 | 示例值 | 描述 |
Volume.N.Name | String | oss-demo | 數(shù)據(jù)卷名稱。 |
Volume.N.Type | String | FlexVolume | 取值為FlexVolume,表示創(chuàng)建一個通過FlexVolume插件掛載的數(shù)據(jù)卷。 |
Volume.N.FlexVolume.Driver | String | alicloud/oss | 使用FlexVolume插件掛載數(shù)據(jù)卷時的驅(qū)動類型。取值為 |
Volume.N.FlexVolume.Options | String | {"bucket":"test-***","url":"oss-cn-hangzhou.aliyuncs.com","ramRole":"ram-***"} | FlexVolume對象選項列表。為鍵值對形式,采用JSON傳遞。 通過FlexVolume掛載OSS時,Options表示OSS數(shù)據(jù)卷的配置參數(shù),可配置的參數(shù)如下:
|
掛載數(shù)據(jù)卷
聲明數(shù)據(jù)卷后,可以通過VolumeMount相關(guān)參數(shù)將數(shù)據(jù)卷掛載到容器中。
名稱 | 類型 | 示例值 | 描述 |
Container.N.VolumeMount.N.Name | String | test-volume | 要掛載到容器的數(shù)據(jù)卷的名稱,對應(yīng)Volume.N.Name的值。 |
Container.N.VolumeMount.N.MountPath | String | /usr/share | 掛載目錄。 容器掛載目錄下的內(nèi)容會被數(shù)據(jù)卷的內(nèi)容直接覆蓋,請準(zhǔn)確填寫。 |
Container.N.VolumeMount.N.SubPath | String | /usr/sub | 數(shù)據(jù)卷下的子目錄。方便實例將同一個數(shù)據(jù)卷下的不同目錄掛載到容器的不同目錄。 |
Container.N.VolumeMount.N.ReadOnly | Boolean | false | 掛載目錄是否只讀。默認(rèn)為false。 |
Container.N.VolumeMount.N.MountPropagation | String | None | 數(shù)據(jù)卷的掛載傳播設(shè)置。掛載傳播允許將容器掛載的卷共享到同一ECI實例中的其他容器,甚至可以共享到同一宿主機(jī)上的其他ECI實例。取值范圍:
默認(rèn)值:None。 |
Init容器也支持掛載數(shù)據(jù)卷,參數(shù)與上表類似,只需要將Container改為InitContainer。
配置說明(控制臺)
通過彈性容器實例售賣頁創(chuàng)建ECI實例時,您可以在容器組配置區(qū)域聲明數(shù)據(jù)卷,然后在容器配置區(qū)域,將數(shù)據(jù)卷掛載到容器中。
聲明數(shù)據(jù)卷
在容器組配置區(qū)域,展開高級配置。
在存儲處選擇OSS持久化存儲頁簽,單擊添加。
配置OSS數(shù)據(jù)卷的相關(guān)參數(shù)。
名稱:OSS數(shù)據(jù)卷的名稱。
Bucket:OSS Bucket名稱。
RAM角色:具備OSS權(quán)限的RAM角色。
掛載數(shù)據(jù)卷
在容器配置區(qū)域選擇容器,展開該容器的高級配置。
打開存儲開關(guān)后單擊添加。
此處可添加的數(shù)據(jù)卷為配置容器組時聲明的數(shù)據(jù)卷。
如果要為多個容器掛載數(shù)據(jù)卷,請選擇其他容器,重復(fù)上述操作。
配置示例
創(chuàng)建一臺ECI實例A,并為其掛載OSS數(shù)據(jù)卷。
調(diào)用CreateContainerGroup接口創(chuàng)建實例A所采用的參數(shù)示例如下,更多信息,請參見CreateContainerGroup。
ContainerGroupName=test-oss-a #聲明數(shù)據(jù)卷 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-***"} #為容器掛載數(shù)據(jù)卷 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,在掛載目錄下新增一個文件。
關(guān)于如何連接ECI實例,請參見連接ECI實例。
刪除實例A。
創(chuàng)建一臺ECI實例B,并為其掛載同一個OSS數(shù)據(jù)卷。
ContainerGroupName=test-oss-b #聲明數(shù)據(jù)卷 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-***"} #為容器掛載數(shù)據(jù)卷 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,確認(rèn)掛載目錄下的文件。
由于實例A與實例B掛載了同一個OSS數(shù)據(jù)卷,且OSS數(shù)據(jù)卷是持久化存儲,因此刪除實例A后,仍可以通過實例B,獲取OSS中通過實例A新增的文件。