整合 Azure HPC Cache 與 Azure Kubernetes Service (AKS)
Azure HPC Cache 可加快資料存取速度,以進行高效能運算 (HPC) 工作。 藉由在 Azure 中快取檔案,Azure HPC Cache 會將雲端運算的延展性帶入您現有的工作流程。 本文說明如何整合 Azure HPC Cache 與 AKS Azure Kubernetes Service (AKS)。
開始之前
AKS 叢集必須位於支援 Azure HPC Cache 的區域。
您需要 Azure CLI 2.7 版或更新版本。 執行
az --version
以尋找版本。 如果您需要安裝或升級,請參閱安裝 Azure CLI。在 Azure 訂用帳戶中註冊
hpc-cache
延伸模組。 如需在使用 Azure CLI 時搭配 HPC Cache 的詳細資訊,請參閱 HPC Cache CLI 的必要條件。檢閱 HPC Cache 的必要條件。 您必須先滿足下列需求,才能執行 HPC Cache:
- 快取需要具備至少 64 個可用 IP 位址的專用子網路。
- 子網路不得裝載其他 VM 或容器。
- 必須可從 AKS 節點存取子網路。
如果您需要以沒有根存取權的使用者身分執行應用程式,您可能需要使用變更擁有者 (chown) 命令來停用根壓縮,以將目錄所有權變更為其他使用者。 沒有根存取權的使用者必須擁有目錄才能存取檔案系統。 若要讓使用者擁有目錄,根使用者必須對該使用者建立目錄,但如果 HPC Cache 為壓縮根目錄,此作業會遭到拒絕,因為根使用者 (UID 0) 對應至匿名使用者。 如需根壓縮和用戶端存取原則的詳細資訊,請參閱 HPC Cache 存取原則。
安裝 hpc-cache
Azure CLI 延伸模組
重要
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 Cache
使用
az aks show
命令搭配--query nodeResourceGroup
查詢參數來取得節點資源群組。az aks show --resource-group myResourceGroup --name myAKSCluster --query nodeResourceGroup -o tsv
您的輸出看起來應類似下列的範例輸出:
MC_myResourceGroup_myAKSCluster_eastus
使用
az network vnet subnet create
命令建立專用 HPC Cache 子網路。 首先,定義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 Cache。 首先,定義
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 Cache。 下列範例會在美國東部區域中建立 HPC Cache,名稱為 MyHpcCache 的標準 2G 快取類型。 針對 --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 Cache 最多可能需要 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=mystoragecontainer
az storage container create --name $CONTAINER_NAME --account-name $STORAGE_ACCOUNT_NAME --auth-mode login
使用
az role assignment
命令向 Azure HPC Cache 服務帳戶提供權限,以存取儲存體帳戶和 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 Cache,作為儲存體目標。 下列範例會建立名為 MyStorageTarget 的 Blob 容器至 HPC Cache MyHpcCache。 指定 --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
命令取得 Kubernetes 叢集的認證。az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
使用
kubectl apply
命令建立永續性磁碟區。kubectl apply -f pv-nfs.yaml
使用
kubectl describe
命令,確認永續性磁碟區的狀態為可用。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
命令,驗證永續性磁碟區宣告的狀態為繫結。kubectl describe pvc pvc-nfs
使用 Pod 掛接HPC Cache
建立名為
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 Cache的詳細資訊,請參閱 HPC Cache 概觀。
- 如需搭配 AKS 使用 NFS 的詳細資訊,請參閱使用網路檔案系統 (NFS) Linux 和 AKS 伺服器磁碟區。