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


Использование хранилища контейнеров Azure с управляемыми дисками Azure

Хранилище контейнеров Azure — это облачная служба управления томами, развертывания и оркестрации, созданная изначально для контейнеров. В этой статье показано, как настроить хранилище контейнеров Azure для использования управляемых дисков Azure в качестве внутреннего хранилища для рабочих нагрузок Kubernetes. В конце концов у вас будет модуль pod, использующий управляемые диски Azure в качестве хранилища.

Необходимые компоненты

  • Если у вас нет подписки Azure, создайте бесплатную учетную запись, прежде чем приступить к работе.

  • Для этой статьи требуется последняя версия (2.35.0 или более поздняя) Azure CLI. Узнайте , как установить Azure CLI. Если вы используете среду Bash в Azure Cloud Shell, то последняя версия уже установлена. Если вы планируете выполнять команды локально, а не в Azure Cloud Shell, обязательно запустите их с правами администратора. Дополнительные сведения см. в статье "Начало работы с Azure Cloud Shell".

  • Вам потребуется клиент командной строки Kubernetes. kubectl Он уже установлен, если вы используете Azure Cloud Shell или вы можете установить его локально, выполнив az aks install-cli команду.

  • Если вы еще не установили хранилище контейнеров Azure, следуйте инструкциям в статье "Использование хранилища контейнеров Azure с Служба Azure Kubernetes".

  • Проверьте, поддерживается ли целевой регион в регионах хранилища контейнеров Azure.

  • Чтобы использовать хранилище контейнеров Azure с управляемыми дисками Azure, кластер AKS должен иметь пул узлов не менее трех виртуальных машин общего назначения, таких как standard_d4s_v5 для узлов кластера, каждый из которых содержит не менее четырех виртуальных ЦП (виртуальных ЦП).

Создание и присоединение постоянных томов

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

1. Создание пула носителей

Сначала создайте пул носителей, который является логическим группированием хранилища для кластера Kubernetes, определив его в файле манифеста YAML.

У вас есть следующие параметры для создания пула носителей:

Если вы включили хранилище контейнеров Azure с помощью az aks create или az aks update командами, возможно, у вас уже есть пул носителей. Используется kubectl get sp -n acstor для получения списка пулов носителей. Если у вас уже есть пул носителей, который вы хотите использовать, можно пропустить этот шаг и перейти к отображению доступных классов хранилища.

Создание динамического пула носителей

Выполните следующие действия, чтобы создать динамический пул носителей для дисков Azure.

  1. Используйте избранный текстовый редактор для создания файла манифеста YAML, code acstor-storagepool.yamlнапример.

  2. Вставьте приведенный ниже код. Значение имени пула носителей может быть любым нужным. Для skuName укажите уровень производительности и избыточности. Допустимые значения: Premium_LRS, Standard_LRS, StandardSSD_LRS, UltraSSD_LRS, Premium_ZRS, PremiumV2_LRS и StandardSSD_ZRS. Для хранилища укажите объем емкости хранилища для пула в Gi или Ti.

    apiVersion: containerstorage.azure.com/v1
    kind: StoragePool
    metadata:
      name: azuredisk
      namespace: acstor
    spec:
      poolType:
        azureDisk:
          skuName: Premium_LRS
      resources:
        requests:
          storage: 1Ti
    

    Если вы используете UltraSSD_LRS или PremiumV2_LRS диски, можно задать количество операций ввода-вывода в секунду и пропускную способность с помощью IOPSReadWrite MBpsReadWrite параметров в определении пула носителей.

    IOPSReadWrite относится к количеству операций ввода-вывода в секунду, разрешенных для дисков SSD категории "Ультра" и "Премиум" версии 2 LRS. Дополнительные сведения см. в разделе "Ультра- дисковое число операций ввода-вывода в секунду" и SSD уровня "Премиум" версии 2.

    MBpsReadWrite относится к пропускной способности, разрешенной для дисков SSD категории "Ультра" и "Премиум" версии 2 LRS. MBps ссылается на миллионы байтов в секунду (МБ/с = 10^6 Байт в секунду). Дополнительные сведения см. в статье "Пропускная способность диска "Ультра" и пропускная способность SSD уровня "Премиум" версии 2.

    apiVersion: containerstorage.azure.com/v1
    kind: StoragePool
    metadata:
      name: azuredisk
      namespace: acstor
    spec:
      poolType:
        azureDisk:
          skuName: PremiumV2_LRS
          iopsReadWrite: 5000
          mbpsReadWrite: 200
      resources:
        requests:
          storage: 1Ti
    
  3. Сохраните файл манифеста YAML и примените его к созданию пула носителей.

    kubectl apply -f acstor-storagepool.yaml 
    

    После завершения создания пула носителей вы увидите следующее сообщение:

    storagepool.containerstorage.azure.com/azuredisk created
    

    Эту команду можно также запустить, чтобы проверить состояние пула носителей. Замените <storage-pool-name> значением имени пула носителей. В этом примере значение будет azuredisk.

    kubectl describe sp <storage-pool-name> -n acstor
    

