阿里云文件存储(File Storage NAS,后面简称 NAS)是面向阿里云 ECS 实例、HPC 和 Docker 等计算节点的文件存储服务,提供标准的文件访问协议,用户无需对现有应用做任何修改,即可使用具备无限容量及性能扩展、单一命名空间、多共享、高可靠和高可用等特性的分布式文件系统。 目前,批量计算的用户也可以在API和SDK中通过配置用户NAS相关信息使用阿里云NAS服务。
1. 相关概念
从安全、性能以及便捷性来考虑,目前批量计算仅支持在专有网络中使用阿里云NAS,以下是专有网络和阿里云NAS的一些基本概念:
专有网络 (VPC):专有网络VPC(Virtual Private Cloud)是用户基于阿里云创建的自定义私有网络, 不同的专有网络之间二层逻辑隔离,用户可以在自己创建的专有网络内创建和管理云产品实例,比如ECS、负载均衡、RDS、NAS等。
文件系统(FileSystem):文件系统是用户购买NAS的基本单元,存储容量,价格,Quota限制,挂载点均与文件系统绑定,了解如何创建文件系统。
挂载点(MountEntry):挂载点是文件系统实例在专有网络或经典网络内的一个访问目标地址,每个挂载点都对应一个域名,用户 mount 时通过指定挂载点的域名来挂载对应的 NAS 文件系统到本地。了解如何创建挂载点,由于批量计算只支持在专有网络中使用NAS,创建挂载点时需要指定挂载点类型为专有网络。
以上是用户在批量计算中使用NAS过程中最重要的三个概念,如果需要了解购买和使用NAS、VPC其他相关内容,请参考:NAS官方文档、专有网络官方文档。
2. 使用NAS
在批量计算中使用NAS,需要按照如下步骤进行操作:
2.1. 数据准备
以下专有网络名、文件系统名、挂载点名只起示例作用,具体名称根据用户设定可能有所不同。
创建专有网络:选择现有专有网络或者参考文档(创建专有网络)创建一个新的专有网络,其ID由专有网络自动生成,假设为
vpc-m5egk1jsm3qkbxxxxxxxx
。创建交换机:选择现有交换机或者参考文档(创建交换机)创建一个新的交换机,其ID由专有网络自动生成,假设为
vsw-2zeue3c2rciybxxxxxxxx
,注意最好将交换机的网段设置为专有网络的子网。创建NAS文件系统:按照之前的文档在NAS控制台创建文件系统,其ID由NAS自动生成,假设为
0266e49fea
,目前批量计算仅支持NFS类型的NAS文件系统。创建挂载点:选择挂载点类型为专有网络,并选择上面步骤创建的专有网络和交换机,如果没有特殊需求,选择默认的权限组即可,创建完成在挂载点管理界面查看挂载地址,一般类似
0266e49fea-yio75.cn-beijing.nas.aliyuncs.com
。
2.2. 使用用户专有网络创建集群
用户程序要在批量计算集群节点中访问存储在NAS中的文件,需要在创建批量计算集群时同时指定VpcId和CidrBlock,将批量计算集群创建到用户专有网络中。
VpcId
: 用户NAS挂载点所在的专有网络ID,用户需要将示例中的ID替换为用户的实际值。CidrBlock
:批量计算集群在专有网络的私网范围,一般为专有网络网段的子网段,用户按照自己的网段规划填入合适的值,详情参考网段规划。
2.2.1. 使用Python SDK
# 以下是创建集群时指定专有网络和集群的网段规划
cluster_desc['Configs']['Networks']['VPC']['VpcId'] = 'vpc-m5egk1jsm3qkbxxxxxxxx'
cluster_desc['Configs']['NetWorks']['VPC']['CidrBlock'] = '192.168.0.0/20'
# 用户也可以在提交AutoJob时指定专有网络和集群的网段规划
job_desc['DAG']['Tasks']['my-task']['AutoCluster']['Configs']['Networks']['VPC']['VpcId'] = 'vpc-m5egk1jsm3qkbxxxxxxxx'
job_desc['DAG']['Tasks']['my-task']['AutoCluster']['Configs']['Networks']['VPC']['CidrBlock'] = '192.168.0.0/20'
2.2.2. 使用JAVA SDK
Configs configs = new Configs();
Networks networks = new Networks();
VPC vpc = new VPC();
vpc.setCidrBlock("192.168.0.0/20");
vpc.setVpcId("vpc-m5egk1jsm3qkbxxxxxxxx");
networks.setVpc(vpc);
configs.setNetworks(networks);
//创建集群时指定NAS文件系统和权限组信息
ClusterDescription clusterDescription = new ClusterDescription();
clusterDescription.setConfigs(configs);
//用户也可以在提交AutoJob时指定NAS文件系统和权限组信息
AutoCluster autoCluster = new AutoCluster();
autoCluster.setConfigs(configs);
2.3. 指定挂载点
批量计算根据用户提供的挂载信息自动将NAS的挂载点挂载为本地目录,需要用户在集群描述或作业描述的Mounts.Entries中指定NAS挂载点到本地目录的映射。
Source
:以nas://
为前缀,后面接上NAS挂载点和NAS文件系统目录信息,注意:批量计算的挂载支持多种来源,为了区分来源,目前NAS NFS文件系统需要以
nas://
作为前缀。Windows挂载由于Windows NFS client的行为,需要在最后加上感叹号,另外Windows上的挂载还有其他注意事项,请参考:Windows挂载注意事项。
用户也可以在用户程序中自行挂载(上节中创建集群到用户专有网络的步骤必不可少),具体请参考:手动挂载。
Destination
:批量计算集群节点内的本地目录,用户不需要事先创建该目录,批量计算会自动为用户创建该目录。WriteSupport
: 是否支持可写,如果用户指定为False
,会使用批量计算特有的分布式缓存来提高访问NAS的性能。
2.3.1. 使用Python SDK
# 集群级别挂载
# For Linux
cluster_desc['Configs']['Mounts']['Entries'] = {
'Source': 'nas://0266e49fea-yio75.cn-beijing.nas.aliyuncs.com:/',
'Destination': '/home/admin/mydir/',
'WriteSupport': true,
}
# For Windows
cluster_desc['Configs']['Mounts']['Entries'] = {
'Source': 'nas://0266e49fea-yio75.cn-beijing.nas.aliyuncs.com:/!',
'Destination': 'E:',
'WriteSupport': true,
}
# 作业级别挂载
# For Linux
job_desc['DAG']['Tasks']['my-task']['Mounts']['Entries'] = {
'Source': 'nas://0266e49fea-yio75.cn-beijing.nas.aliyuncs.com:/',
'Destination': '/home/admin/mydir/',
'WriteSupport': true,
}
# For Windows
job_desc['DAG']['Tasks']['my-task']['Mounts']['Entries'] = {
'Source': 'nas://0266e49fea-yio75.cn-beijing.nas.aliyuncs.com:/!',
'Destination': 'E:',
'WriteSupport': true,
}
2.3.2. 使用JAVA SDK
MountEntry mountEntry = new MountEntry();
mountEntry.setSource("nas://0266e49fea-yio75.cn-beijing.nas.aliyuncs.com:/");
mountEntry.setDestination("/home/admin/mydir/");
mountEntry.setWriteSupport(true);
mounts.addEntries(mountEntry);
3. NAS挂载注意事项
3.1. 权限组容量
目前NAS单个权限组最多只支持300条规则,目前批量计算服务只支持经典网络,一台VM对应一台权限规则,建议用户同时使用NAS的集群实例总和不要超过额度,否则行为未定义。
3.2. NAS服务收费
在批量计算中使用NAS服务不收取额外费用,由NAS服务进行计价,收费及计价标准请参考:NAS收费及价格。
3.3. Cluster Mounts和Job Mounts优先级
细心的用户会发现创建集群和提交作业时均支持在Mounts
字段中指定挂载NAS文件系统到本地目录,批量计算目前优先级如下:
作业中的Mounts会覆盖掉集群Mounts中的MountEntry(包括AutoCluster),但是对Cluster Mounts中的文件系统和权限组信息不会有影响。
作业结束后,集群级别的MountEntry不会恢复。