Поделиться через


Интеграция Azure HPC Cache с Служба Azure Kubernetes (AKS)

Azure HPC Cache ускоряет доступ к данным для задач высокопроизводительных вычислений (HPC). Azure HPC Cache обеспечивает масштабируемость облачных вычислений для имеющегося рабочего процесса благодаря кэшированию файлов в Azure. В этой статье рассказывается, как интегрировать Azure HPC Cache со Службой Azure Kubernetes (AKS).

Подготовка к работе

  • Кластер AKS должен находиться в регионе, поддерживающем Azure HPC Cache.

  • Вам потребуется Azure CLI версии 2.7 или более поздней. Чтобы узнать версию, выполните команду az --version. Если вам необходимо выполнить установку или обновление, см. статью Установка Azure CLI 2.0.

  • Зарегистрируйте расширение в подписке hpc-cache Azure. Дополнительные сведения об использовании HPC Cache с Azure CLI см. в предварительных требованиях интерфейса командной строки HPC Cache.

  • Просмотрите предварительные требования к HPC Cache. Перед запуском HPC Cache необходимо выполнить следующее:

    • Для кэша требуется выделенная подсеть с доступными по крайней мере 64 IP-адресами.
    • Подсеть не должна размещать другие виртуальные машины или контейнеры.
    • Подсеть должна быть доступна с узлов AKS.
  • Если вам нужно запустить приложение в качестве пользователя без доступа к корневому каталогу, может потребоваться отключить корневой скваширование с помощью команды изменения владельца (chown) для изменения владельца каталога на другого пользователя. Пользователь без корневого доступа должен иметь каталог для доступа к файловой системе. Чтобы пользователь владел каталогом, корневой пользователь должен отклонять каталог этому пользователю, но если hpC Cache скваширует корневой каталог, эта операция запрещена, так как корневой пользователь (UID 0) сопоставляется с анонимным пользователем. Дополнительные сведения о политиках доступа к корням и доступе к клиентам см. в политиках доступа HPC Cache.

Установка расширения Azure CLI hpc-cache

Внимание

Предварительные версии функций AKS доступны на уровне самообслуживания. Предварительные версии предоставляются "как есть" и "при наличии". На них не распространяются соглашения об уровне обслуживания и ограниченная гарантия. Предварительные версии AKS предоставляются с частичной клиентской поддержкой по мере возможности. Следовательно, эти функции не предназначены для использования в рабочей среде. Дополнительные сведения доступны в следующих статьях поддержки.

Чтобы установить расширение hpc-cache, выполните следующую команду:

az extension add --name hpc-cache

Выполните следующую команду, чтобы обновить до последней версии выпущенного расширения:

az extension update --name hpc-cache

Регистрация флага компонента StorageCache

Зарегистрируйте поставщика ресурсов Microsoft.StorageCache с помощью az provider register команды.

az provider register --namespace Microsoft.StorageCache --wait

Через несколько минут отобразится состояние Registered (Зарегистрировано). Проверьте состояние регистрации с помощью команды az feature show :

az feature show --namespace "Microsoft.StorageCache"

Создание Кэша HPC в Azure

  1. Получите группу ресурсов узла с помощью az aks show команды с параметром --query nodeResourceGroup запроса.

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

    Выходные данные должны выглядеть примерно так:

    MC_myResourceGroup_myAKSCluster_eastus
    
  2. Создайте выделенную подсеть HPC Cache с помощью az network vnet subnet create команды. Сначала определите переменные среды для RESOURCE_GROUP, VNET_NAMEи VNET_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)
    

    Создайте HPC Cache с помощью az hpc-cache create команды. В следующем примере создается HPC Cache в регионе "Восточная часть США" с типом кэша 2G уровня "Стандартный" с именем MyHpcCache. Укажите значение для --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
    

    В следующем примере создается учетная запись хранения в регионе "Восточная часть США" с номером SKU Standard_LRS. Укажите значение для --location и --sku.

    az storage account create \
      --name $STORAGE_ACCOUNT_NAME \
      --resource-group $RESOURCE_GROUP \
      --location eastus \
      --sku Standard_LRS
    
  2. Назначьте роль участника данных BLOB-объектов хранилища в подписке az role assignment create с помощью команды. Сначала определите переменные 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
    
  3. Создайте контейнер BLOB-объектов в учетной записи хранения с помощью az storage container create команды. Сначала определите переменную CONTAINER_NAME среды и замените имя контейнера BLOB-объектов.

    CONTAINER_NAME=mystoragecontainer
    
    az storage container create --name $CONTAINER_NAME --account-name $STORAGE_ACCOUNT_NAME --auth-mode login
    
  4. Предоставьте разрешения учетной записи службы Azure HPC Cache для доступа к учетной записи хранения и контейнеру BLOB-объектов с помощью az role assignment команд. Сначала определите переменные 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
    
  5. Добавьте контейнер BLOB-объектов в кэш HPC в качестве целевого объекта хранения с помощью az hpc-cache blob-storage-target add команды. В следующем примере создается контейнер BLOB-объектов с именем MyStorageTarget в кэше HPC MyHpcCache. Укажите значение --name, --cache-name и --virtual-name-name-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. Создайте зону azure Частная зона DNS для IP-адресов, подключенных к клиенту, с помощью az network private-dns zone create команды. Сначала определите переменную PRIVATE_DNS_ZONE среды и укажите имя зоны.

    PRIVATE_DNS_ZONE="myhpccache.local"
    
    az network private-dns zone create \
      --resource-group $RESOURCE_GROUP \
      --name $PRIVATE_DNS_ZONE
    
  2. Создайте DNS-связь между зоной Частная зона DNS Azure и виртуальной сетью az network private-dns link vnet create с помощью команды. Замените значение --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. Создайте DNS-имя для IP-адресов, подключенных к клиенту, с помощью az network private-dns record-set a create команды. Сначала определите переменные DNS_NAMEсреды , HPC_MOUNTS0и HPC_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 , чтобы определить постоянный том , а затем вставьте следующий манифест. Замените значения свойства 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: /
    
  2. Получите учетные данные для кластера Kubernetes с помощью az aks get-credentials команды.

    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
    

Подключение HPC Cache к модулю pod

  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. Создайте pod с помощью kubectl apply команды.

    kubectl apply -f nginx-nfs.yaml
    
  3. Убедитесь, что модуль pod выполняется с помощью kubectl describe команды.

    kubectl describe pod nginx-nfs
    
  4. Убедитесь, что том подключен в модуле pod с помощью kubectl exec команды для подключения к модулем pod.

    kubectl exec -it nginx-nfs -- sh
    

    Чтобы проверить, подключен ли том, запустите df его в формате, доступном --human-readable для чтения с помощью параметра (-h для короткого).

    df -h
    

    Следующий пример напоминает выходные данные, возвращаемые командой:

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

Следующие шаги