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 を作成する
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 キャッシュを作成します。 最初に環境変数
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 ストレージを作成して構成する
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
コマンドを使用して、ストレージ アカウントと BLOB コンテナーにアクセスするためのアクセス許可を Azure HPC Cache サービス アカウントに付与します。 最初に、環境変数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
コマンドを使用して、ストレージ ターゲットとして 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"
クライアントの負荷分散を設定する
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
コマンドを使用して、永続ボリューム要求の状態が Bound であることを確認します。kubectl describe pvc pvc-nfs
ポッドを使用して HPC キャッシュをマウントする
永続ボリューム要求を使用するポッドを定義するために
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
kubectl apply
コマンドを使用してポッドを作成します。kubectl apply -f nginx-nfs.yaml
kubectl describe
コマンドを使用してポッドが実行中であることを確認します。kubectl describe pod nginx-nfs
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 ...
次のステップ
- Azure HPC Cache の詳細については、HPC Cache の概要に関する記事を参照してください。
- NFS と AKS の使用の詳細については、NFS (Network File System) Linux Server ボリュームを手動で作成し、AKS と共に使用する方法に関する記事を参照してください。
Azure Kubernetes Service