При создании пула носителей хранилище контейнеров Azure создаст класс хранилища от вашего имени с помощью соглашения acstor-<storage-pool-name>об именовании. Теперь можно отобразить доступные классы хранилища и создать утверждение постоянного тома.

Создание предварительно подготовленного пула носителей

Если у вас уже подготовленные управляемые диски Azure, можно создать предварительно подготовленный пул носителей с помощью этих дисков. Так как диски уже подготовлены, вам не нужно указывать skuName или емкость хранилища при создании пула носителей.

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

  1. Войдите на портал Azure.

  2. Для каждого диска, который вы хотите использовать, перейдите к управляемому диску Azure и выберите "Свойства параметров>". Скопируйте всю строку в идентификатор ресурса и поместите ее в текстовый файл.

  3. Используйте избранный текстовый редактор для создания файла манифеста YAML, code acstor-storagepool.yamlнапример.

  4. Вставьте приведенный ниже код. Значение имени пула носителей может быть любым нужным. Замените <resource-id> идентификатором ресурса каждого управляемого диска. Сохраните файл.

    apiVersion: containerstorage.azure.com/v1
    kind: StoragePool
    metadata:
      name: sp-preprovisioned
      namespace: acstor
    spec:
      poolType:
        azureDisk:
          disks:
            - reference <resource-id1>
            - reference <resource-id2>
    
  5. Примените файл манифеста YAML для создания пула носителей.

    kubectl apply -f acstor-storagepool.yaml 
    

    После завершения создания пула носителей вы увидите следующее сообщение:

    storagepool.containerstorage.azure.com/sp-preprovisioned created
    

    Эту команду можно также запустить, чтобы проверить состояние пула носителей. Замените <storage-pool-name> значением имени пула носителей. В этом примере значение будет предварительно создано с пакетом обновления.

    kubectl describe sp <storage-pool-name> -n acstor
    

При создании пула носителей хранилище контейнеров Azure создаст класс хранилища от вашего имени с помощью соглашения acstor-<storage-pool-name>об именовании. Теперь можно отобразить доступные классы хранилища и создать утверждение постоянного тома.

Создание динамического пула носителей с помощью собственного ключа шифрования (необязательно)

Все данные в учетной записи хранения Azure шифруются неактивных данных. По умолчанию данные шифруются с помощью ключей, управляемых Майкрософт. Для получения большего контроля над ключами шифрования можно предоставить управляемые клиентом ключи (CMK) при создании пула носителей для шифрования создаваемых постоянных томов.

Чтобы использовать собственный ключ для шифрования на стороне сервера, необходимо иметь Azure Key Vault с ключом. В Key Vault должна быть включена защита от очистки, и она должна использовать модель разрешений Azure RBAC. Дополнительные сведения о ключах, управляемых клиентом, в Linux.

