Azure HPC Cache と Azure Kubernetes Service (AKS) を統合する

ハイパフォーマンス コンピューティング (HPC) タスク用に、Azure HPC Cache を使用してデータへのアクセスを高速化できます。 Azure HPC Cache で Azure 内のファイルをキャッシュすることで、クラウド コンピューティングのスケーラビリティを既存のワークフローでも実現します。 この記事では、Azure HPC Cache と 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 キャッシュを実行するには、次の条件を満たす必要があります。

    • キャッシュには、少なくとも 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 キャッシュを作成します。 最初に環境変数 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 キャッシュを作成します。 次の例では、キャッシュの種類に Standard 2G を使用して、米国東部リージョンに MyHpcCache という名前の 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
    

    Note

    HPC キャッシュの作成は最長で 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 コマンドを使用して、ストレージ アカウントと BLOB コンテナーにアクセスするためのアクセス許可を Azure HPC Cache サービス アカウントに付与します。 最初に、環境変数 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 コマンドを使用して、ストレージ ターゲットとして HPC Cache に BLOB コンテナーを追加します。 次の例では、MyStorageTarget という名前の BLOB コンテナーを HPC キャッシュ 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 コマンドを使用して、永続ボリューム要求の状態が Bound であることを確認します。

    kubectl describe pvc pvc-nfs
    

ポッドを使用して HPC キャッシュをマウントする

  1. 永続ボリューム要求を使用するポッドを定義するために nginx-nfs.yaml という名前のファイルを作成し、次のマニフェストを貼り付けます。

    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 コマンドを使用してポッドを作成します。

    kubectl apply -f nginx-nfs.yaml
    
  3. kubectl describe コマンドを使用してポッドが実行中であることを確認します。

    kubectl describe pod nginx-nfs
    
  4. kubectl exec コマンドを使用してポッドに接続し、ボリュームがポッドにマウントされていることを確認します。

    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
    ...
    

次のステップ