你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
Azure HPC 缓存可为高性能计算 (HPC) 任务加快对数据的访问。 通过在 Azure 中缓存文件,Azure HPC 缓存将云计算的可伸缩性带到现有工作流中。 本文介绍如何将 Azure HPC 缓存与 Azure Kubernetes 服务 (AKS) 集成。
开始之前
AKS 群集必须位于支持 Azure HPC 缓存的区域中。
需要 Azure CLI 2.7 或更高版本。 运行
az --version即可查找版本。 如果需要进行安装或升级,请参阅安装 Azure CLI。在 Azure 订阅中注册
hpc-cache扩展。 有关将 HPC 缓存 与 Azure CLI 配合使用的详细信息,请参阅 HPC 缓存 CLI 先决条件。查看 HPC 缓存先决条件。 需要满足以下条件,然后才能运行 HPC 缓存:
- 缓存需要一个至少有 64 个可用 IP 地址的专用子网。
- 此子网不得托管其他 VM 或容器。
- 必须可通过 AKS 节点访问子网。
如果需要以没有根访问权限的用户身份运行应用程序,则可能需要使用更改所有者 (chown) 命令将目录所有权更改为其他用户,从而禁用根压缩。 没有根访问权限的用户需要拥有某个目录才能访问文件系统。 要让用户拥有某个目录,root 用户必须通过 chown 将该目录的所有者修改为该用户。但是,如果 HPC 缓存已启用 root squash,则此操作将被拒绝,因为 root 用户 (UID 0) 正在映射到匿名用户。 有关根压缩和客户端访问策略的详细信息,请参阅 HPC 缓存访问策略。
安装 Azure CLI hpc-cache 扩展
重要
AKS 预览功能是可选择启用的自助功能。 预览功能是“按现状”和“按可用”提供的,不包括在服务级别协议和有限保证中。 AKS 预览功能是由客户支持尽最大努力部分覆盖。 因此,这些功能并不适合用于生产。 有关详细信息,请参阅以下支持文章:
若要安装 hpc-cache 扩展,请运行以下命令:
az extension add --name hpc-cache
运行以下命令以更新到已发布的最新扩展版本:
az extension update --name hpc-cache
注册 StorageCache 功能标志
使用命令 az provider register 注册 Microsoft.StorageCache 资源提供程序。
az provider register --namespace Microsoft.StorageCache --wait
状态显示为“已注册”需要几分钟时间。 使用 az feature show 命令验证注册状态:
az feature show --namespace "Microsoft.StorageCache"
创建 Azure HPC 缓存
使用包含查询参数
--query nodeResourceGroup的命令az aks show获取节点资源群。az aks show --resource-group myResourceGroup --name myAKSCluster --query nodeResourceGroup -o tsv输出应类似于以下示例输出:
MC_myResourceGroup_myAKSCluster_eastus使用命令
az network vnet subnet create创建专用 HPC 缓存子网。 首先定义RESOURCE_GROUP、VNET_NAME、VNET_ID和SUBNET_NAME的环境变量。 为RESOURCE_GROUP复制上一步中的输出,并为SUBNET_NAME指定值。RESOURCE_GROUP=MC_myResourceGroup_myAKSCluster_eastus VNET_NAME=$(az network vnet list --resource-group $RESOURCE_GROUP --query [].name -o tsv) VNET_ID=$(az network vnet show --resource-group $RESOURCE_GROUP --name $VNET_NAME --query "id" -o tsv) SUBNET_NAME=MyHpcCacheSubnetaz network vnet subnet create \ --resource-group $RESOURCE_GROUP \ --vnet-name $VNET_NAME \ --name $SUBNET_NAME \ --address-prefixes 10.0.0.0/26在同一节点资源组和区域中创建 HPC 缓存。 首先定义环境变量
SUBNET_ID。SUBNET_ID=$(az network vnet subnet show --resource-group $RESOURCE_GROUP --vnet-name $VNET_NAME --name $SUBNET_NAME --query "id" -o tsv)使用
az hpc-cache create命令创建 HPC 缓存。 以下示例在美国东部区域创建了一个名为“MyHpcCache”的标准 2G 缓存类型的 HPC 缓存。 指定 --location、--sku-name 和 --name 的值。az hpc-cache create \ --resource-group $RESOURCE_GROUP \ --cache-size-gb "3072" \ --location eastus \ --subnet $SUBNET_ID \ --sku-name "Standard_2G" \ --name MyHpcCache注意
创建 HPC 缓存最多可能需要 20 分钟。
创建和配置 Azure 存储
使用命令
az storage account create创建存储帐户。 首先定义环境变量STORAGE_ACCOUNT_NAME。重要
需要选择唯一的存储帐户名称。 将
uniquestorageaccount替换为指定的名称。 存储帐户名称长度必须为 3 到 24 个字符,且只能包含数字和小写字母。STORAGE_ACCOUNT_NAME=uniquestorageaccount以下示例在美国东部区域创建了一个使用 Standard_LRS SKU 的存储帐户。 指定 --location 和 --sku 的值。
az storage account create \ --name $STORAGE_ACCOUNT_NAME \ --resource-group $RESOURCE_GROUP \ --location eastus \ --sku Standard_LRS使用命令
az role assignment create在订阅上分配“存储 Blob 数据参与者角色”。 首先,定义环境变量STORAGE_ACCOUNT_ID和AD_USER。STORAGE_ACCOUNT_ID=$(az storage account show --name $STORAGE_ACCOUNT_NAME --query "id" -o tsv) AD_USER=$(az ad signed-in-user show --query objectId -o tsv)az role assignment create --role "Storage Blob Data Contributor" --assignee $AD_USER --scope $STORAGE_ACCOUNT_ID使用命令
az storage container create在存储帐户中创建 Blob 容器。 首先,定义环境变量CONTAINER_NAME并替换 Blob 容器的名称。CONTAINER_NAME=mystoragecontaineraz storage container create --name $CONTAINER_NAME --account-name $STORAGE_ACCOUNT_NAME --auth-mode login使用
az role assignment命令向 Azure HPC 缓存服务帐户提供访问存储帐户和 Blob 容器的权限。 首先,定义环境变量HPC_CACHE_USER和HPC_CACHE_ID。HPC_CACHE_USER="StorageCache Resource Provider" HPC_CACHE_ID=$(az ad sp list --display-name "${HPC_CACHE_USER}" --query "[].objectId" -o tsv)az role assignment create --role "Storage Account Contributor" --assignee $HPC_CACHE_ID --scope $STORAGE_ACCOUNT_ID az role assignment create --role "Storage Blob Data Contributor" --assignee $HPC_CACHE_ID --scope $STORAGE_ACCOUNT_ID使用
az hpc-cache blob-storage-target add命令将 Blob 容器作为存储目标添加到 HPC 缓存。 以下示例为 HPC 缓存 MyHpcCache 创建了一个名为 MyStorageTarget 的 Blob 容器。 指定 --name、--cache-name 和 --virtual-namespace-path 的值。az hpc-cache blob-storage-target add \ --resource-group $RESOURCE_GROUP \ --cache-name MyHpcCache \ --name MyStorageTarget \ --storage-account $STORAGE_ACCOUNT_ID \ --container-name $CONTAINER_NAME \ --virtual-namespace-path "/myfilepath"
设置客户端负载均衡
使用
az network private-dns zone create命令为面向客户端的 IP 地址创建 Azure 专用 DNS 区域。 首先,定义环境变量PRIVATE_DNS_ZONE并指定区域的名称。PRIVATE_DNS_ZONE="myhpccache.local"az network private-dns zone create \ --resource-group $RESOURCE_GROUP \ --name $PRIVATE_DNS_ZONE使用
az network private-dns link vnet create命令在 Azure 专用 DNS 区域和 VNet 之间创建 DNS 链接。 替换 --name 的值。az network private-dns link vnet create \ --resource-group $RESOURCE_GROUP \ --name MyDNSLink \ --zone-name $PRIVATE_DNS_ZONE \ --virtual-network $VNET_NAME \ --registration-enabled true使用
az network private-dns record-set a create命令为面向客户端的 IP 地址创建轮循机制 DNS 名称。 首先,定义环境变量DNS_NAME、HPC_MOUNTS0、HPC_MOUNTS1和HPC_MOUNTS2。 替换DNS_NAME属性的值。DNS_NAME="server" HPC_MOUNTS0=$(az hpc-cache show --name "MyHpcCache" --resource-group $RESOURCE_GROUP --query "mountAddresses[0]" -o tsv | tr --delete '\r') HPC_MOUNTS1=$(az hpc-cache show --name "MyHpcCache" --resource-group $RESOURCE_GROUP --query "mountAddresses[1]" -o tsv | tr --delete '\r') HPC_MOUNTS2=$(az hpc-cache show --name "MyHpcCache" --resource-group $RESOURCE_GROUP --query "mountAddresses[2]" -o tsv | tr --delete '\r')az network private-dns record-set a add-record -g $RESOURCE_GROUP -z $PRIVATE_DNS_ZONE -n $DNS_NAME -a $HPC_MOUNTS0 az network private-dns record-set a add-record -g $RESOURCE_GROUP -z $PRIVATE_DNS_ZONE -n $DNS_NAME -a $HPC_MOUNTS1 az network private-dns record-set a add-record -g $RESOURCE_GROUP -z $PRIVATE_DNS_ZONE -n $DNS_NAME -a $HPC_MOUNTS2
创建永久性卷
创建名为
pv-nfs.yaml的文件来定义永久性卷,然后粘贴以下清单。 替换属性server和path的值。--- apiVersion: v1 kind: PersistentVolume metadata: name: pv-nfs spec: capacity: storage: 10000Gi accessModes: - ReadWriteMany mountOptions: - vers=3 nfs: server: server.myhpccache.local path: /使用
az aks get-credentials命令获取 AKS 群集的凭据。az aks get-credentials --resource-group myResourceGroup --name myAKSCluster使用
kubectl apply命令创建永久性卷。kubectl apply -f pv-nfs.yaml使用
kubectl describe命令验证永久性卷的状态是否为“Available”。kubectl describe pv pv-nfs
创建永久性卷声明
创建名为
pvc-nfs.yaml的文件来定义永久性卷声明,然后粘贴以下清单。apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-nfs spec: accessModes: - ReadWriteMany storageClassName: "" resources: requests: storage: 100Gi使用
kubectl apply命令创建永久性卷声明。kubectl apply -f pvc-nfs.yaml使用
kubectl describe命令验证永久性卷声明的“状态”是否为“Bound”。kubectl describe pvc pvc-nfs
使用 Pod 装载 HPC 缓存
创建名为
nginx-nfs.yaml的文件,用于定义使用永久性卷声明的 Pod,然后粘贴以下清单。kind: Pod apiVersion: v1 metadata: name: nginx-nfs spec: containers: - image: mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine name: nginx-nfs command: - "/bin/sh" - "-c" - while true; do echo $(date) >> /mnt/azure/myfilepath/outfile; sleep 1; done volumeMounts: - name: disk01 mountPath: /mnt/azure volumes: - name: disk01 persistentVolumeClaim: claimName: pvc-nfs使用
kubectl apply命令创建 Pod。kubectl apply -f nginx-nfs.yaml使用
kubectl describe命令验证 Pod 是否正在运行。kubectl describe pod nginx-nfs使用
kubectl exec命令连接到 Pod 以验证卷是否已装载到 Pod 中。kubectl exec -it nginx-nfs -- sh若要检查卷是否已装载,请使用
--human-readable(简写为-h)选项以易于阅读的格式运行df。df -h以下示例类似于该命令返回的输出:
Filesystem Size Used Avail Use% Mounted on ... server.myhpccache.local:/myfilepath 8.0E 0 8.0E 0% /mnt/azure/myfilepath ...
后续步骤
- 有关 Azure HPC 缓存的详细信息,请参阅 HPC 缓存概述。
- 有关在 AKS 中使用 NFS 的详细信息,请参阅在 AKS 中手动创建并使用网络文件系统 (NFS) Linux Server 卷。