При создании пула носителей необходимо определить параметры CMK. Обязательные параметры шифрования CMK:

  • keyVersion указывает версию ключа для использования.
  • keyName — это имя ключа.
  • keyVaultUri — это универсальный идентификатор ресурса Azure Key Vault, например https://user.vault.azure.net
  • Удостоверение указывает управляемое удостоверение с доступом к хранилищу, например /subscriptions/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX/resourcegroups/MC_user-acstor-westus2-rg_user-acstor-westus2_westus2/providers/Microsoft.ManagedIdentity/userAssignedIdentities/user-acstor-westus2-agentpool

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

  1. Используйте избранный текстовый редактор для создания файла манифеста YAML, code acstor-storagepool-cmk.yamlнапример.

  2. Вставьте следующий код, укажите необходимые параметры и сохраните файл. Значение имени пула носителей может быть любым нужным. Для skuName укажите уровень производительности и избыточности. Допустимые значения: Premium_LRS, Standard_LRS, StandardSSD_LRS, UltraSSD_LRS, Premium_ZRS, PremiumV2_LRS и StandardSSD_ZRS. Для хранилища укажите объем емкости хранилища для пула в Gi или Ti. Обязательно укажите параметры шифрования CMK.

    apiVersion: containerstorage.azure.com/v1
    kind: StoragePool
    metadata:
      name: azuredisk
      namespace: acstor
    spec:
      poolType:
        azureDisk:
          skuName: Premium_LRS
          encryption: {
            keyVersion: "<key-version>",
            keyName: "<key-name>",
            keyVaultUri: "<key-vault-uri>",
            identity: "<identity>"
          }
      resources:
        requests:
          storage: 1Ti
    
  3. Примените файл манифеста YAML для создания пула носителей.

    kubectl apply -f acstor-storagepool-cmk.yaml 
    

    После завершения создания пула носителей вы увидите следующее сообщение:

    storagepool.containerstorage.azure.com/azuredisk created
    

    Эту команду можно также запустить, чтобы проверить состояние пула носителей. Замените <storage-pool-name> значением имени пула носителей. В этом примере значение будет azuredisk.

    kubectl describe sp <storage-pool-name> -n acstor
    

При создании пула носителей хранилище контейнеров Azure создаст класс хранилища от вашего имени с помощью соглашения acstor-<storage-pool-name>об именовании.

2. Отображение доступных классов хранилища

Когда пул носителей готов к использованию, необходимо выбрать класс хранилища, чтобы определить, как хранилище динамически создается при создании утверждений постоянного тома и развертывании постоянных томов.

Запустите kubectl get sc , чтобы отобразить доступные классы хранилища. Вы увидите класс хранилища с именем acstor-<storage-pool-name>.

Внимание

Не используйте класс хранилища, помеченный внутренним. Это внутренний класс хранилища, необходимый для работы хранилища контейнеров Azure.

3. Создание утверждения постоянного тома

Утверждение постоянного тома (PVC) используется для автоматической подготовки хранилища на основе класса хранения. Выполните следующие действия, чтобы создать ПВХ с помощью нового класса хранения.

  1. Используйте избранный текстовый редактор для создания файла манифеста YAML, code acstor-pvc.yamlнапример.

  2. Вставьте следующий код и сохраните файл. Значение ПВХ name может быть любым, что вы хотите.

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: azurediskpvc
    spec:
      accessModes:
        - ReadWriteOnce
      storageClassName: acstor-azuredisk # replace with the name of your storage class if different
      resources:
        requests:
          storage: 100Gi
    
  3. Примените файл манифеста YAML для создания ПВХ.

    kubectl apply -f acstor-pvc.yaml
    

    Должен отобразиться примерно такой результат:

    persistentvolumeclaim/azurediskpvc created
    

    Вы можете проверить состояние ПВХ, выполнив следующую команду:

    kubectl describe pvc azurediskpvc
    

После создания ПВХ он готов к использованию pod.

4. Развертывание модуля pod и подключение постоянного тома

Создайте модуль pod с помощью Fio (гибкий средство тестирования ввода-вывода) для тестирования и моделирования рабочих нагрузок и укажите путь подключения для постоянного тома. Для имени утверждения используйте значение имени , используемое при создании утверждения постоянного тома.

  1. Используйте избранный текстовый редактор для создания файла манифеста YAML, code acstor-pod.yamlнапример.

  2. Вставьте следующий код и сохраните файл.

    kind: Pod
    apiVersion: v1
    metadata:
      name: fiopod
    spec:
      nodeSelector:
        acstor.azure.com/io-engine: acstor
      volumes:
        - name: azurediskpv
          persistentVolumeClaim:
            claimName: azurediskpvc
      containers:
        - name: fio
          image: nixery.dev/shell/fio
          args:
            - sleep
            - "1000000"
          volumeMounts:
            - mountPath: "/volume"
              name: azurediskpv
    
  3. Примените файл манифеста YAML для развертывания модуля pod.

    kubectl apply -f acstor-pod.yaml
    

    Вы должны увидеть результат, аналогичный приведенному ниже:

    pod/fiopod created
    
  4. Убедитесь, что модуль pod запущен и что утверждение постоянного тома успешно привязано к pod:

    kubectl describe pod fiopod
    kubectl describe pvc azurediskpvc
    
  5. Проверьте тестирование fio, чтобы просмотреть текущее состояние:

    kubectl exec -it fiopod -- fio --name=benchtest --size=800m --filename=/volume/test --direct=1 --rw=randrw --ioengine=libaio --bs=4k --iodepth=16 --numjobs=8 --time_based --runtime=60
    

