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角色。
挂载数据卷
在容器配置区域选择容器,展开该容器的高级配置。
打开存储开关后单击添加。
此处可添加的数据卷为配置容器组时声明的数据卷。
如果要为多个容器挂载数据卷,请选择其他容器,重复上述操作。
配置示例
创建一台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新增的文件。