Share via


整合 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

  1. 使用 az aks show 命令搭配 --query nodeResourceGroup 查詢參數來取得節點資源群組。

    az aks show --resource-group myResourceGroup --name myAKSCluster --query nodeResourceGroup -o tsv
    

    您的輸出看起來應類似下列的範例輸出:

    MC_myResourceGroup_myAKSCluster_eastus
    
  2. 使用 az network vnet subnet create 命令建立專用 HPC Cache 子網路。 首先,定義 RESOURCE_GROUPVNET_NAMEVNET_IDSUBNET_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
    
  3. 在相同的節點資源群組和區域中建立 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 儲存體

  1. 使用 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
    
  2. 使用 az role assignment create 命令將儲存體 Blob 資料參與者角色指派給訂用帳戶。 首先,定義 STORAGE_ACCOUNT_IDAD_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
    
  3. 使用 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
    
  4. 使用 az role assignment 命令向 Azure HPC Cache 服務帳戶提供權限,以存取儲存體帳戶和 Blob 容器。 首先,定義 HPC_CACHE_USERHPC_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
    
  5. 使用 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"
    

設定用戶端負載平衡

  1. 使用 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
    
  2. 使用 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
    
  3. 使用 az network private-dns record-set a create 命令為面向用戶端的 IP 位址建立循環配置資源 DNS 名稱。 首先,定義 DNS_NAMEHPC_MOUNTS0HPC_MOUNTS1HPC_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
    

建立永續性磁碟區

  1. 建立名為 pv-nfs.yaml 的檔案,以定義 永續性磁碟區 ,然後貼上下列資訊清單。 取代 serverpath 屬性的值。

    ---
    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: pv-nfs
    spec:
      capacity:
        storage: 10000Gi
      accessModes:
        - ReadWriteMany
      mountOptions:
        - vers=3
      nfs:
        server: server.myhpccache.local
        path: /
    
  2. 使用 az aks get-credentials 命令取得 Kubernetes 叢集的認證。

    az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
    
  3. 使用 kubectl apply 命令建立永續性磁碟區。

    kubectl apply -f pv-nfs.yaml
    
  4. 使用 kubectl describe 命令,確認永續性磁碟區的狀態為可用

    kubectl describe pv pv-nfs
    

建立永續性磁碟區宣告

  1. 建立名為 pvc-nfs.yaml 的檔案,以定義 永續性磁碟區宣告 ,然後貼上下列資訊清單。

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: pvc-nfs
    spec:
      accessModes:
        - ReadWriteMany
      storageClassName: ""
      resources:
        requests:
          storage: 100Gi
    
  2. 使用 kubectl apply 命令建立永續性磁碟區宣告。

    kubectl apply -f pvc-nfs.yaml
    
  3. 使用 kubectl describe 命令,驗證永續性磁碟區宣告的狀態為繫結

    kubectl describe pvc pvc-nfs
    

使用 Pod 掛接HPC Cache

  1. 建立名為 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
    
  2. 使用 kubectl apply 命令建立 Pod。

    kubectl apply -f nginx-nfs.yaml
    
  3. 使用 kubectl describe 命令確認 Pod 正在執行。

    kubectl describe pod nginx-nfs
    
  4. 使用 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
    ...
    

下一步