NAS是阿里云提供的一种可共享访问、弹性扩展、高可靠以及高性能的分布式文件系统。本文介绍如何为ECI实例挂载NAS数据卷。
注意事项
NAS按照使用量进行计费,支持按量付费、资源包和SCU付费方式。更多信息,请参见NAS计费概述。
NAS文件系统必须和实例处于同一VPC内。
NAS为共享存储,一个NAS可以挂载到多个实例上。此时,如果多个实例同时修改相同数据,需要应用自行执行数据同步。
在卸载NAS前,请勿删除NAS挂载点,否则可能会造成操作系统无响应。
准备工作
配置说明(OpenAPI)
调用CreateContainerGroup接口创建ECI实例时,您可以通过Volume相关参数声明数据卷,然后通过Container.VolumeMount相关参数为容器挂载数据卷。相关参数说明如下,更多信息,请参见CreateContainerGroup。
声明数据卷
通过Volume相关参数声明数据卷时,需要先明确Volume的名称和类型。再根据Volume.N.Type的取值,进一步配置该类型数据卷的相关参数。
声明NAS数据卷时,支持以下两种方式:
挂载NFS类型的数据卷
名称
类型
示例值
描述
Volume.N.Name
String
nas-demo
数据卷名称。
Volume.N.Type
String
NFSVolume
取值为NFSVolume,表示创建一个NFS类型的数据卷。
Volume.N.NFSVolume.Server
String
3f9cd4****-na***.cn-shanghai.nas.aliyuncs.com
NFS服务器地址。
如果使用阿里云文件存储NAS,则此处为NAS文件系统的挂载点地址。
Volume.N.NFSVolume.Path
String
/share
NFS数据卷路径。
Volume.N.NFSVolume.ReadOnly
Boolean
false
NFS数据卷的读取权限。取值范围:
true:只读
false:可读可写
默认为false。
通过FlexVolume插件挂载数据卷
名称
类型
示例值
描述
Volume.N.Name
String
nas-demo
数据卷名称。
Volume.N.Type
String
FlexVolume
取值为FlexVolume,表示通过FlexVolume插件挂载数据卷。
Volume.N.FlexVolume.Driver
String
alicloud/nas
使用FlexVolume插件挂载数据卷时的驱动类型。取值为
alicloud/nas
时,表示挂载阿里云文件存储NAS。Volume.N.FlexVolume.Options
String
{"server":"3f9cd4****-na***.cn-shanghai.nas.aliyuncs.com","path": "/share","vers":"3","options":"nolock,tcp,noresvport"}
FlexVolume对象选项列表。为KV形式,采用JSON传递。
通过FlexVolume挂载NAS时,Options表示NAS数据卷的配置参数,可配置的参数如下:
server:NAS的挂载点地址。
path:NAS路径下的子目录,以
/
开头。请填写NAS中已存在的子目录。如果NAS根目录下没有此子目录,会在创建后再挂载。
极速型NAS的子目录需要以
/share
开头。可以不填此项,默认挂载到NAS根目录。
vers:挂载NAS的NFS协议版本号。推荐使用v3,极速型NAS仅支持v3。
options:挂载NAS时定制化参数,格式为"xxx,xxx,xxx",例如
nolock,tcp,noresvport
。
挂载数据卷
声明数据卷后,可以通过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实例时,您可以在容器组配置区域声明数据卷,然后在容器配置区域,将数据卷挂载到容器中。
声明数据卷
在容器组配置区域,展开高级配置。
在存储处选择NAS持久化存储页签,单击添加。
配置NAS数据卷的相关参数。
名称:NAS数据卷的名称。
挂载点:NAS文件系统的挂载点。
Path:NAS文件系统中要挂载的路径。
只读:数据读取权限。默认可读可写,可按需选中只读。
挂载数据卷
在容器配置区域选择容器,展开该容器的高级配置。
打开存储开关后单击添加。
此处可添加的数据卷为配置容器组时声明的数据卷。
如果要为多个容器挂载数据卷,请选择其他容器,重复上述操作。
配置示例
创建一台ECI实例A,并为其挂载NAS数据卷。
调用CreateContainerGroup接口创建实例A所采用的参数示例如下,更多信息,请参见CreateContainerGroup。
ContainerGroupName=test-nas-a SecurityGroupId=sg-bp1daxpbz9lzpvvc**** VSwitchId=vsw-bp1gds63lmlm7ib05**** #声明数据卷 Volume.1.Name=nas-demo Volume.1.Type=NFSVolume Volume.1.NFSVolume.Server=3f9cd4****-na***.cn-shanghai.nas.aliyuncs.com Volume.1.NFSVolume.Path=/share #为容器挂载数据卷 Container.1.Name=nginx Container.1.Image=registry-vpc.cn-hangzhou.aliyuncs.com/eci_open/nginx:1.14.2 Container.1.VolumeMount.1.Name=nas-demo Container.1.VolumeMount.1.MountPath=/data-a
连接实例A,在挂载目录下新增一个文件。
关于如何连接ECI实例,请参见连接ECI实例。
删除实例A。
创建一台ECI实例B,并为其挂载同一个NAS数据卷。
ContainerGroupName=test-nas-b SecurityGroupId=sg-bp1daxpbz9lzpvvc**** VSwitchId=vsw-bp1gds63lmlm7ib05**** #声明数据卷 Volume.1.Name=nas-demo Volume.1.Type=FlexVolume Volume.1.FlexVolume.Driver=alicloud/nas Volume.1.FlexVolume.Options={"server":"3f9cd4****-na***.cn-shanghai.nas.aliyuncs.com","path": "/share"} #为容器挂载数据卷 Container.1.Name=nginx Container.1.Image=registry-vpc.cn-hangzhou.aliyuncs.com/eci_open/nginx:1.14.2 Container.1.VolumeMount.1.Name=nas-demo Container.1.VolumeMount.1.MountPath=/data-b
连接实例B,确认挂载目录下的文件。
由于实例A与实例B挂载了同一个NAS数据卷,且NAS数据卷是持久化存储,因此删除实例A后,仍可以通过实例B,获取NAS中通过实例A新增的文件。