다음을 통해 공유


AKS(Azure Kubernetes Service)와 Azure HPC Cache 통합

Azure HPC Cache는 HPC(고성능 컴퓨팅) 작업을 위해 데이터 액세스 속도를 높입니다. Azure에서 파일을 캐싱하여 Azure HPC Cache는 기존 워크플로에 대한 클라우드 컴퓨팅의 확장성을 제공합니다. 이 문서에서는 Azure HPC Cache와 AKS(Azure Kubernetes Service)를 통합하는 방법을 보여줍니다.

시작하기 전에

  • AKS 클러스터는 Azure HPC Cache를 지원하는 지역에 있어야 합니다.

  • Azure CLI 버전 2.7 이상이 필요합니다. az --version을 실행하여 버전을 찾습니다. 설치 또는 업그레이드해야 하는 경우 Azure CLI 설치를 참조하세요.

  • hpc-cache Azure 구독에 확장을 등록합니다. Azure CLI에서 HPC Cache를 사용하는 방법에 대한 자세한 내용은 HPC Cache CLI 필수 구성 요소를 참조하세요.

  • HPC Cache 필수 구성 요소를 검토합니다. HPC Cache를 실행하려면 다음을 충족해야 합니다.

    • 캐시에는 64개 이상의 IP 주소를 사용할 수 있는 전용 서브넷이 필요합니다.
    • 이 서브넷은 다른 VM 또는 컨테이너를 호스트해서는 안 됩니다.
    • 이 서브넷은 AKS 노드에서 액세스할 수 있어야 합니다.
  • 루트 액세스 없이 사용자로 애플리케이션을 실행해야 하는 경우 변경 소유자(chown) 명령을 사용하여 디렉터리 소유권을 다른 사용자로 변경하여 루트 스쿼시를 사용하지 않도록 설정해야 할 수 있습니다. 루트 액세스 권한이 없는 사용자는 파일 시스템에 액세스하기 위해 디렉터리를 소유해야 합니다. 사용자가 디렉터리를 소유하려면 루트 사용자가 해당 사용자에게 디렉터리를 chown해야 하지만 HPC Cache가 루트를 스쿼시하는 경우 루트 사용자(UID 0)가 익명 사용자에 매핑되기 때문에 이 작업이 거부됩니다. 루트 스쿼시 및 클라이언트 액세스 정책에 대한 자세한 내용은 HPC Cache 액세스 정책을 참조하세요.

hpc-cache Azure CLI 확장 설치

Important

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

상태가 Registered로 표시되는 데 몇 분 정도 걸립니다. az feature show 명령을 사용하여 등록 상태를 확인합니다.

az feature show --namespace "Microsoft.StorageCache"

Azure HPC Cache 만들기

  1. --query nodeResourceGroup 쿼리 매개 변수와 함께 az aks show 명령을 사용하여 노드 리소스 그룹을 가져옵니다.

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

    출력은 다음 예제 출력과 비슷하게 됩니다.

    MC_myResourceGroup_myAKSCluster_eastus
    
  2. 명령을 사용하여 전용 HPC Cache 서브넷을 만듭니다 az network vnet subnet create . 먼저 , VNET_NAMEVNET_IDSUBNET_NAME에 대한 환경 변수를 RESOURCE_GROUP정의합니다. 에 대한 이전 단계의 출력을 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)
    

    명령을 사용하여 HPC Cache를 만듭니다 az hpc-cache create . 다음 예제에서는 MyHpcCache라는 표준 2G 캐시 형식을 사용하여 미국 동부 지역에 HPC Cache를 만듭니다. --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 Storage 만들기 및 구성

  1. az storage account create 명령을 사용하여 스토리지 계정을 만듭니다. 먼저 환경 변수 STORAGE_ACCOUNT_NAME를 정의합니다.

    Important

    고유한 스토리지 계정 이름을 선택해야 합니다. 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. 명령을 사용하여 구독에 Storage Blob 데이터 기여자 역할을 할당합니다az role assignment create. 먼저 환경 변수를 정의하고 AD_USER.STORAGE_ACCOUNT_ID

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

    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 컨테이너를 스토리지 대상으로 추가합니다. 다음 예제에서는 HPC Cache 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"
    

클라이언트 부하 분산 설정

  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_NAME, HPC_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. 영구 볼륨 클레임을 사용하는 Pod를 정의하는 명명 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 명령을 사용하여 Pod를 만듭니다.

    kubectl apply -f nginx-nfs.yaml
    
  3. kubectl describe 명령을 사용하여 Pod가 실행되고 있는지 확인합니다.

    kubectl describe pod nginx-nfs
    
  4. Pod에 연결하는 명령을 사용하여 볼륨이 Pod에 kubectl exec 탑재되었는지 확인합니다.

    kubectl exec -it nginx-nfs -- sh
    

    볼륨이 탑재되었는지 확인하려면 (-h짧은 경우) 옵션을 사용하여 --human-readable 사람이 읽을 수 있는 형식으로 실행 df 합니다.

    df -h
    

    다음 예제는 명령에서 반환된 출력과 유사합니다.

    Filesystem             Size  Used Avail Use% Mounted on
    ...
    server.myhpccache.local:/myfilepath 8.0E         0      8.0E   0% /mnt/azure/myfilepath
    ...
    

다음 단계