Теперь вы развернули модуль pod, использующий диски Azure в качестве хранилища, и его можно использовать для рабочих нагрузок Kubernetes.

Управление постоянными томами и пулами носителей

Теперь, когда вы создали постоянный том, вы можете отсоединить и повторно подключить его по мере необходимости. Вы также можете развернуть или удалить пул носителей.

Отключение и повторное подключение постоянного тома

Чтобы отключить постоянный том, удалите модуль pod, к которому подключен постоянный том. Замените <pod-name> именем pod, например fiopod.

kubectl delete pods <pod-name>

Чтобы повторно подключить постоянный том, просто укажите имя утверждения постоянного тома в файле манифеста YAML, как описано в разделе "Развертывание модуля pod" и подключение постоянного тома.

Чтобы проверить, к каким постоянным томам привязано утверждение постоянного тома, выполните команду kubectl get pvc <persistent-volume-claim-name>.

Развертывание пула носителей

Вы можете расширить пулы носителей, поддерживаемые дисками Azure, чтобы быстро увеличивать масштаб и без простоя. Сжатие пулов носителей в настоящее время не поддерживается. Расширение пула носителей не поддерживается для дисков категории "Ультра" или SSD уровня "Премиум" версии 2.

Примечание.

Расширение пула носителей может увеличить затраты на хранилище контейнеров Azure и диски Azure. См. страницу цен на службу хранилища контейнеров Azure и выставление счетов за использование службы хранилища контейнеров Azure.

В настоящее время расширение пула носителей имеет следующее ограничение при использовании Premium_LRS, Standard_LRS, StandardSSD_LRSи StandardSSD_ZRS Premium_ZRSSKU:

  • Если существующий пул носителей меньше 4 ТиБ (4096 ГиБ), его можно развернуть только до 4095 ГиБ. Чтобы избежать ошибок, не пытайтесь расширить текущий пул носителей за пределами 4095 ГиБ, если он изначально меньше 4 ТиБ (4096 ГиБ). Пулы > носителей 4 ТиБ можно расширить до максимально доступной емкости хранилища.

Следуйте этим инструкциям, чтобы развернуть существующий пул носителей для дисков Azure.

  1. С помощью текстового редактора откройте файл манифеста YAML, который использовался для создания пула носителей, например code acstor-storagepool.yaml.

  2. Замените указанную запись хранилища в файле манифеста YAML требуемым значением. Это значение должно быть больше текущей емкости пула носителей. Например, если для спецификации задано storage: 1Tiзначение , измените его на storage: 2Ti. Если вы создали предварительно подготовленный пул носителей, не будет записи хранилища , так как пул носителей наследует размер емкости из предварительно подготовленных дисков Azure. Если запись хранилища не отображается в YAML, добавьте следующий код, указав нужную емкость хранилища, а затем сохраните файл манифеста:

    spec:
      resources:
        requests:
          storage: 2Ti
    

Примечание.

Если у вас есть два диска в пуле носителей с емкостью 1 ТиБ, и вы редактируете файл манифеста YAML для чтения storage: 4Ti, оба диска будут развернуты до 2 ТиБ при применении YAML, что дает вам новую общую емкость 4 ТиБ.

  1. Примените файл манифеста YAML для расширения пула носителей.

    kubectl apply -f acstor-storagepool.yaml 
    
  2. Выполните эту команду, чтобы проверить состояние пула носителей. Замените <storage-pool-name> значением имени пула носителей.

    kubectl describe sp <storage-pool-name> -n acstor
    

    Должно появиться сообщение, например "пул носителей расширяется". Выполните команду снова через несколько минут, и сообщение должно быть удалено.

  3. Запуск kubectl get sp -A и пул носителей должны отражать новый размер.

Удаление пула носителей

Если вы хотите удалить пул носителей, выполните следующую команду. Замените <storage-pool-name> именем пула носителей.

kubectl delete sp -n acstor <storage-pool-name>

См. также