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。
配置说明(控制台)
通过弹性容器实例售卖页创建ECI实例时,您可以在容器组配置区域声明数据卷,然后在容器配置区域,将数据卷挂载到容器中。
声明数据卷
-
在容器组配置区域,展开高级配置。
-
在存储处选择OSS持久化存储页签,单击添加。
-
配置OSS数据卷的相关参数。
-
名称:OSS数据卷的名称。
-
Bucket:OSS Bucket名称。
-
RAM角色:具备OSS权限的RAM角色。
-
挂载数据卷
-
在容器配置区域选择容器,展开该容器的高级配置。
-
打开存储开关后单击添加。
此处可添加的数据卷为配置容器组时声明的数据卷。
在存储配置行中,设置 选择存储 为已声明的数据卷(如
oss-demo),选择存储类型(如 OSS持久化存储),填写 容器内挂载路径(如/data),按需填写 子目录(如test),并根据需要勾选 只读。
如果要为多个容器挂载数据卷,请选择其他容器,重复上述操作。
配置示例
-
创建一台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实例,请参见通过Workbench连接ECI实例。
root@test-oss-a:/# cd data-a root@test-oss-a:/data-a# ls root@test-oss-a:/data-a# echo "hello" >test root@test-oss-a:/data-a# ls test root@test-oss-a:/data-a# cat test hello -
删除实例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新增的文件。
root@test-oss-b:/# cd data-b root@test-oss-b:/data-b# ls test root@test-oss-b:/data-b# cat test hello