你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
将 Azure HPC 缓存与 Azure Kubernetes 服务集成 (AKS)
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 缓存访问策略。
重要
AKS 预览功能是可选择启用的自助功能。 预览功能是“按现状”和“按可用”提供的,不包括在服务级别协议和有限保证中。 AKS 预览功能是由客户支持尽最大努力部分覆盖。 因此,这些功能并不适合用于生产。 有关详细信息,请参阅以下支持文章:
若要安装 hpc-cache 扩展,请运行以下命令:
az extension add --name hpc-cache
运行以下命令以更新到已发布的最新扩展版本:
az extension update --name hpc-cache
使用命令 az provider register
注册 Microsoft.StorageCache 资源提供程序。
az provider register --namespace Microsoft.StorageCache --wait
状态显示为“已注册”需要几分钟时间。 使用 az feature show 命令验证注册状态:
az feature show --namespace "Microsoft.StorageCache"
使用包含查询参数
--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=MyHpcCacheSubnet
az 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 分钟。
使用命令
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=mystoragecontainer
az 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
创建名为
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 卷。