阿里云文件存儲(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不會恢復。