为ECI实例挂载OSS数据卷

OSS是阿里云提供的一个海量、安全、低成本、高可靠的存储空间,适合存储非结构化数据(如图片、音视频等)。本文介绍如何为ECI实例挂载OSS数据卷。

注意事项

  • OSS按照使用量进行计费,支持按量付费、资源包和SCU等付费方式。更多信息,请参见OSS计费概述

  • OSS为共享存储,一个OSS可以挂载到多个实例上。

  • 挂载目录中建议存放的文件数不要超过1000个。

    文件数量过多时,OSS客户端会占用大量内存,可能会导致实例发生OOM(Out Of Memory)事件。

准备工作

  1. 创建OSS Bucket。

    1. 登录OSS管理控制台

    2. 创建OSS Bucket。

      关于如何创建OSS Bucket,请参见创建存储空间

  2. 选择授权方式。

    • 使用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插件挂载数据卷时的驱动类型。取值为alicloud/oss时,表示挂载阿里云对象存储OSS。

Volume.N.FlexVolume.Options

String

{"bucket":"test-***","url":"oss-cn-hangzhou.aliyuncs.com","ramRole":"ram-***"}

FlexVolume对象选项列表。为键值对形式,采用JSON传递。

通过FlexVolume挂载OSS时,Options表示OSS数据卷的配置参数,可配置的参数如下:

  • bucket:OSS Bucket的名称。

  • url:OSS Bucket的访问域名(Endpoint)。可以登录OSS管理控制台,在目标Bucket的概览页面获取。更多信息,请参见访问域名和数据中心

  • path:挂载时相对Bucket根文件的目录结构,默认为/

  • otherOpts:挂载OSS时支持输入定制化参数,格式为-o *** -o ***,例如-o max_stat_cache_size=0 -o allow_other

  • akId:使用AccessKey直接授权时,对应的AccessKey ID。

  • akSecret:使用AccessKey直接授权时,对应的和AccessKey Secret。

  • ramRole:使用RAM角色授权时,对应的RAM角色名称。

挂载数据卷

声明数据卷后,可以通过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:该卷不感知任何后续在此卷或其子目录上执行的挂载操作。

  • HostToContainer:该卷将会感知到后续在此卷或其子目录上的挂载操作。

  • Bidirectional:和HostToContainer类似,能感知挂载操作。另外,该卷将被传播回宿主机和使用同一卷的所有ECI实例的所有容器。

默认值:None。

说明

Init容器也支持挂载数据卷,参数与上表类似,只需要将Container改为InitContainer。

配置说明(控制台)

通过弹性容器实例售卖页创建ECI实例时,您可以在容器组配置区域声明数据卷,然后在容器配置区域,将数据卷挂载到容器中。

声明数据卷

  1. 容器组配置区域,展开高级配置

  2. 存储处选择OSS持久化存储页签,单击添加

  3. 配置OSS数据卷的相关参数。

    • 名称:OSS数据卷的名称。

    • Bucket:OSS Bucket名称。

    • RAM角色:具备OSS权限的RAM角色。

    oss

挂载数据卷

  1. 容器配置区域选择容器,展开该容器的高级配置。

  2. 打开存储开关后单击添加。

    此处可添加的数据卷为配置容器组时声明的数据卷。

    oss2

说明

如果要为多个容器挂载数据卷,请选择其他容器,重复上述操作。

配置示例

  1. 创建一台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
  2. 连接实例A,在挂载目录下新增一个文件。

    关于如何连接ECI实例,请参见连接ECI实例

    oss3

  3. 删除实例A。

  4. 创建一台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
  5. 连接实例B,确认挂载目录下的文件。

    由于实例A与实例B挂载了同一个OSS数据卷,且OSS数据卷是持久化存储,因此删除实例A后,仍可以通过实例B,获取OSS中通过实例A新增的文件。

    oss4